]> git.cameronkatri.com Git - mandoc.git/commitdiff
When creation of the temporary tags file fails, call the pager
authorIngo Schwarze <schwarze@openbsd.org>
Tue, 21 Jul 2015 03:26:21 +0000 (03:26 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Tue, 21 Jul 2015 03:26:21 +0000 (03:26 +0000)
without the -T option, because otherwise the pager won't even start.
Fixing a bug reported by jca@.

While here, shorten the code by two lines
and delete one internal interface function.

main.c
tag.c
tag.h

diff --git a/main.c b/main.c
index ca30cf4de59c0af84fac0bcea955a1e65de39d7b..66bbfea88241a2c05cd184e748c9f4a91b07f887 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/*     $Id: main.c,v 1.242 2015/07/19 06:05:16 schwarze Exp $ */
+/*     $Id: main.c,v 1.243 2015/07/21 03:26:21 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2012, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -993,15 +993,18 @@ spawn_pager(void)
 
        /* Read all text right away and use the tag file. */
 
-       if ((cmdlen = strlen(argv[0])) >= 4) {
+       for (;;) {
+               if ((cmdlen = strlen(argv[0])) < 4)
+                       break;
                cp = argv[0] + cmdlen - 4;
-               if (strcmp(cp, "less") == 0 ||
-                   strcmp(cp, "more") == 0) {
-                       tag_init();
-                       argv[argc++] = mandoc_strdup("+G1G");
-                       argv[argc++] = mandoc_strdup("-T");
-                       argv[argc++] = tag_filename();
-               }
+               if (strcmp(cp, "less") && strcmp(cp, "more"))
+                       break;
+               if ((cp = tag_init()) == NULL)
+                       break;
+               argv[argc++] = mandoc_strdup("+G1G");
+               argv[argc++] = mandoc_strdup("-T");
+               argv[argc++] = cp;
+               break;
        }
        argv[argc] = NULL;
 
diff --git a/tag.c b/tag.c
index 69f4e422b19ce36aed8596fc2cb6eb3c175dc328..fd91e4a4868182cb9958b9bdd5897761285d1b5a 100644 (file)
--- a/tag.c
+++ b/tag.c
@@ -1,4 +1,4 @@
-/*      $Id: tag.c,v 1.2 2015/07/18 03:41:37 schwarze Exp $    */
+/*      $Id: tag.c,v 1.3 2015/07/21 03:26:22 schwarze Exp $    */
 /*
  * Copyright (c) 2015 Ingo Schwarze <schwarze@openbsd.org>
  *
@@ -52,7 +52,7 @@ static int             tag_fd = -1;
  * where various marked-up terms are documented and create
  * the temporary tags file, saving the name for the pager.
  */
-void
+char *
 tag_init(void)
 {
        struct ohash_info        tag_info;
@@ -64,7 +64,7 @@ tag_init(void)
        if ((tag_fd = mkstemp(tag_fn)) == -1) {
                free(tag_fn);
                tag_fn = NULL;
-               return;
+               return(NULL);
        }
 
        tag_info.alloc = tag_alloc;
@@ -73,12 +73,6 @@ tag_init(void)
        tag_info.key_offset = offsetof(struct tag_entry, s);
        tag_info.data = NULL;
        ohash_init(&tag_data, 4, &tag_info);
-}
-
-char *
-tag_filename(void)
-{
-
        return(tag_fn);
 }
 
diff --git a/tag.h b/tag.h
index 4456f323c16fa3406a84befdab4fe569e8238661..3708e4e335beb5f286c03ac69d464dcc711d6f3d 100644 (file)
--- a/tag.h
+++ b/tag.h
@@ -1,4 +1,4 @@
-/*      $Id: tag.h,v 1.1 2015/07/17 22:38:29 schwarze Exp $    */
+/*      $Id: tag.h,v 1.2 2015/07/21 03:26:22 schwarze Exp $    */
 /*
  * Copyright (c) 2015 Ingo Schwarze <schwarze@openbsd.org>
  *
@@ -17,8 +17,7 @@
 
 __BEGIN_DECLS
 
-void    tag_init(void);
-char   *tag_filename(void);
+char   *tag_init(void);
 size_t  tag_get(const char *, size_t);
 void    tag_put(const char *, size_t, size_t);
 void    tag_write(void);