X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=support%2Fnfs%2Fconffile.c;h=b277c2a9813b6cc42a8ae9e346675d958c108ef5;hp=97dc88a06df6762547336959238882ae2f809bc2;hb=9bb85c5e8d2285f82367c75df5530a71a9a5a5f2;hpb=9350a97a266ada8d8b3282cf4248e3b9ffdc0058 diff --git a/support/nfs/conffile.c b/support/nfs/conffile.c index 97dc88a..b277c2a 100644 --- a/support/nfs/conffile.c +++ b/support/nfs/conffile.c @@ -119,18 +119,6 @@ conf_hash(char *s) return hash; } -/* - * Convert letter from upper case to lower case - */ -static inline void upper2lower(char *str) -{ - char *ptr = str; - - while (*ptr) - *ptr++ = tolower(*ptr); -} - - /* * Insert a tag-value combination from LINE (the equal sign is at POS) */ @@ -231,9 +219,6 @@ conf_parse_line(int trans, char *line, size_t sz) /* Lines starting with '#' or ';' are comments. */ ln++; - if (*line == '#' || *line == ';') - return; - /* Ignore blank lines */ if (*line == '\0') return; @@ -242,6 +227,9 @@ conf_parse_line(int trans, char *line, size_t sz) while (isblank(*line)) line++; + if (*line == '#' || *line == ';') + return; + /* '[section]' parsing... */ if (*line == '[') { line++; @@ -256,7 +244,7 @@ conf_parse_line(int trans, char *line, size_t sz) if (section) free(section); if (i == sz) { - xlog_warn("conf_parse_line: %d:" + xlog_warn("config file error: line %d: " "non-matched ']', ignoring until next section", ln); section = 0; return; @@ -286,7 +274,7 @@ conf_parse_line(int trans, char *line, size_t sz) while (*ptr && *ptr != '"') ptr++; if (*ptr == '\0') { - xlog_warn("conf_parse_line: line %d:" + xlog_warn("config file error: line %d: " "non-matched '\"', ignoring until next section", ln); } else { *ptr = '\0'; @@ -302,15 +290,29 @@ conf_parse_line(int trans, char *line, size_t sz) if (line[i] == '=') { /* If no section, we are ignoring the lines. */ if (!section) { - xlog_warn("conf_parse_line: %d: ignoring line due to no section", - ln); + xlog_warn("config file error: line %d: " + "ignoring line due to no section", ln); return; } line[strcspn (line, " \t=")] = '\0'; val = line + i + 1 + strspn (line + i + 1, " \t"); + + /* Skip trailing comments, if any */ + for (j = 0; j < sz - (val - line); j++) { + if (val[j] == '#' || val[j] == ';') { + val[j] = '\0'; + break; + } + } + /* Skip trailing whitespace, if any */ - for (j = sz - (val - line) - 1; j > 0 && isspace(val[j]); j--) - val[j] = '\0'; + 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; @@ -319,7 +321,7 @@ conf_parse_line(int trans, char *line, size_t sz) /* Other non-empty lines are weird. */ i = strspn(line, " \t"); if (line[i]) - xlog_warn("conf_parse_line: %d: syntax error", ln); + xlog_warn("config file error: line %d:", ln); return; }