man(1): fixup literal file suffix parsing
[dragonfly.git] / usr.bin / man / man.c
index bc83a0b..aaf4bba 100644 (file)
@@ -114,10 +114,10 @@ static void        cat(const char *);
 static const char      *check_pager(const char *);
 static int      cleanup(void);
 static void     how(const char *);
-static void     jump(char **, const char *, const char *) __dead;
+static void     jump(char **, const char *, const char *) __dead2;
 static int      manual(char *, struct manstate *, glob_t *);
-static void     onsig(int) __dead;
-static void     usage(void) __dead;
+static void     onsig(int);
+static void     usage(void) __dead2;
 static void     addpath(struct manstate *, const char *, size_t, const char *);
 static const char *getclass(const char *);
 static void printmanpath(struct manstate *);
@@ -536,10 +536,10 @@ manual(char *page, struct manstate *mp, glob_t *pg)
        *eptr = '\0';
 
        /*
-        * If 'page' is given with a full or relative path
-        * then interpret it as a file specification.
+        * If 'page' contains a slash then it's
+        * interpreted as a file specification.
         */
-       if ((page[0] == '/') || (page[0] == '.')) {
+       if (strchr(page, '/')) {
                /* check if file actually exists */
                (void)strlcpy(buf, escpage, sizeof(buf));
                error = glob(buf, GLOB_APPEND | GLOB_BRACE | GLOB_NOSORT, NULL, pg);
@@ -555,8 +555,9 @@ manual(char *page, struct manstate *mp, glob_t *pg)
                        goto notfound;
 
                /* clip suffix for the suffix check below */
-               p = strrchr(escpage, '.');
-               if (p && p[0] == '.' && isdigit((unsigned char)p[1]))
+               p = strrchr(escpage, '/');
+               p = strchr(p, '.');
+               if (p)
                        p[0] = '\0';
 
                found = 0;
@@ -905,7 +906,7 @@ jump(char **argv, const char *flag, const char *name)
 {
        char **arg;
 
-       argv[0] = __UNCONST(name);
+       argv[0] = __DECONST(char *, name);
        for (arg = argv + 1; *arg; ++arg)
                if (!strcmp(*arg, flag))
                        break;
@@ -922,13 +923,9 @@ jump(char **argv, const char *flag, const char *name)
 static void
 onsig(int signo)
 {
-
        (void)cleanup();
-
-       (void)raise_default_signal(signo);
-
-       /* NOTREACHED */
-       exit(EXIT_FAILURE);
+       signal(signo, SIG_DFL);
+       raise(signo);
 }
 
 /*