[BACK]Return to main.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/main.c between version 1.357 and 1.360

version 1.357, 2021/09/04 12:52:57 version 1.360, 2021/10/04 21:29:17
Line 132  main(int argc, char *argv[])
Line 132  main(int argc, char *argv[])
         struct mparse   *mp;            /* Opaque parser object. */          struct mparse   *mp;            /* Opaque parser object. */
         const char      *conf_file;     /* -C: alternate config file. */          const char      *conf_file;     /* -C: alternate config file. */
         const char      *os_s;          /* -I: Operating system for display. */          const char      *os_s;          /* -I: Operating system for display. */
         const char      *progname, *sec;          const char      *progname, *sec, *ep;
         char            *defpaths;      /* -M: override manpaths. */          char            *defpaths;      /* -M: override manpaths. */
         char            *auxpaths;      /* -m: additional manpaths. */          char            *auxpaths;      /* -m: additional manpaths. */
         char            *oarg;          /* -O: output option string. */          char            *oarg;          /* -O: output option string. */
Line 516  main(int argc, char *argv[])
Line 516  main(int argc, char *argv[])
                                 memcpy(res + ressz, resn,                                  memcpy(res + ressz, resn,
                                     sizeof(*resn) * resnsz);                                      sizeof(*resn) * resnsz);
                                 ressz += resnsz;                                  ressz += resnsz;
                                   free(resn);
                                   resn = NULL;
                                   resnsz = 0;
                                 continue;                                  continue;
                         }                          }
   
Line 536  main(int argc, char *argv[])
Line 539  main(int argc, char *argv[])
                                         sec++; /* Prefer without suffix. */                                          sec++; /* Prefer without suffix. */
                                 if (*sec != '/')                                  if (*sec != '/')
                                         prio += 10; /* Wrong dir name. */                                          prio += 10; /* Wrong dir name. */
                                 if (search.sec != NULL &&                                  if (search.sec != NULL) {
                                     (strlen(sec) <= ssz  + 3 ||                                          ep = strchr(sec, '\0');
                                      strcmp(sec + strlen(sec) - ssz,                                          if (ep - sec > 3 &&
                                       search.sec) != 0))                                              strncmp(ep - 3, ".gz", 3) == 0)
                                         prio += 20; /* Wrong file ext. */                                                  ep -= 3;
                                           if ((size_t)(ep - sec) < ssz + 3 ||
                                               strncmp(ep - ssz, search.sec,
                                                ssz) != 0)      /* Wrong file */
                                                   prio += 20;  /* extension. */
                                   }
                                 if (prio >= best_prio)                                  if (prio >= best_prio)
                                         continue;                                          continue;
                                 best_prio = prio;                                  best_prio = prio;
Line 549  main(int argc, char *argv[])
Line 557  main(int argc, char *argv[])
                         res = mandoc_reallocarray(res, ressz + 1,                          res = mandoc_reallocarray(res, ressz + 1,
                             sizeof(*res));                              sizeof(*res));
                         memcpy(res + ressz++, resn + ib, sizeof(*resn));                          memcpy(res + ressz++, resn + ib, sizeof(*resn));
                           memset(resn + ib, 0, sizeof(*resn));
                           mansearch_free(resn, resnsz);
                           resn = NULL;
                           resnsz = 0;
                 }                  }
   
         /* apropos(1), whatis(1): Process the full search expression. */          /* apropos(1), whatis(1): Process the full search expression. */
Line 1274  spawn_pager(struct outstate *outst, char *tag_target)
Line 1286  spawn_pager(struct outstate *outst, char *tag_target)
         char            *argv[MAX_PAGER_ARGS];          char            *argv[MAX_PAGER_ARGS];
         const char      *pager;          const char      *pager;
         char            *cp;          char            *cp;
           size_t           wordlen;
 #if HAVE_LESS_T  #if HAVE_LESS_T
         size_t           cmdlen;          size_t           cmdlen;
 #endif  #endif
Line 1288  spawn_pager(struct outstate *outst, char *tag_target)
Line 1301  spawn_pager(struct outstate *outst, char *tag_target)
                 pager = getenv("PAGER");                  pager = getenv("PAGER");
         if (pager == NULL || *pager == '\0')          if (pager == NULL || *pager == '\0')
                 pager = BINM_PAGER;                  pager = BINM_PAGER;
         cp = mandoc_strdup(pager);  
   
         /*          /*
          * Parse the pager command into words.           * Parse the pager command into words.
Line 1296  spawn_pager(struct outstate *outst, char *tag_target)
Line 1308  spawn_pager(struct outstate *outst, char *tag_target)
          */           */
   
         argc = 0;          argc = 0;
         while (argc + 5 < MAX_PAGER_ARGS) {          while (*pager != '\0' && argc + 5 < MAX_PAGER_ARGS) {
                 argv[argc++] = cp;                  wordlen = strcspn(pager, " ");
                 cp = strchr(cp, ' ');                  argv[argc++] = mandoc_strndup(pager, wordlen);
                 if (cp == NULL)                  pager += wordlen;
                         break;                  while (*pager == ' ')
                 *cp++ = '\0';                          pager++;
                 while (*cp == ' ')  
                         cp++;  
                 if (*cp == '\0')  
                         break;  
         }          }
   
         /* For less(1), use the tag file. */          /* For less(1), use the tag file. */
Line 1317  spawn_pager(struct outstate *outst, char *tag_target)
Line 1325  spawn_pager(struct outstate *outst, char *tag_target)
                 cp = argv[0] + cmdlen - 4;                  cp = argv[0] + cmdlen - 4;
                 if (strcmp(cp, "less") == 0) {                  if (strcmp(cp, "less") == 0) {
                         argv[argc++] = mandoc_strdup("-T");                          argv[argc++] = mandoc_strdup("-T");
                         argv[argc++] = outst->tag_files->tfn;                          argv[argc++] = mandoc_strdup(outst->tag_files->tfn);
                         if (tag_target != NULL) {                          if (tag_target != NULL) {
                                 argv[argc++] = mandoc_strdup("-t");                                  argv[argc++] = mandoc_strdup("-t");
                                 argv[argc++] = tag_target;                                  argv[argc++] = mandoc_strdup(tag_target);
                                 use_ofn = 0;                                  use_ofn = 0;
                         }                          }
                 }                  }
Line 1331  spawn_pager(struct outstate *outst, char *tag_target)
Line 1339  spawn_pager(struct outstate *outst, char *tag_target)
                         mandoc_asprintf(&argv[argc], "file://%s#%s",                          mandoc_asprintf(&argv[argc], "file://%s#%s",
                             outst->tag_files->ofn, tag_target);                              outst->tag_files->ofn, tag_target);
                 else                  else
                         argv[argc] = outst->tag_files->ofn;                          argv[argc] = mandoc_strdup(outst->tag_files->ofn);
                 argc++;                  argc++;
         }          }
         argv[argc] = NULL;          argv[argc] = NULL;
Line 1343  spawn_pager(struct outstate *outst, char *tag_target)
Line 1351  spawn_pager(struct outstate *outst, char *tag_target)
         case 0:          case 0:
                 break;                  break;
         default:          default:
                   while (argc > 0)
                           free(argv[--argc]);
                 (void)setpgid(pager_pid, 0);                  (void)setpgid(pager_pid, 0);
                 (void)tcsetpgrp(STDOUT_FILENO, pager_pid);                  (void)tcsetpgrp(STDOUT_FILENO, pager_pid);
 #if HAVE_PLEDGE  #if HAVE_PLEDGE

Legend:
Removed from v.1.357  
changed lines
  Added in v.1.360

CVSweb