diff --git a/lib/scanner.c b/lib/scanner.c index dc07eb0..efb6730 100644 --- a/lib/scanner.c +++ b/lib/scanner.c @@ -9,7 +9,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 39 +#define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -159,7 +159,15 @@ typedef void* yyscan_t; /* Size of default input buffer. */ #ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else #define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. @@ -171,11 +179,6 @@ typedef void* yyscan_t; typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 @@ -194,13 +197,6 @@ typedef size_t yy_size_t; if ( yytext[yyl] == '\n' )\ --yylineno;\ }while(0) - #define YY_LINENO_REWIND_TO(dst) \ - do {\ - const char *p;\ - for ( p = yy_cp-1; p >= (dst); --p)\ - if ( *p == '\n' )\ - --yylineno;\ - }while(0) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ @@ -218,6 +214,11 @@ typedef size_t yy_size_t; #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state @@ -235,7 +236,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - yy_size_t yy_n_chars; + int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -314,7 +315,7 @@ static void libconfig_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yys YY_BUFFER_STATE libconfig_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); YY_BUFFER_STATE libconfig_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); -YY_BUFFER_STATE libconfig_yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner ); +YY_BUFFER_STATE libconfig_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); void *libconfig_yyalloc (yy_size_t ,yyscan_t yyscanner ); void *libconfig_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); @@ -344,7 +345,7 @@ void libconfig_yyfree (void * ,yyscan_t yyscanner ); #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) -#define libconfig_yywrap(yyscanner) 1 +#define libconfig_yywrap(n) 1 #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; @@ -368,8 +369,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 42 -#define YY_END_OF_BUFFER 43 +#define YY_NUM_RULES 47 +#define YY_END_OF_BUFFER 48 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -377,20 +378,21 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[103] = +static yyconst flex_int16_t yy_accept[117] = { 0, - 0, 0, 0, 0, 0, 0, 0, 0, 43, 41, - 22, 21, 21, 5, 41, 37, 38, 29, 41, 24, - 30, 41, 31, 31, 23, 39, 29, 29, 35, 36, - 25, 26, 22, 41, 3, 4, 3, 6, 15, 14, - 17, 20, 42, 22, 0, 40, 29, 30, 31, 30, - 0, 1, 0, 30, 0, 32, 0, 29, 29, 22, - 0, 0, 2, 6, 12, 0, 11, 10, 7, 8, - 9, 17, 19, 18, 0, 30, 30, 0, 0, 30, - 32, 33, 29, 29, 0, 0, 0, 30, 34, 29, - 27, 0, 13, 34, 28, 0, 0, 0, 0, 0, - - 16, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 48, 46, 27, 26, 26, 5, 46, 42, 43, 34, + 46, 29, 35, 46, 36, 36, 28, 44, 34, 34, + 40, 41, 30, 31, 27, 46, 3, 4, 3, 6, + 15, 14, 17, 20, 47, 22, 25, 47, 27, 0, + 45, 34, 35, 36, 35, 0, 1, 0, 35, 0, + 37, 0, 34, 34, 27, 0, 0, 2, 6, 12, + 0, 11, 10, 7, 8, 9, 17, 19, 18, 22, + 24, 23, 0, 35, 35, 0, 0, 35, 37, 38, + 34, 34, 0, 0, 0, 35, 39, 34, 32, 0, + + 13, 39, 33, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 21, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -434,110 +436,116 @@ static yyconst flex_int32_t yy_meta[49] = 3, 3, 3, 3, 3, 3, 1, 1 } ; -static yyconst flex_int16_t yy_base[113] = +static yyconst flex_int16_t yy_base[129] = { 0, - 0, 47, 47, 48, 46, 47, 48, 49, 203, 204, - 200, 204, 204, 204, 198, 204, 204, 0, 45, 204, - 47, 50, 60, 74, 204, 204, 178, 28, 204, 204, - 204, 204, 64, 158, 204, 204, 183, 0, 204, 63, - 0, 204, 83, 195, 193, 204, 0, 88, 102, 98, - 62, 204, 190, 104, 119, 162, 0, 67, 65, 121, - 127, 124, 204, 0, 204, 0, 204, 204, 204, 204, - 204, 0, 204, 204, 108, 117, 122, 134, 132, 136, - 204, 139, 136, 116, 126, 0, 140, 142, 135, 130, - 0, 102, 204, 204, 0, 85, 72, 63, 98, 158, - - 204, 204, 169, 173, 177, 181, 183, 187, 191, 89, - 66, 63 + 0, 47, 47, 48, 46, 47, 48, 49, 50, 53, + 223, 224, 220, 224, 224, 224, 218, 224, 224, 0, + 46, 224, 49, 54, 62, 76, 224, 224, 198, 33, + 224, 224, 224, 224, 70, 178, 224, 224, 203, 0, + 224, 64, 0, 224, 61, 0, 224, 65, 215, 213, + 224, 0, 89, 100, 94, 109, 224, 212, 113, 125, + 187, 0, 70, 88, 100, 172, 169, 224, 0, 224, + 0, 224, 224, 224, 224, 224, 0, 224, 224, 0, + 224, 224, 58, 115, 127, 137, 129, 139, 224, 184, + 181, 123, 172, 0, 141, 143, 181, 125, 0, 165, + + 224, 224, 0, 160, 167, 165, 133, 159, 163, 224, + 156, 149, 166, 161, 224, 224, 169, 173, 177, 181, + 185, 187, 191, 195, 199, 136, 119, 81 } ; -static yyconst flex_int16_t yy_def[113] = +static yyconst flex_int16_t yy_def[129] = { 0, - 102, 1, 103, 103, 104, 104, 105, 105, 102, 102, - 102, 102, 102, 102, 106, 102, 102, 107, 102, 102, - 102, 102, 102, 102, 102, 102, 107, 107, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 108, 102, 102, - 109, 102, 102, 102, 106, 102, 107, 102, 102, 102, - 102, 102, 106, 102, 102, 102, 110, 107, 107, 102, - 102, 102, 102, 108, 102, 111, 102, 102, 102, 102, - 102, 109, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 110, 107, 107, 102, 112, 102, 102, 102, 107, - 107, 102, 102, 102, 107, 102, 102, 102, 102, 102, - - 102, 0, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102 + 116, 1, 117, 117, 118, 118, 119, 119, 120, 120, + 116, 116, 116, 116, 116, 116, 121, 116, 116, 122, + 116, 116, 116, 116, 116, 116, 116, 116, 122, 122, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 123, + 116, 116, 124, 116, 116, 125, 116, 116, 116, 121, + 116, 122, 116, 116, 116, 116, 116, 121, 116, 116, + 116, 126, 122, 122, 116, 116, 116, 116, 123, 116, + 127, 116, 116, 116, 116, 116, 124, 116, 116, 125, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 126, + 122, 122, 116, 128, 116, 116, 116, 122, 122, 116, + + 116, 116, 122, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 0, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116 } ; -static yyconst flex_int16_t yy_nxt[253] = +static yyconst flex_int16_t yy_nxt[273] = { 0, - 10, 11, 12, 13, 13, 14, 15, 16, 17, 18, - 19, 20, 19, 21, 22, 23, 24, 25, 26, 25, - 10, 18, 18, 18, 27, 18, 18, 18, 18, 28, - 18, 18, 29, 10, 30, 10, 18, 18, 18, 27, - 18, 18, 18, 18, 28, 18, 31, 32, 33, 36, - 36, 39, 39, 42, 42, 59, 37, 37, 48, 52, - 49, 49, 50, 50, 53, 60, 93, 34, 65, 86, - 51, 59, 75, 54, 75, 49, 49, 76, 76, 40, - 40, 43, 43, 55, 61, 51, 56, 54, 73, 49, - 49, 57, 82, 83, 66, 84, 67, 55, 55, 100, - - 56, 99, 68, 50, 50, 69, 70, 71, 83, 98, - 84, 51, 55, 50, 50, 54, 74, 49, 49, 77, - 77, 51, 60, 76, 76, 55, 51, 78, 56, 79, - 97, 79, 76, 76, 80, 80, 51, 77, 77, 91, - 55, 61, 78, 96, 87, 78, 87, 80, 80, 88, - 88, 80, 80, 95, 91, 88, 88, 88, 88, 100, - 78, 94, 92, 101, 90, 89, 85, 62, 95, 35, - 35, 35, 35, 38, 38, 38, 38, 41, 41, 41, - 41, 45, 45, 45, 45, 47, 47, 64, 81, 64, - 64, 72, 46, 72, 72, 46, 44, 63, 62, 58, - - 46, 44, 102, 9, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102 + 12, 13, 14, 15, 15, 16, 17, 18, 19, 20, + 21, 22, 21, 23, 24, 25, 26, 27, 28, 27, + 12, 20, 20, 20, 29, 20, 20, 20, 20, 30, + 20, 20, 31, 12, 32, 12, 20, 20, 20, 29, + 20, 20, 20, 20, 30, 20, 33, 34, 35, 38, + 38, 41, 41, 44, 44, 47, 39, 39, 47, 53, + 64, 54, 54, 57, 55, 55, 78, 36, 58, 70, + 81, 65, 56, 84, 84, 59, 64, 54, 54, 42, + 42, 45, 45, 48, 101, 60, 48, 56, 61, 59, + 66, 54, 54, 62, 79, 71, 91, 72, 82, 60, + + 60, 65, 61, 73, 55, 55, 74, 75, 76, 55, + 55, 91, 56, 59, 60, 54, 54, 56, 92, 83, + 66, 83, 94, 60, 84, 84, 61, 56, 85, 85, + 84, 84, 56, 92, 108, 87, 86, 87, 60, 90, + 88, 88, 85, 85, 88, 88, 99, 95, 103, 95, + 86, 86, 96, 96, 88, 88, 96, 96, 96, 96, + 108, 99, 114, 103, 110, 86, 115, 114, 109, 37, + 37, 37, 37, 40, 40, 40, 40, 43, 43, 43, + 43, 46, 46, 46, 46, 50, 50, 50, 50, 52, + 52, 69, 113, 69, 69, 77, 112, 77, 77, 80, + + 111, 80, 80, 107, 106, 105, 104, 102, 100, 98, + 97, 93, 67, 89, 51, 51, 49, 68, 67, 63, + 51, 49, 116, 11, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116 } ; -static yyconst flex_int16_t yy_chk[253] = +static yyconst flex_int16_t yy_chk[273] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 4, 5, 6, 7, 8, 28, 3, 4, 19, 22, - 19, 19, 21, 21, 22, 33, 112, 2, 40, 111, - 21, 28, 51, 23, 51, 23, 23, 51, 51, 5, - 6, 7, 8, 23, 33, 21, 23, 24, 43, 24, - 24, 23, 110, 58, 40, 59, 40, 24, 23, 99, - - 24, 98, 40, 48, 48, 40, 40, 40, 58, 97, - 59, 48, 24, 50, 50, 49, 43, 49, 49, 54, - 54, 50, 60, 75, 75, 49, 48, 54, 49, 55, - 96, 55, 76, 76, 55, 55, 50, 77, 77, 84, - 49, 60, 54, 92, 78, 77, 78, 79, 79, 78, - 78, 80, 80, 90, 84, 87, 87, 88, 88, 100, - 77, 89, 85, 100, 83, 82, 62, 61, 90, 103, - 103, 103, 103, 104, 104, 104, 104, 105, 105, 105, - 105, 106, 106, 106, 106, 107, 107, 108, 56, 108, - 108, 109, 53, 109, 109, 45, 44, 37, 34, 27, - - 15, 11, 9, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102 + 4, 5, 6, 7, 8, 9, 3, 4, 10, 21, + 30, 21, 21, 24, 23, 23, 45, 2, 24, 42, + 48, 35, 23, 83, 83, 25, 30, 25, 25, 5, + 6, 7, 8, 9, 128, 25, 10, 23, 25, 26, + 35, 26, 26, 25, 45, 42, 63, 42, 48, 26, + + 25, 65, 26, 42, 53, 53, 42, 42, 42, 55, + 55, 63, 53, 54, 26, 54, 54, 55, 64, 56, + 65, 56, 127, 54, 56, 56, 54, 53, 59, 59, + 84, 84, 55, 64, 107, 60, 59, 60, 54, 126, + 60, 60, 85, 85, 87, 87, 92, 86, 98, 86, + 85, 59, 86, 86, 88, 88, 95, 95, 96, 96, + 108, 92, 114, 98, 108, 85, 114, 113, 107, 117, + 117, 117, 117, 118, 118, 118, 118, 119, 119, 119, + 119, 120, 120, 120, 120, 121, 121, 121, 121, 122, + 122, 123, 112, 123, 123, 124, 111, 124, 124, 125, + + 109, 125, 125, 106, 105, 104, 100, 97, 93, 91, + 90, 67, 66, 61, 58, 50, 49, 39, 36, 29, + 17, 13, 11, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116 } ; /* Table of booleans, true if rule could match eol. */ -static yyconst flex_int32_t yy_rule_can_match_eol[43] = +static yyconst flex_int32_t yy_rule_can_match_eol[48] = { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, }; + 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, }; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. @@ -550,7 +558,7 @@ static yyconst flex_int32_t yy_rule_can_match_eol[43] = /* -*- mode: C -*- */ /* -------------------------------------------------------------------------- libconfig - A library for processing structured configuration files - Copyright (C) 2005-2014 Mark A Lindner + Copyright (C) 2005-2015 Mark A Lindner This file is part of libconfig. @@ -577,9 +585,11 @@ static yyconst flex_int32_t yy_rule_can_match_eol[43] = #endif #include +#include #include #include #include +#include #include "parsectx.h" #include "scanctx.h" #include "grammar.h" @@ -621,13 +631,30 @@ static unsigned long long fromhex(const char *s) #endif /* __MINGW32__ */ } +static int filter_dotfiles(const struct dirent *de) +{ + const char *fname = de->d_name; + +#ifdef _DIRENT_HAVE_D_TYPE + /* filter out non-files and non-symlinks */ + if((de->d_type != DT_REG) && (de->d_type != DT_LNK) && (de->d_type != DT_UNKNOWN)) + return 0; +#endif + + return (fname /* != NULL */ + && ('\0' != fname[0]) /* can't really happen */ + && ('.' != fname[0]) + ) ? 1 : 0 ; +} -#line 626 "scanner.c" + +#line 652 "scanner.c" #define INITIAL 0 #define COMMENT 1 #define STRING 2 -#define INCLUDE 3 +#define INCLUDE_F 3 +#define INCLUDE_D 4 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way @@ -652,8 +679,8 @@ struct yyguts_t size_t yy_buffer_stack_max; /**< capacity of stack. */ YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ char yy_hold_char; - yy_size_t yy_n_chars; - yy_size_t yyleng_r; + int yy_n_chars; + int yyleng_r; char *yy_c_buf_p; int yy_init; int yy_start; @@ -706,7 +733,7 @@ FILE *libconfig_yyget_out (yyscan_t yyscanner ); void libconfig_yyset_out (FILE * out_str ,yyscan_t yyscanner ); -yy_size_t libconfig_yyget_leng (yyscan_t yyscanner ); +int libconfig_yyget_leng (yyscan_t yyscanner ); char *libconfig_yyget_text (yyscan_t yyscanner ); @@ -714,10 +741,6 @@ int libconfig_yyget_lineno (yyscan_t yyscanner ); void libconfig_yyset_lineno (int line_number ,yyscan_t yyscanner ); -int libconfig_yyget_column (yyscan_t yyscanner ); - -void libconfig_yyset_column (int column_no ,yyscan_t yyscanner ); - YYSTYPE * libconfig_yyget_lval (yyscan_t yyscanner ); void libconfig_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); @@ -754,7 +777,12 @@ static int input (yyscan_t yyscanner ); /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else #define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ @@ -861,6 +889,11 @@ YY_DECL register int yy_act; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; +#line 121 "scanner.l" + + +#line 896 "scanner.c" + yylval = yylval_param; if ( !yyg->yy_init ) @@ -889,12 +922,6 @@ YY_DECL libconfig_yy_load_buffer_state(yyscanner ); } - { -#line 102 "scanner.l" - - -#line 897 "scanner.c" - while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = yyg->yy_c_buf_p; @@ -912,7 +939,7 @@ YY_DECL yy_match: do { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; @@ -921,13 +948,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 103 ) + if ( yy_current_state >= 117 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_current_state != 102 ); + while ( yy_current_state != 116 ); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; @@ -938,7 +965,7 @@ yy_find_action: if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) { - yy_size_t yyl; + int yyl; for ( yyl = 0; yyl < yyleng; ++yyl ) if ( yytext[yyl] == '\n' ) @@ -961,69 +988,69 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 104 "scanner.l" +#line 123 "scanner.l" { BEGIN COMMENT; } YY_BREAK case 2: YY_RULE_SETUP -#line 105 "scanner.l" +#line 124 "scanner.l" { BEGIN INITIAL; } YY_BREAK case 3: YY_RULE_SETUP -#line 106 "scanner.l" +#line 125 "scanner.l" { /* ignore */ } YY_BREAK case 4: /* rule 4 can match eol */ YY_RULE_SETUP -#line 107 "scanner.l" +#line 126 "scanner.l" { /* ignore */ } YY_BREAK case 5: YY_RULE_SETUP -#line 109 "scanner.l" +#line 128 "scanner.l" { BEGIN STRING; } YY_BREAK case 6: /* rule 6 can match eol */ YY_RULE_SETUP -#line 110 "scanner.l" +#line 129 "scanner.l" { scanctx_append_string(yyextra, yytext); } YY_BREAK case 7: YY_RULE_SETUP -#line 111 "scanner.l" +#line 130 "scanner.l" { scanctx_append_string(yyextra, "\n"); } YY_BREAK case 8: YY_RULE_SETUP -#line 112 "scanner.l" +#line 131 "scanner.l" { scanctx_append_string(yyextra, "\r"); } YY_BREAK case 9: YY_RULE_SETUP -#line 113 "scanner.l" +#line 132 "scanner.l" { scanctx_append_string(yyextra, "\t"); } YY_BREAK case 10: YY_RULE_SETUP -#line 114 "scanner.l" +#line 133 "scanner.l" { scanctx_append_string(yyextra, "\f"); } YY_BREAK case 11: YY_RULE_SETUP -#line 115 "scanner.l" +#line 134 "scanner.l" { scanctx_append_string(yyextra, "\\"); } YY_BREAK case 12: YY_RULE_SETUP -#line 116 "scanner.l" +#line 135 "scanner.l" { scanctx_append_string(yyextra, "\""); } YY_BREAK case 13: YY_RULE_SETUP -#line 117 "scanner.l" +#line 136 "scanner.l" { char c[2] = { (char)(strtol(yytext + 2, NULL, 16) & 0xFF), 0 }; @@ -1032,12 +1059,12 @@ YY_RULE_SETUP YY_BREAK case 14: YY_RULE_SETUP -#line 122 "scanner.l" +#line 141 "scanner.l" { scanctx_append_string(yyextra, "\\"); } YY_BREAK case 15: YY_RULE_SETUP -#line 123 "scanner.l" +#line 142 "scanner.l" { yylval->sval = scanctx_take_string(yyextra); BEGIN INITIAL; @@ -1046,198 +1073,304 @@ YY_RULE_SETUP YY_BREAK case 16: YY_RULE_SETUP -#line 129 "scanner.l" -{ BEGIN INCLUDE; } +#line 148 "scanner.l" +{ BEGIN INCLUDE_F; } YY_BREAK case 17: /* rule 17 can match eol */ YY_RULE_SETUP -#line 130 "scanner.l" +#line 149 "scanner.l" { scanctx_append_string(yyextra, yytext); } YY_BREAK case 18: YY_RULE_SETUP -#line 131 "scanner.l" +#line 150 "scanner.l" { scanctx_append_string(yyextra, "\\"); } YY_BREAK case 19: YY_RULE_SETUP -#line 132 "scanner.l" +#line 151 "scanner.l" { scanctx_append_string(yyextra, "\""); } YY_BREAK case 20: YY_RULE_SETUP -#line 133 "scanner.l" +#line 152 "scanner.l" { - const char *error; - FILE *fp = scanctx_push_include(yyextra, - (void *)YY_CURRENT_BUFFER, - &error); - if(fp) - { - yyin = fp; - libconfig_yy_switch_to_buffer(libconfig_yy_create_buffer(yyin,YY_BUF_SIZE,yyscanner),yyscanner); - } - else - { - yyextra->config->error_text = error; - yyextra->config->error_file = scanctx_current_filename( - yyextra); - yyextra->config->error_line = libconfig_yyget_lineno( - yyscanner); - return TOK_ERROR; - } - BEGIN INITIAL; - } + const char *error; + FILE *fp = scanctx_push_include(yyextra, + (void *)YY_CURRENT_BUFFER, + scanctx_getpath(yyextra), + &error); + if(fp) + { + yyin = fp; + libconfig_yy_switch_to_buffer(libconfig_yy_create_buffer(yyin,YY_BUF_SIZE,yyscanner),yyscanner + ); + } + else + { + yyextra->config->error_text = error; + yyextra->config->error_file = scanctx_current_filename( + yyextra); + yyextra->config->error_line = libconfig_yyget_lineno(yyscanner); + return TOK_ERROR; + } + BEGIN INITIAL; + } YY_BREAK case 21: -/* rule 21 can match eol */ YY_RULE_SETUP -#line 157 "scanner.l" -{ /* ignore */ } +#line 177 "scanner.l" +{ BEGIN INCLUDE_D; } YY_BREAK case 22: +/* rule 22 can match eol */ YY_RULE_SETUP -#line 158 "scanner.l" -{ /* ignore */ } +#line 178 "scanner.l" +{ scanctx_append_string(yyextra, yytext); } YY_BREAK case 23: YY_RULE_SETUP -#line 160 "scanner.l" -{ return(TOK_EQUALS); } +#line 179 "scanner.l" +{ scanctx_append_string(yyextra, "\\"); } YY_BREAK case 24: YY_RULE_SETUP -#line 161 "scanner.l" -{ return(TOK_COMMA); } +#line 180 "scanner.l" +{ scanctx_append_string(yyextra, "\""); } YY_BREAK case 25: YY_RULE_SETUP -#line 162 "scanner.l" -{ return(TOK_GROUP_START); } +#line 181 "scanner.l" +{ + const char *error; + const char* basedir; + FILE *fp = NULL; + + basedir = scanctx_getpath(yyextra); + if(scanctx_dirscan(yyextra, basedir, filter_dotfiles, NULL) < 0) + { + if(basedir) + free((void*)basedir); + return TOK_ERROR; + } + + if(scanctx_inloop(yyextra)) + { + fp = scanctx_push_include(yyextra, + (void *)YY_CURRENT_BUFFER, + scanctx_filename(yyextra, NULL, scanctx_dirnext(yyextra)), + &error + ); + + if(fp) + { + yyin = fp; + libconfig_yy_switch_to_buffer(libconfig_yy_create_buffer(yyin,YY_BUF_SIZE,yyscanner),yyscanner + ); + } + else + { + yyextra->config->error_text = error; + yyextra->config->error_file = scanctx_current_filename(yyextra); + yyextra->config->error_line = libconfig_yyget_lineno(yyscanner); + } + } + else + scanctx_dirend(yyextra); /* avoid leaks */ + + BEGIN INITIAL; + } YY_BREAK case 26: +/* rule 26 can match eol */ YY_RULE_SETUP -#line 163 "scanner.l" -{ return(TOK_GROUP_END); } +#line 223 "scanner.l" +{ /* ignore */ } YY_BREAK case 27: YY_RULE_SETUP -#line 164 "scanner.l" -{ yylval->ival = 1; return(TOK_BOOLEAN); } +#line 224 "scanner.l" +{ /* ignore */ } YY_BREAK case 28: YY_RULE_SETUP -#line 165 "scanner.l" -{ yylval->ival = 0; return(TOK_BOOLEAN); } +#line 226 "scanner.l" +{ return(TOK_EQUALS); } YY_BREAK case 29: YY_RULE_SETUP -#line 166 "scanner.l" -{ yylval->sval = yytext; return(TOK_NAME); } +#line 227 "scanner.l" +{ return(TOK_COMMA); } YY_BREAK case 30: YY_RULE_SETUP -#line 167 "scanner.l" -{ yylval->fval = atof(yytext); return(TOK_FLOAT); } +#line 228 "scanner.l" +{ return(TOK_GROUP_START); } YY_BREAK case 31: YY_RULE_SETUP -#line 168 "scanner.l" +#line 229 "scanner.l" +{ return(TOK_GROUP_END); } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 230 "scanner.l" +{ yylval->ival = 1; return(TOK_BOOLEAN); } + YY_BREAK +case 33: +YY_RULE_SETUP +#line 231 "scanner.l" +{ yylval->ival = 0; return(TOK_BOOLEAN); } + YY_BREAK +case 34: +YY_RULE_SETUP +#line 232 "scanner.l" +{ yylval->sval = yytext; return(TOK_NAME); } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 233 "scanner.l" +{ yylval->fval = atof(yytext); return(TOK_FLOAT); } + YY_BREAK +case 36: +YY_RULE_SETUP +#line 234 "scanner.l" { long long llval; - llval = atoll(yytext); + char *endptr; + int errsave = errno; + errno = 0; + llval = strtoll(yytext, &endptr, 0); /* base 10 or base 8 */ + if(*endptr || errno) + { + errno = 0; + return(TOK_ERROR); /* some error occured ... */ + } + errno = errsave; + if((*yytext == '0') && (*(yytext+1) != '\0')) + { /* it's octal... so INT we go */ + yylval->ival = (int)(llval); + return(TOK_INTEGER); + } + if((llval < INT_MIN) || (llval > INT_MAX)) { - yylval->llval = llval; - return(TOK_INTEGER64); + yylval->llval = llval; + return(TOK_INTEGER64); } else { - yylval->ival = llval; - return(TOK_INTEGER); + yylval->ival = llval; + return(TOK_INTEGER); } } YY_BREAK -case 32: +case 37: YY_RULE_SETUP -#line 182 "scanner.l" +#line 263 "scanner.l" { yylval->llval = atoll(yytext); return(TOK_INTEGER64); } YY_BREAK -case 33: +case 38: YY_RULE_SETUP -#line 183 "scanner.l" +#line 264 "scanner.l" { yylval->ival = strtoul(yytext, NULL, 16); return(TOK_HEX); } YY_BREAK -case 34: +case 39: YY_RULE_SETUP -#line 187 "scanner.l" +#line 268 "scanner.l" { yylval->llval = fromhex(yytext); return(TOK_HEX64); } YY_BREAK -case 35: +case 40: YY_RULE_SETUP -#line 188 "scanner.l" +#line 269 "scanner.l" { return(TOK_ARRAY_START); } YY_BREAK -case 36: +case 41: YY_RULE_SETUP -#line 189 "scanner.l" +#line 270 "scanner.l" { return(TOK_ARRAY_END); } YY_BREAK -case 37: +case 42: YY_RULE_SETUP -#line 190 "scanner.l" +#line 271 "scanner.l" { return(TOK_LIST_START); } YY_BREAK -case 38: +case 43: YY_RULE_SETUP -#line 191 "scanner.l" +#line 272 "scanner.l" { return(TOK_LIST_END); } YY_BREAK -case 39: +case 44: YY_RULE_SETUP -#line 192 "scanner.l" +#line 273 "scanner.l" { return(TOK_SEMICOLON); } YY_BREAK -case 40: +case 45: *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ yyg->yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 193 "scanner.l" +#line 274 "scanner.l" { /* ignore */ } YY_BREAK -case 41: +case 46: YY_RULE_SETUP -#line 194 "scanner.l" +#line 275 "scanner.l" { return(TOK_GARBAGE); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT): case YY_STATE_EOF(STRING): -case YY_STATE_EOF(INCLUDE): -#line 196 "scanner.l" +case YY_STATE_EOF(INCLUDE_F): +case YY_STATE_EOF(INCLUDE_D): +#line 277 "scanner.l" { - YY_BUFFER_STATE buf = (YY_BUFFER_STATE)scanctx_pop_include( - yyextra); - if(buf) - { - libconfig_yy_delete_buffer(YY_CURRENT_BUFFER,yyscanner); - libconfig_yy_switch_to_buffer(buf,yyscanner); - } - else - yyterminate(); - } + const char* error; + FILE *fp; + YY_BUFFER_STATE buf = (YY_BUFFER_STATE)scanctx_pop_include(yyextra); + if(buf) + { + libconfig_yy_delete_buffer(YY_CURRENT_BUFFER,yyscanner); + libconfig_yy_switch_to_buffer(buf,yyscanner); + } + else /* if no more buffers, we are done */ + yyterminate(); + + if(scanctx_inloop(yyextra)) + { + /* gotta keep looping.... */ + fp = scanctx_push_include(yyextra, + (void *)YY_CURRENT_BUFFER, + scanctx_filename(yyextra, NULL, scanctx_dirnext(yyextra)), + &error + ); + if(fp) + { + yyin = fp; + libconfig_yy_switch_to_buffer(libconfig_yy_create_buffer(yyin,YY_BUF_SIZE,yyscanner),yyscanner + ); + } + else + { + yyextra->config->error_text = error; + yyextra->config->error_file = scanctx_current_filename(yyextra); + yyextra->config->error_line = libconfig_yyget_lineno(yyscanner); + } + } + else /* not on loop, or just finished */ + scanctx_dirend(yyextra); + } YY_BREAK -case 42: +case 47: YY_RULE_SETUP -#line 207 "scanner.l" +#line 315 "scanner.l" ECHO; YY_BREAK -#line 1241 "scanner.c" +#line 1374 "scanner.c" case YY_END_OF_BUFFER: { @@ -1367,7 +1500,6 @@ ECHO; "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ - } /* end of user's declarations */ } /* end of libconfig_yylex */ /* yy_get_next_buffer - try to read in a new buffer @@ -1424,21 +1556,21 @@ static int yy_get_next_buffer (yyscan_t yyscanner) else { - yy_size_t num_to_read = + int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) (yyg->yy_c_buf_p - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { - yy_size_t new_size = b->yy_buf_size * 2; + int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -1469,7 +1601,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - yyg->yy_n_chars, num_to_read ); + yyg->yy_n_chars, (size_t) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } @@ -1532,7 +1664,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 103 ) + if ( yy_current_state >= 117 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -1561,13 +1693,12 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 103 ) + if ( yy_current_state >= 117 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 102); + yy_is_jam = (yy_current_state == 116); - (void)yyg; return yy_is_jam ? 0 : yy_current_state; } @@ -1596,7 +1727,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) else { /* need more input */ - yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + int offset = yyg->yy_c_buf_p - yyg->yytext_ptr; ++yyg->yy_c_buf_p; switch ( yy_get_next_buffer( yyscanner ) ) @@ -1884,7 +2015,7 @@ void libconfig_yypop_buffer_state (yyscan_t yyscanner) */ static void libconfig_yyensure_buffer_stack (yyscan_t yyscanner) { - yy_size_t num_to_alloc; + int num_to_alloc; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (!yyg->yy_buffer_stack) { @@ -1982,12 +2113,12 @@ YY_BUFFER_STATE libconfig_yy_scan_string (yyconst char * yystr , yyscan_t yyscan * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE libconfig_yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner) +YY_BUFFER_STATE libconfig_yy_scan_bytes (yyconst char * yybytes, int _yybytes_len , yyscan_t yyscanner) { YY_BUFFER_STATE b; char *buf; yy_size_t n; - yy_size_t i; + int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; @@ -2097,7 +2228,7 @@ FILE *libconfig_yyget_out (yyscan_t yyscanner) /** Get the length of the current token. * @param yyscanner The scanner object. */ -yy_size_t libconfig_yyget_leng (yyscan_t yyscanner) +int libconfig_yyget_leng (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyleng; @@ -2133,7 +2264,7 @@ void libconfig_yyset_lineno (int line_number , yyscan_t yyscanner) /* lineno is only valid if an input buffer exists. */ if (! YY_CURRENT_BUFFER ) - YY_FATAL_ERROR( "libconfig_yyset_lineno called with no buffer" ); + yy_fatal_error( "libconfig_yyset_lineno called with no buffer" , yyscanner); yylineno = line_number; } @@ -2148,7 +2279,7 @@ void libconfig_yyset_column (int column_no , yyscan_t yyscanner) /* column is only valid if an input buffer exists. */ if (! YY_CURRENT_BUFFER ) - YY_FATAL_ERROR( "libconfig_yyset_column called with no buffer" ); + yy_fatal_error( "libconfig_yyset_column called with no buffer" , yyscanner); yycolumn = column_no; } @@ -2372,4 +2503,4 @@ void libconfig_yyfree (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 207 "scanner.l" +#line 315 "scanner.l"