version 1.357, 2021/09/04 12:52:57 |
version 1.361, 2022/04/14 16:43:43 |
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 149 main(int argc, char *argv[]) |
|
Line 149 main(int argc, char *argv[]) |
|
enum mandoc_os os_e; /* Check base system conventions. */ |
enum mandoc_os os_e; /* Check base system conventions. */ |
enum outmode outmode; /* According to command line. */ |
enum outmode outmode; /* According to command line. */ |
|
|
|
#if DEBUG_MEMORY |
|
mandoc_dbg_init(argc, argv); |
|
#endif |
#if HAVE_PROGNAME |
#if HAVE_PROGNAME |
progname = getprogname(); |
progname = getprogname(); |
#else |
#else |
if (argc < 1) |
if (argc < 1) |
progname = mandoc_strdup("mandoc"); |
progname = "mandoc"; |
else if ((progname = strrchr(argv[0], '/')) == NULL) |
else if ((progname = strrchr(argv[0], '/')) == NULL) |
progname = argv[0]; |
progname = argv[0]; |
else |
else |
Line 516 main(int argc, char *argv[]) |
|
Line 519 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 542 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 560 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. */ |
|
|
} else if (outst.had_output && outst.outtype != OUTT_LINT) |
} else if (outst.had_output && outst.outtype != OUTT_LINT) |
mandoc_msg_summary(); |
mandoc_msg_summary(); |
|
|
|
#if DEBUG_MEMORY |
|
mandoc_dbg_finish(); |
|
#endif |
return (int)mandoc_msg_getrc(); |
return (int)mandoc_msg_getrc(); |
} |
} |
|
|
Line 1274 spawn_pager(struct outstate *outst, char *tag_target) |
|
Line 1292 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 1307 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 1314 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 1331 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 1345 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 1357 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 |