1*2d543d20SAndroid Build Coastguard Worker /* 2*2d543d20SAndroid Build Coastguard Worker * Copyright 2011 Tresys Technology, LLC. All rights reserved. 3*2d543d20SAndroid Build Coastguard Worker * 4*2d543d20SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 5*2d543d20SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions are met: 6*2d543d20SAndroid Build Coastguard Worker * 7*2d543d20SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright notice, 8*2d543d20SAndroid Build Coastguard Worker * this list of conditions and the following disclaimer. 9*2d543d20SAndroid Build Coastguard Worker * 10*2d543d20SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright notice, 11*2d543d20SAndroid Build Coastguard Worker * this list of conditions and the following disclaimer in the documentation 12*2d543d20SAndroid Build Coastguard Worker * and/or other materials provided with the distribution. 13*2d543d20SAndroid Build Coastguard Worker * 14*2d543d20SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY TRESYS TECHNOLOGY, LLC ``AS IS'' AND ANY EXPRESS 15*2d543d20SAndroid Build Coastguard Worker * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 16*2d543d20SAndroid Build Coastguard Worker * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 17*2d543d20SAndroid Build Coastguard Worker * EVENT SHALL TRESYS TECHNOLOGY, LLC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 18*2d543d20SAndroid Build Coastguard Worker * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 19*2d543d20SAndroid Build Coastguard Worker * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20*2d543d20SAndroid Build Coastguard Worker * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 21*2d543d20SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 22*2d543d20SAndroid Build Coastguard Worker * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 23*2d543d20SAndroid Build Coastguard Worker * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24*2d543d20SAndroid Build Coastguard Worker * 25*2d543d20SAndroid Build Coastguard Worker * The views and conclusions contained in the software and documentation are those 26*2d543d20SAndroid Build Coastguard Worker * of the authors and should not be interpreted as representing official policies, 27*2d543d20SAndroid Build Coastguard Worker * either expressed or implied, of Tresys Technology, LLC. 28*2d543d20SAndroid Build Coastguard Worker */ 29*2d543d20SAndroid Build Coastguard Worker 30*2d543d20SAndroid Build Coastguard Worker %{ 31*2d543d20SAndroid Build Coastguard Worker #include <stdint.h> 32*2d543d20SAndroid Build Coastguard Worker #include <sepol/errcodes.h> 33*2d543d20SAndroid Build Coastguard Worker #include "cil_internal.h" 34*2d543d20SAndroid Build Coastguard Worker #include "cil_lexer.h" 35*2d543d20SAndroid Build Coastguard Worker #include "cil_log.h" 36*2d543d20SAndroid Build Coastguard Worker #include "cil_mem.h" 37*2d543d20SAndroid Build Coastguard Worker char *value = NULL; 38*2d543d20SAndroid Build Coastguard Worker int line = 1; 39*2d543d20SAndroid Build Coastguard Worker %} 40*2d543d20SAndroid Build Coastguard Worker 41*2d543d20SAndroid Build Coastguard Worker %option nounput 42*2d543d20SAndroid Build Coastguard Worker %option noinput 43*2d543d20SAndroid Build Coastguard Worker %option noyywrap 44*2d543d20SAndroid Build Coastguard Worker %option prefix="cil_yy" 45*2d543d20SAndroid Build Coastguard Worker 46*2d543d20SAndroid Build Coastguard Worker digit [0-9] 47*2d543d20SAndroid Build Coastguard Worker alpha [a-zA-Z] 48*2d543d20SAndroid Build Coastguard Worker spec_char [\[\]\.\@\=\/\*\-\_\$\%\+\-\!\|\&\^\:\~\`\#\{\}\'\<\>\?\,] 49*2d543d20SAndroid Build Coastguard Worker symbol ({digit}|{alpha}|{spec_char})+ 50*2d543d20SAndroid Build Coastguard Worker white [ \t] 51*2d543d20SAndroid Build Coastguard Worker newline [\n\r] 52*2d543d20SAndroid Build Coastguard Worker qstring \"[^"\n\0]*\" 53*2d543d20SAndroid Build Coastguard Worker hll_lm ^;;\* 54*2d543d20SAndroid Build Coastguard Worker comment ; 55*2d543d20SAndroid Build Coastguard Worker 56*2d543d20SAndroid Build Coastguard Worker %% 57*2d543d20SAndroid Build Coastguard Worker {newline} line++; return NEWLINE; 58*2d543d20SAndroid Build Coastguard Worker {hll_lm} value=yytext; return HLL_LINEMARK; 59*2d543d20SAndroid Build Coastguard Worker {comment} value=yytext; return COMMENT; 60*2d543d20SAndroid Build Coastguard Worker "(" value=yytext; return OPAREN; 61*2d543d20SAndroid Build Coastguard Worker ")" value=yytext; return CPAREN; 62*2d543d20SAndroid Build Coastguard Worker {symbol} value=yytext; return SYMBOL; 63*2d543d20SAndroid Build Coastguard Worker {white} ; 64*2d543d20SAndroid Build Coastguard Worker {qstring} value=yytext; return QSTRING; 65*2d543d20SAndroid Build Coastguard Worker <<EOF>> return END_OF_FILE; 66*2d543d20SAndroid Build Coastguard Worker . value=yytext; return UNKNOWN; 67*2d543d20SAndroid Build Coastguard Worker %% 68*2d543d20SAndroid Build Coastguard Worker 69*2d543d20SAndroid Build Coastguard Worker int cil_lexer_setup(char *buffer, uint32_t size) 70*2d543d20SAndroid Build Coastguard Worker { 71*2d543d20SAndroid Build Coastguard Worker size = (yy_size_t)size; 72*2d543d20SAndroid Build Coastguard Worker if (yy_scan_buffer(buffer, size) == NULL) { 73*2d543d20SAndroid Build Coastguard Worker cil_log(CIL_INFO, "Lexer failed to setup buffer\n"); 74*2d543d20SAndroid Build Coastguard Worker return SEPOL_ERR; 75*2d543d20SAndroid Build Coastguard Worker } 76*2d543d20SAndroid Build Coastguard Worker 77*2d543d20SAndroid Build Coastguard Worker line = 1; 78*2d543d20SAndroid Build Coastguard Worker 79*2d543d20SAndroid Build Coastguard Worker return SEPOL_OK; 80*2d543d20SAndroid Build Coastguard Worker } 81*2d543d20SAndroid Build Coastguard Worker 82*2d543d20SAndroid Build Coastguard Worker void cil_lexer_destroy(void) 83*2d543d20SAndroid Build Coastguard Worker { 84*2d543d20SAndroid Build Coastguard Worker yylex_destroy(); 85*2d543d20SAndroid Build Coastguard Worker } 86*2d543d20SAndroid Build Coastguard Worker 87*2d543d20SAndroid Build Coastguard Worker int cil_lexer_next(struct token *tok) 88*2d543d20SAndroid Build Coastguard Worker { 89*2d543d20SAndroid Build Coastguard Worker tok->type = yylex(); 90*2d543d20SAndroid Build Coastguard Worker tok->value = value; 91*2d543d20SAndroid Build Coastguard Worker tok->line = line; 92*2d543d20SAndroid Build Coastguard Worker 93*2d543d20SAndroid Build Coastguard Worker return SEPOL_OK; 94*2d543d20SAndroid Build Coastguard Worker } 95