mn: use libbb for config parsing (by Vladimir)
authorDenis Vlasenko <vda.linux@googlemail.com>
Sun, 20 Jul 2008 17:41:30 +0000 (17:41 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sun, 20 Jul 2008 17:41:30 +0000 (17:41 -0000)
function                                             old     new   delta
man_main                                             757     713     -44

miscutils/man.c

index b1bb1530a276b238b523e58e3dcfd8c37424427c..75af3d7753f96b81afc8ee7a18058ac6f1fd24f7 100644 (file)
@@ -75,12 +75,11 @@ static int show_manpage(const char *pager, char *man_filename, int man)
 int man_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int man_main(int argc UNUSED_PARAM, char **argv)
 {
-       FILE *cf;
+       parser_t *parser;
        const char *pager;
        char **man_path_list;
        char *sec_list;
        char *cur_path, *cur_sect;
-       char *line, *value;
        int count_mp, cur_mp;
        int opt, not_found;
 
@@ -103,30 +102,24 @@ int man_main(int argc UNUSED_PARAM, char **argv)
        }
 
        /* Parse man.conf */
-       cf = fopen_or_warn("/etc/man.conf", "r");
-       if (cf) {
+       parser = config_open("/etc/man.conf");
+       if (parser) {
                /* go through man configuration file and search relevant paths, sections */
-               while ((line = xmalloc_fgetline(cf)) != NULL) {
-                       trim(line); /* remove whitespace at the beginning/end */
-                       if (isspace(line[7])) {
-                               line[7] = '\0';
-                               value = skip_whitespace(&line[8]);
-                               *skip_non_whitespace(value) = '\0';
-                               if (strcmp("MANPATH", line) == 0) {
-                                       man_path_list[count_mp] = xstrdup(value);
-                                       count_mp++;
-                                       /* man_path_list is NULL terminated */
-                                       man_path_list[count_mp] = NULL;
-                                       man_path_list = xrealloc_vector(man_path_list, 4, count_mp);
-                               }
-                               if (strcmp("MANSECT", line) == 0) {
-                                       free(sec_list);
-                                       sec_list = xstrdup(value);
-                               }
+               char *token[2];
+               while (config_read(parser, token, 2, 2, "# \t", PARSE_LAST_IS_GREEDY)) {
+                       if (strcmp("MANPATH", token[0]) == 0) {
+                               man_path_list = xrealloc_vector(man_path_list, 4, count_mp);
+                               man_path_list[count_mp] = xstrdup(token[1]);
+                               count_mp++;
+                               /* man_path_list is NULL terminated */
+                               man_path_list[count_mp] = NULL;
+                       }
+                       if (strcmp("MANSECT", token[0]) == 0) {
+                               free(sec_list);
+                               sec_list = xstrdup(token[1]);
                        }
-                       free(line);
                }
-               fclose(cf);
+               config_close(parser);
        }
 
 // TODO: my man3/getpwuid.3.gz contains just one line: