mdev: do not treat non-leading '#' chars as start of comment. Closes 4676
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		@@ -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] */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user