mdev: do not treat non-leading '#' chars as start of comment. Closes 4676
No binary (build failed)
—
(log yok)
| @@ -1195,13 +1195,14 @@ enum { | |
| PARSE_MIN_DIE = 0x00100000, // die if < min tokens found | |
| // keep a copy of current line | |
| PARSE_KEEP_COPY = 0x00200000 * ENABLE_FEATURE_CROND_D, | |
| - | // PARSE_ESCAPE = 0x00400000, // process escape sequences in tokens |
| + | PARSE_EOL_COMMENTS = 0x00400000, // comments are recognized even if they aren't the first char |
| // NORMAL is: | |
| // * remove leading and trailing delimiters and collapse | |
| // multiple delimiters into one | |
| // * warn and continue if less than mintokens delimiters found | |
| // * grab everything into last token | |
| - | PARSE_NORMAL = PARSE_COLLAPSE | PARSE_TRIM | PARSE_GREEDY, |
| + | // * comments are recognized even if they aren't the first char |
| + | PARSE_NORMAL = PARSE_COLLAPSE | PARSE_TRIM | PARSE_GREEDY | PARSE_EOL_COMMENTS, |
| }; | |
| typedef struct parser_t { | |
| FILE *fp; | |
| @@ -204,7 +204,7 @@ int FAST_FUNC config_read(parser_t *parser, char **tokens, unsigned flags, const | |
| line += strcspn(line, delims[0] ? delims : delims + 1); | |
| } else { | |
| /* Combining, find comment char if any */ | |
| - | line = strchrnul(line, delims[0]); |
| + | line = strchrnul(line, PARSE_EOL_COMMENTS ? delims[0] : '\0'); |
| /* Trim any extra delimiters from the end */ | |
| if (flags & PARSE_TRIM) { | |
| @@ -206,7 +206,8 @@ static void parse_next_rule(void) | |
| char *tokens[4]; | |
| char *val; | |
| - | if (!config_read(G.parser, tokens, 4, 3, "# \t", PARSE_NORMAL)) |
| + | /* No PARSE_EOL_COMMENTS, because command may contain '#' chars */ |
| + | if (!config_read(G.parser, tokens, 4, 3, "# \t", PARSE_NORMAL & ~PARSE_EOL_COMMENTS)) |
| break; | |
| /* Fields: [-]regex uid:gid mode [alias] [cmd] */ | |