diff options
Diffstat (limited to '3rdparty/libconfig/extra/gen')
-rw-r--r-- | 3rdparty/libconfig/extra/gen/clangwarnings.patch | 25 | ||||
-rw-r--r-- | 3rdparty/libconfig/extra/gen/grammar.y | 24 | ||||
-rw-r--r-- | 3rdparty/libconfig/extra/gen/scanner.l | 47 |
3 files changed, 42 insertions, 54 deletions
diff --git a/3rdparty/libconfig/extra/gen/clangwarnings.patch b/3rdparty/libconfig/extra/gen/clangwarnings.patch index 4240f84d2..c3b45ef33 100644 --- a/3rdparty/libconfig/extra/gen/clangwarnings.patch +++ b/3rdparty/libconfig/extra/gen/clangwarnings.patch @@ -11,26 +11,5 @@ index 3595578..26444f8 100644 - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + YY_SYMBOL_PRINT (yymsg ? yymsg : "Deleting", yytype, yyvaluep, yylocationp); - switch (yytype) - { -diff --git a/scanner.c b/scanner.c -index aebd34c..c3a717f 100644 ---- a/scanner.c -+++ b/scanner.c -@@ -1500,6 +1500,8 @@ static int yy_get_next_buffer (yyscan_t yyscanner) - else - ret_val = EOB_ACT_CONTINUE_SCAN; - -+#ifndef __clang_analyzer__ -+ // FIXME: Clang's static analyzer complains about leaking the result of libconfig_yyrealloc - if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); -@@ -1507,6 +1509,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) - if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); - } -+#endif // __clang_analyzer__ - - yyg->yy_n_chars += number_to_move; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YYUSE (yytype); + } diff --git a/3rdparty/libconfig/extra/gen/grammar.y b/3rdparty/libconfig/extra/gen/grammar.y index 7eab74780..ef8ed4f18 100644 --- a/3rdparty/libconfig/extra/gen/grammar.y +++ b/3rdparty/libconfig/extra/gen/grammar.y @@ -1,8 +1,8 @@ /* -*- mode: C -*- */ /* ---------------------------------------------------------------------------- libconfig - A library for processing structured configuration files - Copyright (C) 2013-2015 Hercules Dev Team - Copyright (C) 2005-2010 Mark A Lindner + Copyright (C) 2013-2016 Hercules Dev Team + Copyright (C) 2005-2014 Mark A Lindner This file is part of libconfig. @@ -23,7 +23,7 @@ */ %defines -%output="y.tab.c" +%output "y.tab.c" %pure-parser %lex-param{void *scanner} %parse-param{void *scanner} @@ -63,7 +63,7 @@ static const char *err_duplicate_setting = "duplicate setting name"; (ctx->parent && (ctx->parent->type == CONFIG_TYPE_LIST)) static void capture_parse_pos(void *scanner, struct scan_context *scan_ctx, - config_setting_t *setting) + struct config_setting_t *setting) { setting->line = (unsigned int)libconfig_yyget_lineno(scanner); setting->file = scanctx_current_filename(scan_ctx); @@ -206,8 +206,8 @@ simple_value: { if(IN_ARRAY() || IN_LIST()) { - config_setting_t *e = config_setting_set_bool_elem(ctx->parent, -1, - (int)$1); + struct config_setting_t *e = config_setting_set_bool_elem(ctx->parent, -1, + (int)$1); if(! e) { @@ -226,7 +226,7 @@ simple_value: { if(IN_ARRAY() || IN_LIST()) { - config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, $1); + struct config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, $1); if(! e) { libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); @@ -248,7 +248,7 @@ simple_value: { if(IN_ARRAY() || IN_LIST()) { - config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, $1); + struct config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, $1); if(! e) { libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); @@ -270,7 +270,7 @@ simple_value: { if(IN_ARRAY() || IN_LIST()) { - config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, $1); + struct config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, $1); if(! e) { libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); @@ -292,7 +292,7 @@ simple_value: { if(IN_ARRAY() || IN_LIST()) { - config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, $1); + struct config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, $1); if(! e) { libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); @@ -314,7 +314,7 @@ simple_value: { if(IN_ARRAY() || IN_LIST()) { - config_setting_t *e = config_setting_set_float_elem(ctx->parent, -1, $1); + struct config_setting_t *e = config_setting_set_float_elem(ctx->parent, -1, $1); if(! e) { libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); @@ -333,7 +333,7 @@ simple_value: if(IN_ARRAY() || IN_LIST()) { const char *s = parsectx_take_string(ctx); - config_setting_t *e = config_setting_set_string_elem(ctx->parent, -1, s); + struct config_setting_t *e = config_setting_set_string_elem(ctx->parent, -1, s); _delete(s); if(! e) diff --git a/3rdparty/libconfig/extra/gen/scanner.l b/3rdparty/libconfig/extra/gen/scanner.l index 6bcce8116..f717ac273 100644 --- a/3rdparty/libconfig/extra/gen/scanner.l +++ b/3rdparty/libconfig/extra/gen/scanner.l @@ -1,8 +1,8 @@ /* -*- mode: C -*- */ /* -------------------------------------------------------------------------- libconfig - A library for processing structured configuration files - Copyright (C) 2013-2015 Hercules Dev Team - Copyright (C) 2005-2010 Mark A Lindner + Copyright (C) 2013-2016 Hercules Dev Team + Copyright (C) 2005-2014 Mark A Lindner This file is part of libconfig. @@ -23,33 +23,30 @@ */ %option nounistd +%option never-interactive %option reentrant %option noyywrap %option yylineno %option nounput %option bison-bridge -%option never-interactive %option header-file="scanner.h" %option outfile="lex.yy.c" %option extra-type="struct scan_context *" -%top{ -#include "scanctx.h" -} - %{ + #ifdef _MSC_VER #pragma warning (disable: 4996) -/* disable MSVC warning "signed/unsigned mismatch" associated with code generated by flex versions such as 2.5.35. */ -#pragma warning (disable:4018) #endif #include <stdlib.h> #include <ctype.h> #include <string.h> +#include <limits.h> +#include "parsectx.h" +#include "scanctx.h" #include "grammar.h" #include "wincompat.h" -#include "parsectx.h" #define YY_NO_INPUT // Suppress generation of useless input() function @@ -87,13 +84,6 @@ static unsigned long long fromhex(const char *s) #endif /* __MINGW32__ */ } -static int fromihex(const char *s) { - unsigned long l = strtoul(s, NULL, 16); - if (l > INT32_MAX) - l &= INT32_MAX; - return (int)l; -} - %} true [Tt][Rr][Uu][Ee] @@ -183,9 +173,28 @@ include_open ^[ \t]*@include[ \t]+\" {true} { yylval->ival = 1; return(TOK_BOOLEAN); } {false} { yylval->ival = 0; return(TOK_BOOLEAN); } {float} { yylval->fval = atof(yytext); return(TOK_FLOAT); } -{integer} { yylval->ival = atoi(yytext); return(TOK_INTEGER); } +{integer} { + long long llval; + llval = atoll(yytext); + if((llval < INT_MIN) || (llval > INT_MAX)) + { + yylval->llval = llval; + return(TOK_INTEGER64); + } + else + { + yylval->ival = (int)llval; + return(TOK_INTEGER); + } + } {integer64} { yylval->llval = atoll(yytext); return(TOK_INTEGER64); } -{hex} { yylval->ival = fromihex(yytext); return(TOK_HEX); } +{hex} { + unsigned long ulval = strtoul(yytext, NULL, 16); + if (ulval > INT32_MAX) + ulval &= INT32_MAX; + yylval->ival = (int)ulval; + return(TOK_HEX); + } {hex64} { yylval->llval = fromhex(yytext); return(TOK_HEX64); } {name} { yylval->sval = yytext; return(TOK_NAME); } \[ { return(TOK_ARRAY_START); } |