mdev: do not treat non-leading '#' chars as start of comment. Closes 4676
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 10 Jan 2012 23:37:17 +0000 (00:37 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 10 Jan 2012 23:37:17 +0000 (00:37 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
include/libbb.h
libbb/parse_config.c
util-linux/mdev.c

index 0c266dc53795114f06805a743638095b4e2f2ffe..4975b97fe5ee9960e3e60d3b235e1ad094e5c45a 100644 (file)
@@ -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;
index cf5ba4deb1473dff837b06d843f5c7a1292deecb..1590d9a4c0b346663b346432a67d21e90b685886 100644 (file)
@@ -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) {
index c6be1b872772a6ca34ac93add75ca10a9646c0cd..e5f0c2deb47e81ac8e2d0e3ea7ed79a5a99a24a7 100644 (file)
@@ -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] */