[apparmor] [PATCH 04/13] Instead of using a special flags= token and keyword use TOK_CONDID

John Johansen john.johansen at canonical.com
Tue Feb 14 17:32:26 UTC 2012


Signed-off-by: John Johansen <john.johansen at canonical.com>
---
 parser/parser_lex.l  |   31 +++++++++++++------------------
 parser/parser_yacc.y |    8 +++++++-
 2 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/parser/parser_lex.l b/parser/parser_lex.l
index bfcbd57..8f549c8 100644
--- a/parser/parser_lex.l
+++ b/parser/parser_lex.l
@@ -192,7 +192,6 @@ QUOTED_ID	\"{ALLOWED_QUOTED_ID}*\"
 
 IP		{NUMBER}\.{NUMBER}\.{NUMBER}\.{NUMBER}
 
-FLAGS          flags{WS}*=?{WS}*
 HAT		hat{WS}*
 PROFILE		profile{WS}*
 KEYWORD         [[:alpha:]_]+
@@ -254,6 +253,19 @@ LT_EQUAL	<=
 	if ( !YY_CURRENT_BUFFER ) yyterminate();
 }
 
+{VARIABLE_NAME}/{WS}*={WS}*	{
+				/* we match to the = in the lexer so that
+				 * can switch scanner state.  By the time
+				 * the parser see the = it may be to late
+				 * as bison may have requested the next
+				 * token from the scanner
+				 */
+				PDEBUG("conditional %s=\n", yytext);
+				yylval.id = processid(yytext, yyleng);
+				yy_push_state(EXTCOND_MODE);
+				return TOK_CONDID;
+			}
+
 <SUB_NAME>{
 	({IDS}|{QUOTED_ID})	{
 			  /* Ugh, this is a gross hack. I used to use
@@ -535,11 +547,6 @@ LT_EQUAL	<=
 			return TOK_MODE;
 			}
 
-{FLAGS}			{
-			DUMP_PREPROCESS;
-			return TOK_FLAGS;
-			}
-
 {HAT}			{
 			DUMP_PREPROCESS;
 			yy_push_state(SUB_NAME);
@@ -565,18 +572,6 @@ LT_EQUAL	<=
 			return TOK_OPENPAREN;
 			}
 
-{VARIABLE_NAME}/{WS}*={WS}*	{
-				/* we match to the = in the lexer so that
-				 * can switch scanner state.  By the time
-				 * the parser see the = it may be to late
-				 * as bison may have requested the next
-				 * token from the scanner
-				 */
-				yylval.id = processid(yytext, yyleng);
-				yy_push_state(EXTCOND_MODE);
-				return TOK_CONDID;
-			}
-
 {VARIABLE_NAME}		{
 			DUMP_PREPROCESS;
 			int token = get_keyword_token(yytext);
diff --git a/parser/parser_yacc.y b/parser/parser_yacc.y
index 516cf57..af56a20 100644
--- a/parser/parser_yacc.y
+++ b/parser/parser_yacc.y
@@ -162,6 +162,7 @@ void add_local_entry(struct codomain *cod);
 }
 
 %type <id> 	TOK_ID
+%type <id>	TOK_CONDID
 %type <mode> 	TOK_MODE
 %type <fmode>   file_mode
 %type <cod>	profile_base
@@ -398,7 +399,12 @@ flags:	{ /* nothing */
 	};
 
 opt_flags: { /* nothing */ $$ = 0; }
-	| TOK_FLAGS { $$ = 1; }
+	| TOK_CONDID TOK_EQUALS
+	{
+		if (strcmp($1, "flags") != 0)
+			yyerror("expected flags= got %s=", $1);
+		$$ = 1;
+	}
 
 flags:	opt_flags TOK_OPENPAREN flagvals TOK_CLOSEPAREN
 	{
-- 
1.7.9




More information about the AppArmor mailing list