man: use default MANPATH of "/usr/man"; do not search paths twice
authorDenis Vlasenko <vda.linux@googlemail.com>
Sun, 14 Sep 2008 21:26:55 +0000 (21:26 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sun, 14 Sep 2008 21:26:55 +0000 (21:26 -0000)
miscutils/man.c

index e6824ebc86ec60ec6c4f392b3616a4173873b0fc..26fd44ddf6f2b4dbc4724e7b41aeaceb44311cb8 100644 (file)
@@ -169,10 +169,10 @@ int man_main(int argc UNUSED_PARAM, char **argv)
        sec_list = xstrdup("1:2:3:4:5:6:7:8:9");
        /* Last valid man_path_list[] is [0x10] */
        man_path_list = xzalloc(0x11 * sizeof(man_path_list[0]));
-       count_mp = 0;
-       man_path_list[0] = xstrdup(getenv("MANPATH"));
-       if (man_path_list[0])
-               count_mp++;
+       man_path_list[0] = getenv("MANPATH");
+       if (!man_path_list[0])
+               man_path_list[0] = (char*)"/usr/man";
+       count_mp = 1;
        pager = getenv("MANPAGER");
        if (!pager) {
                pager = getenv("PAGER");
@@ -186,6 +186,13 @@ int man_main(int argc UNUSED_PARAM, char **argv)
                if (!token[1])
                        continue;
                if (strcmp("MANPATH", token[0]) == 0) {
+                       /* Do we already have it? */
+                       char **path_element = man_path_list;
+                       while (*path_element) {
+                               if (strcmp(*path_element, token[1]) == 0)
+                                       goto skip;
+                               path_element++;
+                       }
                        man_path_list = xrealloc_vector(man_path_list, 4, count_mp);
                        man_path_list[count_mp] = xstrdup(token[1]);
                        count_mp++;
@@ -196,6 +203,7 @@ int man_main(int argc UNUSED_PARAM, char **argv)
                        free(sec_list);
                        sec_list = xstrdup(token[1]);
                }
+ skip: ;
        }
        config_close(parser);