Module Name: src Committed By: gutteridge Date: Mon Mar 7 22:43:39 UTC 2022
Modified Files: src/usr.bin/man: man.c Log Message: man.c: fix -m option so it works as documented Refactoring work in man.c r. 1.40 from twelve years ago introduced a regression where input from the -m option was appended rather than prepended to the search paths. Problem reported by C. Chapman on netbsd-users. To generate a diff of this commit: cvs rdiff -u -r1.68 -r1.69 src/usr.bin/man/man.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/man/man.c diff -u src/usr.bin/man/man.c:1.68 src/usr.bin/man/man.c:1.69 --- src/usr.bin/man/man.c:1.68 Mon Apr 6 19:53:22 2020 +++ src/usr.bin/man/man.c Mon Mar 7 22:43:39 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: man.c,v 1.68 2020/04/06 19:53:22 maya Exp $ */ +/* $NetBSD: man.c,v 1.69 2022/03/07 22:43:39 gutteridge Exp $ */ /* * Copyright (c) 1987, 1993, 1994, 1995 @@ -40,7 +40,7 @@ __COPYRIGHT("@(#) Copyright (c) 1987, 19 #if 0 static char sccsid[] = "@(#)man.c 8.17 (Berkeley) 1/31/95"; #else -__RCSID("$NetBSD: man.c,v 1.68 2020/04/06 19:53:22 maya Exp $"); +__RCSID("$NetBSD: man.c,v 1.69 2022/03/07 22:43:39 gutteridge Exp $"); #endif #endif /* not lint */ @@ -69,6 +69,11 @@ __RCSID("$NetBSD: man.c,v 1.68 2020/04/0 #define MAN_DEBUG 0 /* debug path output */ #endif +enum inserttype { + INS_TAIL, + INS_HEAD +} instype; + /* * manstate: structure collecting the current global state so we can * easily identify it and pass it to helper functions in one arg. @@ -117,7 +122,7 @@ static void jump(char **, const char *, static int manual(char *, struct manstate *, glob_t *); static void onsig(int) __dead; static void usage(void) __dead; -static void addpath(struct manstate *, const char *, size_t, const char *); +static void addpath(struct manstate *, const char *, size_t, const char *, int); static const char *getclass(const char *); static void printmanpath(struct manstate *); @@ -327,7 +332,7 @@ main(int argc, char **argv) if (len < 1) continue; TAILQ_FOREACH(esubd, &m.subdirs->entrylist, q) - addpath(&m, p, len, esubd->s); + addpath(&m, p, len, esubd->s, INS_TAIL); } } else { @@ -335,12 +340,12 @@ main(int argc, char **argv) TAILQ_FOREACH(epath, &m.defaultpath->entrylist, q) { /* handle trailing "/" magic here ... */ if (abs_section && epath->s[epath->len - 1] != '/') { - addpath(&m, "", 1, epath->s); + addpath(&m, "", 1, epath->s, INS_TAIL); continue; } TAILQ_FOREACH(esubd, &m.subdirs->entrylist, q) - addpath(&m, epath->s, epath->len, esubd->s); + addpath(&m, epath->s, epath->len, esubd->s, INS_TAIL); } } @@ -358,7 +363,7 @@ main(int argc, char **argv) if (len < 1) continue; TAILQ_FOREACH(esubd, &m.subdirs->entrylist, q) - addpath(&m, p, len, esubd->s); + addpath(&m, p, len, esubd->s, INS_HEAD); /* Add to front */ } } @@ -1012,14 +1017,15 @@ getclass(const char *machine) } static void -addpath(struct manstate *m, const char *dir, size_t len, const char *sub) +addpath(struct manstate *m, const char *dir, size_t len, const char *sub, + int ishead) { char buf[2 * MAXPATHLEN + 1]; (void)snprintf(buf, sizeof(buf), "%s%s%s{/%s,%s%s%s}", dir, (dir[len - 1] == '/') ? "" : "/", sub, m->machine, m->machclass ? "/" : "", m->machclass ? m->machclass : "", m->machclass ? "," : ""); - if (addentry(m->mymanpath, buf, 0) < 0) + if (addentry(m->mymanpath, buf, ishead) < 0) errx(EXIT_FAILURE, "malloc failed"); }