From 8b0f5621f479e5a9551c11730bcf6d906b306205 Mon Sep 17 00:00:00 2001 From: martin Date: Sun, 13 Mar 2022 09:54:01 +0000 Subject: [PATCH] Pull up following revision(s) (requested by gutteridge in ticket #1737): usr.bin/man/man.c: revision 1.69 usr.bin/man/man.c: revision 1.70 usr.bin/man/man.c: revision 1.72 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. man: fix type mismatch between enum and int (since yesterday) No binary change. man: remove unused global variable 'instype' (since yesterday) No functional change. --- usr.bin/man/man.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/usr.bin/man/man.c b/usr.bin/man/man.c index a5450298b6a2..32e9983308b6 100644 --- a/usr.bin/man/man.c +++ b/usr.bin/man/man.c @@ -1,4 +1,4 @@ -/* $NetBSD: man.c,v 1.66 2017/05/02 14:19:23 abhinav Exp $ */ +/* $NetBSD: man.c,v 1.66.2.1 2022/03/13 09:54:01 martin Exp $ */ /* * Copyright (c) 1987, 1993, 1994, 1995 @@ -40,7 +40,7 @@ __COPYRIGHT("@(#) Copyright (c) 1987, 1993, 1994, 1995\ #if 0 static char sccsid[] = "@(#)man.c 8.17 (Berkeley) 1/31/95"; #else -__RCSID("$NetBSD: man.c,v 1.66 2017/05/02 14:19:23 abhinav Exp $"); +__RCSID("$NetBSD: man.c,v 1.66.2.1 2022/03/13 09:54:01 martin Exp $"); #endif #endif /* not lint */ @@ -69,6 +69,11 @@ __RCSID("$NetBSD: man.c,v 1.66 2017/05/02 14:19:23 abhinav Exp $"); #define MAN_DEBUG 0 /* debug path output */ #endif +enum inserttype { + INS_TAIL, + INS_HEAD +}; + /* * 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,8 @@ static void jump(char **, const char *, const char *) __dead; 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 *, + enum inserttype); static const char *getclass(const char *); static void printmanpath(struct manstate *); @@ -328,7 +334,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 { @@ -336,12 +342,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); } } @@ -359,7 +365,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 */ } } @@ -1011,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, + enum inserttype 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, (int)ishead) < 0) errx(EXIT_FAILURE, "malloc failed"); }