]> git.cameronkatri.com Git - mandoc.git/blobdiff - manpath.c
cope with -Wmissing-prototypes
[mandoc.git] / manpath.c
index 9446ea6971a42cc81e477b6161e107ae02215848..83c329ec9bbb6b2b2473f4046fcc6d8a08c08422 100644 (file)
--- a/manpath.c
+++ b/manpath.c
@@ -1,4 +1,4 @@
-/*     $Id: manpath.c,v 1.25 2015/05/07 12:08:13 schwarze Exp $        */
+/*     $Id: manpath.c,v 1.30 2016/05/28 13:44:13 schwarze Exp $        */
 /*
  * Copyright (c) 2011, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -21,6 +21,9 @@
 #include <sys/stat.h>
 
 #include <ctype.h>
+#if HAVE_ERR
+#include <err.h>
+#endif
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -29,7 +32,9 @@
 #include "mandoc_aux.h"
 #include "manconf.h"
 
+#if !HAVE_MANPATH
 static void     manconf_file(struct manconf *, const char *);
+#endif
 static void     manpath_add(struct manpaths *, const char *, int);
 static void     manpath_parseline(struct manpaths *, char *, int);
 
@@ -163,10 +168,8 @@ manpath_add(struct manpaths *dirs, const char *dir, int complain)
        size_t           i;
 
        if (NULL == (cp = realpath(dir, buf))) {
-               if (complain) {
-                       fputs("manpath: ", stderr);
-                       perror(dir);
-               }
+               if (complain)
+                       warn("manpath: %s", dir);
                return;
        }
 
@@ -175,10 +178,8 @@ manpath_add(struct manpaths *dirs, const char *dir, int complain)
                        return;
 
        if (stat(cp, &sb) == -1) {
-               if (complain) {
-                       fputs("manpath: ", stderr);
-                       perror(dir);
-               }
+               if (complain)
+                       warn("manpath: %s", dir);
                return;
        }
 
@@ -203,6 +204,7 @@ manconf_free(struct manconf *conf)
        free(conf->output.style);
 }
 
+#if !HAVE_MANPATH
 static void
 manconf_file(struct manconf *conf, const char *file)
 {
@@ -210,28 +212,32 @@ manconf_file(struct manconf *conf, const char *file)
        char manpath_default[] = MANPATH_DEFAULT;
 
        FILE            *stream;
-       char            *cp, *ep;
-       size_t           len, tok;
+       char            *line, *cp, *ep;
+       size_t           linesz, tok, toklen;
+       ssize_t          linelen;
 
        if ((stream = fopen(file, "r")) == NULL)
                goto out;
 
-       while ((cp = fgetln(stream, &len)) != NULL) {
-               ep = cp + len;
-               if (ep[-1] != '\n')
-                       break;
-               *--ep = '\0';
+       line = NULL;
+       linesz = 0;
+
+       while ((linelen = getline(&line, &linesz, stream)) != -1) {
+               cp = line;
+               ep = cp + linelen - 1;
+               while (ep > cp && isspace((unsigned char)*ep))
+                       *ep-- = '\0';
                while (isspace((unsigned char)*cp))
                        cp++;
-               if (*cp == '#')
+               if (cp == ep || *cp == '#')
                        continue;
 
                for (tok = 0; tok < sizeof(toks)/sizeof(toks[0]); tok++) {
-                       len = strlen(toks[tok]);
-                       if (cp + len < ep &&
-                           isspace((unsigned char)cp[len]) &&
-                           !strncmp(cp, toks[tok], len)) {
-                               cp += len;
+                       toklen = strlen(toks[tok]);
+                       if (cp + toklen < ep &&
+                           isspace((unsigned char)cp[toklen]) &&
+                           strncmp(cp, toks[tok], toklen) == 0) {
+                               cp += toklen;
                                while (isspace((unsigned char)*cp))
                                        cp++;
                                break;
@@ -257,12 +263,14 @@ manconf_file(struct manconf *conf, const char *file)
                        break;
                }
        }
+       free(line);
        fclose(stream);
 
 out:
        if (*manpath_default != '\0')
                manpath_parseline(&conf->manpath, manpath_default, 0);
 }
+#endif
 
 void
 manconf_output(struct manoutput *conf, const char *cp)