[apparmor] [PATCH 3/9] Update the flex scanner to use a stack for its start conditions
John Johansen
john.johansen at canonical.com
Wed Dec 28 03:01:46 UTC 2011
This is the first step in reducing the number of shared rules between the
different start conditions.
Signed-off-by: John Johansen <john.johansen at canonical.com>
---
parser/parser_lex.l | 53 ++++++++++++++++++++++++++-------------------------
1 files changed, 27 insertions(+), 26 deletions(-)
diff --git a/parser/parser_lex.l b/parser/parser_lex.l
index 83800f4..2c503b0 100644
--- a/parser/parser_lex.l
+++ b/parser/parser_lex.l
@@ -23,6 +23,7 @@
/* eliminates need to link with libfl */
%option noyywrap
%option nounput
+%option stack
%{
#include <stdio.h>
@@ -221,7 +222,7 @@ LT_EQUAL <=
filename[strlen(filename) - 1] = '\0';
include_filename(filename + 1, 1);
free(filename);
- BEGIN(INITIAL);
+ yy_pop_state();
}
\"([^\" \t\n]+)\" { /* "filename" */
@@ -229,12 +230,12 @@ LT_EQUAL <=
filename[strlen(filename) - 1] = '\0';
include_filename(filename + 1, 0);
free(filename);
- BEGIN(INITIAL);
+ yy_pop_state();
}
[^\<\>\"{WS}]+ { /* filename */
include_filename(yytext, 0);
- BEGIN(INITIAL);
+ yy_pop_state();
}
}
@@ -257,7 +258,7 @@ LT_EQUAL <=
DUMP_PREPROCESS;
yylval.id = processunquoted(yytext, yyleng);
PDEBUG("Found sub name: \"%s\"\n", yylval.id);
- BEGIN(INITIAL);
+ yy_pop_state();
return TOK_ID;
}
{QUOTED_ID} {
@@ -271,7 +272,7 @@ LT_EQUAL <=
DUMP_PREPROCESS;
yylval.id = processquoted(yytext, yyleng);
PDEBUG("Found sub name: \"%s\"\n", yylval.id);
- BEGIN(INITIAL);
+ yy_pop_state();
return TOK_ID;
}
@@ -294,7 +295,7 @@ LT_EQUAL <=
DUMP_PREPROCESS;
yylval.id = processunquoted(yytext, yyleng);
PDEBUG("Found sub name: \"%s\"\n", yylval.id);
- BEGIN(INITIAL);
+ yy_pop_state();
return TOK_ID;
}
{QUOTED_ID} {
@@ -308,7 +309,7 @@ LT_EQUAL <=
DUMP_PREPROCESS;
yylval.id = processquoted(yytext, yyleng);
PDEBUG("Found sub name: \"%s\"\n", yylval.id);
- BEGIN(INITIAL);
+ yy_pop_state();
return TOK_ID;
}
@@ -329,7 +330,7 @@ LT_EQUAL <=
{FLAGCLOSE_PAREN} {
DUMP_PREPROCESS;
PDEBUG("Flag )\n");
- BEGIN(INITIAL);
+ yy_pop_state();
return TOK_FLAG_CLOSEPAREN;
}
@@ -388,7 +389,7 @@ LT_EQUAL <=
\r?\n {
DUMP_PREPROCESS;
current_lineno++;
- BEGIN(INITIAL);
+ yy_pop_state();
}
[^\n] {
DUMP_PREPROCESS;
@@ -407,7 +408,7 @@ LT_EQUAL <=
}
{END_OF_RULE} {
DUMP_PREPROCESS;
- BEGIN(INITIAL);
+ yy_pop_state();
return TOK_END_OF_RULE;
}
[^\n] {
@@ -441,7 +442,7 @@ LT_EQUAL <=
DUMP_PREPROCESS;
yylval.id = processunquoted(yytext, yyleng);
PDEBUG("Found change profile name: \"%s\"\n", yylval.id);
- BEGIN(INITIAL);
+ yy_pop_state();
return TOK_ID;
}
{QUOTED_ID} {
@@ -455,7 +456,7 @@ LT_EQUAL <=
DUMP_PREPROCESS;
yylval.id = processquoted(yytext, yyleng);
PDEBUG("Found change profile quoted name: \"%s\"\n", yylval.id);
- BEGIN(INITIAL);
+ yy_pop_state();
return TOK_ID;
}
@@ -489,26 +490,26 @@ LT_EQUAL <=
{END_OF_RULE} {
DUMP_PREPROCESS;
- BEGIN(INITIAL);
+ yy_pop_state();
return TOK_END_OF_RULE;
}
\\\n {
DUMP_PREPROCESS;
current_lineno++;
- BEGIN(INITIAL);
+ yy_pop_state();
}
\r?\n {
DUMP_PREPROCESS;
current_lineno++;
- BEGIN(INITIAL);
+ yy_pop_state();
}
}
#include/.*\r?\n { /* include */
PDEBUG("Matched #include\n");
- BEGIN(INCLUDE);
+ yy_push_state(INCLUDE);
}
#.*\r?\n { /* normal comment */
@@ -522,7 +523,7 @@ LT_EQUAL <=
{SEPARATOR} {
DUMP_PREPROCESS;
PDEBUG("Matched a separator\n");
- BEGIN(SUB_NAME);
+ yy_push_state(SUB_NAME);
return TOK_SEP;
}
{ARROW} {
@@ -533,13 +534,13 @@ LT_EQUAL <=
{EQUALS} {
DUMP_PREPROCESS;
PDEBUG("Matched equals for assignment\n");
- BEGIN(ASSIGN_MODE);
+ yy_push_state(ASSIGN_MODE);
return TOK_EQUALS;
}
{ADD_ASSIGN} {
DUMP_PREPROCESS;
PDEBUG("Matched additive value assignment\n");
- BEGIN(ASSIGN_MODE);
+ yy_push_state(ASSIGN_MODE);
return TOK_ADD_ASSIGN;
}
{SET_VARIABLE} {
@@ -590,7 +591,7 @@ LT_EQUAL <=
{HAT} {
DUMP_PREPROCESS;
- BEGIN(SUB_NAME2);
+ yy_push_state(SUB_NAME2);
return TOK_HAT;
}
@@ -603,7 +604,7 @@ LT_EQUAL <=
{FLAGOPEN_PAREN} {
DUMP_PREPROCESS;
PDEBUG("FLag (\n");
- BEGIN(FLAGS_MODE);
+ yy_push_state(FLAGS_MODE);
return TOK_FLAG_OPENPAREN;
}
@@ -620,19 +621,19 @@ LT_EQUAL <=
return TOK_ID;
break;
case TOK_PROFILE:
- BEGIN(SUB_NAME2);
+ yy_push_state(SUB_NAME2);
break;
case TOK_FLAGS:
- BEGIN(FLAGS_MODE);
+ yy_push_state(FLAGS_MODE);
break;
case TOK_RLIMIT:
- BEGIN(RLIMIT_MODE);
+ yy_push_state(RLIMIT_MODE);
break;
case TOK_NETWORK:
- BEGIN(NETWORK_MODE);
+ yy_push_state(NETWORK_MODE);
break;
case TOK_CHANGE_PROFILE:
- BEGIN(CHANGE_PROFILE_MODE);
+ yy_push_state(CHANGE_PROFILE_MODE);
break;
default: /* nothing */
break;
--
1.7.7.3
More information about the AppArmor
mailing list