]> git.cameronkatri.com Git - mandoc.git/blobdiff - manpath.c
cope with -Wmissing-prototypes
[mandoc.git] / manpath.c
index baa0dc78f0ee52798e24f52f204c17af96bef852..83c329ec9bbb6b2b2473f4046fcc6d8a08c08422 100644 (file)
--- a/manpath.c
+++ b/manpath.c
@@ -1,4 +1,4 @@
-/*     $Id: manpath.c,v 1.28 2015/11/07 14:22:29 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>
@@ -212,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;
@@ -259,6 +263,7 @@ manconf_file(struct manconf *conf, const char *file)
                        break;
                }
        }
+       free(line);
        fclose(stream);
 
 out: