]> git.decadent.org.uk Git - nfs-utils.git/commitdiff
nfsmount: Fixed parsing error in the nfsmount.conf code.
authorSteve Dickson <steved@redhat.com>
Tue, 6 Mar 2012 16:03:38 +0000 (11:03 -0500)
committerSteve Dickson <steved@redhat.com>
Tue, 6 Mar 2012 16:04:43 +0000 (11:04 -0500)
When the options where prefixed with spaces (instead of tabs)
the second option in the list was missed to so a miscalculation
the the nfsmount.conf parsing code.

Signed-off-by: Steve Dickson <steved@redhat.com>
support/nfs/conffile.c

index 3990578084f9c6e36e4d0a9eadbb6da73cdde13c..2f1e235db0270d2abef51cda50367046f180d156 100644 (file)
@@ -211,7 +211,7 @@ static void
 conf_parse_line(int trans, char *line, size_t sz)
 {
        char *val, *ptr;
 conf_parse_line(int trans, char *line, size_t sz)
 {
        char *val, *ptr;
-       size_t i;
+       size_t i, valsize;
        size_t j;
        static char *section = 0;
        static char *arg = 0;
        size_t j;
        static char *section = 0;
        static char *arg = 0;
@@ -298,23 +298,16 @@ conf_parse_line(int trans, char *line, size_t sz)
                        }
                        line[strcspn (line, " \t=")] = '\0';
                        val = line + i + 1 + strspn (line + i + 1, " \t");
                        }
                        line[strcspn (line, " \t=")] = '\0';
                        val = line + i + 1 + strspn (line + i + 1, " \t");
+                       valsize = 0;
+                       while (val[valsize++]);
 
 
-                       /* Skip trailing comments, if any */
-                       for (j = 0; j < sz - (val - line); j++) {
-                               if (val[j] == '#' || val[j] == ';') {
+                       /* Skip trailing spaces and comments */
+                       for (j = 0; j < valsize; j++) {
+                               if (val[j] == '#' || val[j] == ';' || isspace(val[j])) {
                                        val[j] = '\0';
                                        break;
                                }
                        }
                                        val[j] = '\0';
                                        break;
                                }
                        }
-
-                       /* Skip trailing whitespace, if any */
-                       for (j--; j > 0; j--) {
-                               if (isspace(val[j]))
-                                       val[j] = '\0';
-                               else 
-                                       break;
-                       }
-
                        /* XXX Perhaps should we not ignore errors?  */
                        conf_set(trans, section, arg, line, val, 0, 0);
                        return;
                        /* XXX Perhaps should we not ignore errors?  */
                        conf_set(trans, section, arg, line, val, 0, 0);
                        return;