diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-02-18 16:19:36 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2016-02-18 16:19:36 +0300 |
commit | 5b74faa8afd04771af7acb918072ea71a3db475f (patch) | |
tree | 47d24a43925e95aea6acb8ff321cb9543600fda4 /3rdparty | |
parent | 1bfb8c1283a0c662902cc8cb94d30159a9bc1183 (diff) | |
parent | 1d2eb6d23519a971db0646a146152fc6f79350f1 (diff) | |
download | hercules-5b74faa8afd04771af7acb918072ea71a3db475f.tar.gz hercules-5b74faa8afd04771af7acb918072ea71a3db475f.tar.bz2 hercules-5b74faa8afd04771af7acb918072ea71a3db475f.tar.xz hercules-5b74faa8afd04771af7acb918072ea71a3db475f.zip |
Merge pull request #1160 from MishimaHaruna/libconfig
Libconfig: update to 1.5 and various improvements
Diffstat (limited to '3rdparty')
-rw-r--r-- | 3rdparty/libconfig/AUTHORS | 1 | ||||
-rw-r--r-- | 3rdparty/libconfig/ChangeLog | 38 | ||||
-rw-r--r-- | 3rdparty/libconfig/README.md | 4 | ||||
-rw-r--r-- | 3rdparty/libconfig/extra/doc/libconfig.texi | 192 | ||||
-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 | ||||
-rw-r--r-- | 3rdparty/libconfig/grammar.c | 402 | ||||
-rw-r--r-- | 3rdparty/libconfig/grammar.h | 39 | ||||
-rw-r--r-- | 3rdparty/libconfig/libconfig-1.4.9 | 0 | ||||
-rw-r--r-- | 3rdparty/libconfig/libconfig-1.5 | 2 | ||||
-rw-r--r-- | 3rdparty/libconfig/libconfig.c | 419 | ||||
-rw-r--r-- | 3rdparty/libconfig/libconfig.h | 225 | ||||
-rw-r--r-- | 3rdparty/libconfig/parsectx.h | 10 | ||||
-rw-r--r-- | 3rdparty/libconfig/scanctx.c | 11 | ||||
-rw-r--r-- | 3rdparty/libconfig/scanctx.h | 6 | ||||
-rw-r--r-- | 3rdparty/libconfig/scanner.c | 280 | ||||
-rw-r--r-- | 3rdparty/libconfig/scanner.h | 37 | ||||
-rw-r--r-- | 3rdparty/libconfig/strbuf.c | 5 | ||||
-rw-r--r-- | 3rdparty/libconfig/strbuf.h | 4 | ||||
-rw-r--r-- | 3rdparty/libconfig/win32/stdint.h | 221 | ||||
-rw-r--r-- | 3rdparty/libconfig/wincompat.h | 15 |
22 files changed, 1256 insertions, 751 deletions
diff --git a/3rdparty/libconfig/AUTHORS b/3rdparty/libconfig/AUTHORS index d3d5e104b..5eef0f0ff 100644 --- a/3rdparty/libconfig/AUTHORS +++ b/3rdparty/libconfig/AUTHORS @@ -4,3 +4,4 @@ Mark Lindner - Lead developer & maintainer. Daniel Marjamäki - Enhancements & bugfixes. Andrew Tytula - Windows port. Glenn Herteg - Enhancements, bugfixes, documentation corrections. +Matt Renaud - Enhancements & bugfixes. diff --git a/3rdparty/libconfig/ChangeLog b/3rdparty/libconfig/ChangeLog index 52125e9fb..c24151e09 100644 --- a/3rdparty/libconfig/ChangeLog +++ b/3rdparty/libconfig/ChangeLog @@ -1,3 +1,41 @@ + + ----- version 1.5 ------ + +2015-05-16 Mark Lindner <markl@neuromancer> + + * lib/libconfig.c - Don't fclose() a null pointer. + +2014-09-19 Mark Lindner <markl@neuromancer> + + * lib/libconfig.c, lib/wincompat.h - check if file being opened is a + directory + * lib/libconfig.c, lib/libconfig.h, lib/libconfig.h++, + doc/libconfig.texi - added config_set_options(), + config_get_options(), setOptions(), getOptions(). + +2014-05-25 Mark Lindner <markl@neuromancer> + + * lib/libconfig.c++, lib/libconfig.h++ - added patches from Matt + Renaud (added iterators, removed throws() specifications); added + Setting.lookup(); code cleanup; added patch from Yuri Dyachenko + (made exception constructors public) + * lib/libconfig.c, lib/libconfig.h - renamed + config_setting_lookup_from() to config_setting_lookup() and + documented it; patch from Alexander Klauer (floating point precision + loss) + * doc/libconfig.texi - documented new APIs, bumped version + * lib/scanner.c, lib/scanner.h, lib/scanner.l, libconfig.c - + scanner code cleanup; and regenerated with flex 2.5.39 + * lib/grammar.c, lib/grammar.h, lib/grammar.y - parser code cleanup; + and regenerated with bison 3.0.2 + * README, ChangeLog - version updates + +2014-01-21 Mark Lindner <markl@neuromancer> + + * lib/libconfig.c - bugfix; capture root filename + * tests/Makefile.am - fix for out-of-source builds + * ac_config.h.in, aclocal.m4 - updated to newer autotools + ----- version 1.4.9 ------ 2012-09-28 Mark Lindner <markl@neuromancer> diff --git a/3rdparty/libconfig/README.md b/3rdparty/libconfig/README.md new file mode 100644 index 000000000..43bd17e41 --- /dev/null +++ b/3rdparty/libconfig/README.md @@ -0,0 +1,4 @@ +libconfig +========= + +C/C++ library for processing configuration files diff --git a/3rdparty/libconfig/extra/doc/libconfig.texi b/3rdparty/libconfig/extra/doc/libconfig.texi index 52dca20fc..9441dc2ac 100644 --- a/3rdparty/libconfig/extra/doc/libconfig.texi +++ b/3rdparty/libconfig/extra/doc/libconfig.texi @@ -6,8 +6,8 @@ @setfilename libconfig.info @settitle libconfig -@set edition 1.4.9 -@set update-date 28 September 2012 +@set edition 1.5 +@set update-date 16 May 2015 @set subtitle-text A Library For Processing Structured Configuration Files @set author-text Mark A.@: Lindner @@ -36,7 +36,7 @@ @page @vskip 0pt plus 1filll -Copyright @copyright{} 2005-2012 Mark A Lindner +Copyright @copyright{} 2005-2014 Mark A Lindner Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice @@ -512,8 +512,11 @@ more hexadecimal digits (@samp{0} - @samp{9}, @samp{A} - @samp{F}, @section 64-bit Integer Values Long long (64-bit) integers are represented identically to integers, -except that an 'L' character is appended to indicate a 64-bit -value. For example, @samp{0L} indicates a 64-bit integer value 0. +except that an `L' character is appended to indicate a 64-bit +value. For example, @samp{0L} indicates a 64-bit integer value 0. As +of version 1.5 of the library, the trailing `L' is optional; if the +integer value exceeds the range of a 32-bit integer, it will +automatically be interpreted as a 64-bit integer. @node Floating Point Values, Boolean Values, 64-bit Integer Values, Configuration Files @comment node-name, next, previous, up @@ -766,21 +769,60 @@ configuration @var{config}, or @code{NULL} if none is set. @end deftypefun -@deftypefun void config_set_auto_convert (@w{config_t *@var{config}}, @w{int @var{flag}}) -@deftypefunx int config_get_auto_convert (@w{const config_t *@var{config}}) +@deftypefun void config_set_options (@w{config_t *@var{config}}, @w{int @var{options}}) +@deftypefunx int config_get_options (@w{config_t *@var{config}}) + +These functions set and get the options for the configuration +@var{config}. The options affect how configurations are read and +written. The following options are defined: + +@table @code -@code{config_set_auto_convert()} enables number auto-conversion for -the configuration @var{config} if @var{flag} is non-zero, and disables -it otherwise. When this feature is enabled, an attempt to retrieve a +@item CONFIG_OPTION_AUTOCONVERT +Turning this option on enables number auto-conversion for +the configuration. When this feature is enabled, an attempt to retrieve a floating point setting's value into an integer (or vice versa), or store an integer to a floating point setting's value (or vice versa) will cause the library to silently perform the necessary conversion (possibly leading to loss of data), rather than reporting failure. By -default this feature is disabled. +default this option is turned off. + +@item CONFIG_OPTION_SEMICOLON_SEPARATORS +This option controls whether a semicolon (`;') is output after each setting +when the configuration is written to a file or stream. (The semicolon +separators are optional in the configuration syntax.) By default this +option is turned on. + +@item CONFIG_OPTION_COLON_ASSIGNMENT_FOR_GROUPS +This option controls whether a colon (`:') is output between each +group setting's name and its value when the configuration is written to +a file or stream. If the option is turned off, an equals sign (`=') is +output instead. (These tokens are interchangeable in the configuration +syntax.) By default this option is turned on. + +@item CONFIG_OPTION_COLON_ASSIGNMENT_FOR_NON_GROUPS +This option controls whether a colon (`:') is output between each +non-group setting's name and its value when the configuration is written +to a file or stream. If the option is turned off, an equals sign (`=') +is output instead. (These tokens are interchangeable in the configuration +syntax.) By default this option is turned off. + +@item CONFIG_OPTION_OPEN_BRACE_ON_SEPARATE_LINE +This option controls whether an open brace (`@{') will be written on its own +line when the configuration is written to a file or stream. If the option is +turned off, the brace will be written at the end of the previous line. +By default this option is turned on. + +@end table + +@end deftypefun + +@deftypefun void config_set_auto_convert (@w{config_t *@var{config}}, @w{int @var{flag}}) +@deftypefunx int config_get_auto_convert (@w{const config_t *@var{config}}) -@code{config_get_auto_convert()} returns @code{CONFIG_TRUE} if number -auto-conversion is currently enabled for @var{config}; otherwise it -returns @code{CONFIG_FALSE}. +These functions get and set the @code{CONFIG_OPTION_AUTO_CONVERT} +option. They are obsoleted by the @code{config_set_options()} and +@code{config_get_options()} functions described above. @end deftypefun @@ -839,6 +881,15 @@ setting was not found. @end deftypefun +@deftypefun {config_setting_t *} config_setting_lookup (@w{const config_setting_t * @var{setting}}, @w{const char * @var{path}}) + +This function locates a setting by a path @var{path} relative to +the setting @var{setting}. It returns a pointer to the +@code{config_setting_t} structure on success, or @code{NULL} if the +setting was not found. + +@end deftypefun + @deftypefun int config_setting_get_int (@w{const config_setting_t * @var{setting}}) @deftypefunx {long long} config_setting_get_int64 (@w{const config_setting_t * @var{setting}}) @deftypefunx double config_setting_get_float (@w{const config_setting_t * @var{setting}}) @@ -1146,17 +1197,45 @@ common base exception @code{ConfigException}. A @code{SettingTypeException} is thrown when the type of a setting's value does not match the type requested. +@deftypemethod SettingTypeException {} SettingTypeException (@w{const Setting &@var{setting}}) +@deftypemethodx SettingTypeException {} SettingTypeException (@w{const Setting &@var{setting}}, @w{int @var{index}}) +@deftypemethodx SettingTypeException {} SettingTypeException (@w{const Setting &@var{setting}}, @w{const char *@var{name}}) + +These methods construct @code{SettingTypeException} objects for the given @var{setting} and/or member @var{index} or @var{name}. + +@end deftypemethod + @tindex SettingNotFoundException A @code{SettingNotFoundException} is thrown when a setting is not found. +@deftypemethod SettingNotFoundException {} SettingNotFoundException (@w{const Setting &@var{setting}}, @w{int @var{index}}) +@deftypemethodx SettingNotFoundException {} SettingNotFoundException (@w{const Setting &@var{setting}}, @w{const char *@var{name}}) +@deftypemethodx SettingNotFoundException {} SettingNotFoundException (@w{const char *@var{path}}) + +These methods construct @code{SettingTypeException} objects for the given @var{setting} and member @var{index} or @var{name}, or path @var{path}. + +@end deftypemethod + @tindex SettingNameException A @code{SettingNameException} is thrown when an attempt is made to add a new setting with a non-unique or invalid name. +@deftypemethod SettingNameException {} SettingNameException (@w{const Setting &@var{setting}}, @w{const char *@var{name}}) + +This method constructs a @code{SettingNameExcpetion} object for the given @var{setting} and member name @var{name}. + +@end deftypemethod + @tindex ParseException A @code{ParseException} is thrown when a parse error occurs while reading a configuration from a stream. +@deftypemethod ParseException {} ParseException (@w{const char *@var{file}}, @w{int @var{line}}, @w{const char *@var{error}}) + +This method constructs a @code{ParseException} object with the given filename @var{file}, line number @var{line}, and error message @var{error}. + +@end deftypemethod + @tindex FileIOException A @code{FileIOException} is thrown when an I/O error occurs while reading/writing a configuration from/to a file. @@ -1247,21 +1326,60 @@ configuration, or @code{NULL} if none is set. @end deftypemethod +@deftypemethod Config void setOptions (int @var{options}) +@deftypemethodx Config int getOptions () + +These methods set and get the options for the configuration. The +options affect how configurations are read and written. The following +options are defined: + +@table @code + +@item OptionAutoConvert +Turning this option on enables number auto-conversion for +the configuration. When this feature is enabled, an attempt to retrieve a +floating point setting's value into an integer (or vice versa), or +store an integer to a floating point setting's value (or vice versa) +will cause the library to silently perform the necessary conversion +(possibly leading to loss of data), rather than reporting failure. By +default this option is turned off. + +@item OptionSemicolonSeparators +This option controls whether a semicolon (`;') is output after each setting +when the configuration is written to a file or stream. (The semicolon +separators are optional in the configuration syntax.) By default this +option is turned on. + +@item OptionColonAssignmentForGroups +This option controls whether a colon (`:') is output between each +group setting's name and its value when the configuration is written to +a file or stream. If the option is turned off, an equals sign (`=') is +output instead. (These tokens are interchangeable in the configuration +syntax.) By default this option is turned on. + +@item OptionColonAssignmentForNonGroups +This option controls whether a colon (`:') is output between each +non-group setting's name and its value when the configuration is written +to a file or stream. If the option is turned off, an equals sign (`=') +is output instead. (These tokens are interchangeable in the configuration +syntax.) By default this option is turned off. + +@item OptionOpenBraceOnSeparateLine +This option controls whether an open brace (`@{') will be written on its own +line when the configuration is written to a file or stream. If the option is +turned off, the brace will be written at the end of the previous line. +By default this option is turned on. + +@end table + +@end deftypemethod + @deftypemethod Config void setAutoConvert (bool @var{flag}) @deftypemethodx Config bool getAutoConvert () -@code{setAutoConvert()} enables number auto-conversion for the -configuration if @var{flag} is @code{true}, and disables it -otherwise. When this feature is enabled, an attempt to assign a -floating point setting to an integer (or vice versa), or -assign an integer to a floating point setting (or vice versa) will -cause the library to silently perform the necessary conversion -(possibly leading to loss of data), rather than throwing a -@code{SettingTypeException}. By default this feature is disabled. - -@code{getAutoConvert()} returns @code{true} if number auto-conversion -is currently enabled for the configuration; otherwise it returns -@code{false}. +These methods get and set the @code{OptionAutoConvert} option. They +are obsoleted by the @code{setOptions()} and @code{getOptions()} +methods described above. @end deftypemethod @@ -1542,6 +1660,15 @@ configuration. @end deftypemethod +@deftypemethod Setting {Setting &} lookup (@w{const char * @var{path}}) +@deftypemethodx Setting {Setting &} lookup (@w{const std::string &@var{path}}) + +This function locates a setting by a path @var{path} relative to +this setting. If requested setting is not found, a +@code{SettingNotFoundException} is thrown. + +@end deftypemethod + @deftypemethod Setting bool lookupValue (@w{const char *@var{name}}, @w{bool &@var{value}}) @deftypemethodx Setting bool lookupValue (@w{const std::string &@var{name}}, @w{bool &@var{value}}) @@ -1744,6 +1871,17 @@ These methods test if the setting has a child setting with the given @code{false} otherwise. These methods do not throw exceptions. @end deftypemethod +@page +@deftypemethod Setting iterator begin () +@deftypemethodx Setting iterator end () +@deftypemethodx Setting const_iterator begin () +@deftypemethodx Setting const_iterator end () + +These methods return STL-style iterators that can be used to enumerate +the child settings of a given setting. If the setting is not an array, list, +or group, they throw a @code{SettingTypeException}. + +@end deftypemethod @deftypemethod Setting int getLength () @@ -1878,7 +2016,7 @@ Terminals are defined below as regular expressions: @item @code{hex} @tab @code{0[Xx][0-9A-Fa-f]+} @item @code{hex64} @tab -@code{0[Xx][0-9A-Fa-f]+L(L)?} +@code{0[Xx][0-9A-Fa-f]+(L(L)?)?} @item @code{float} @tab @code{([-+]?([0-9]*)?\.[0-9]*([eE][-+]?[0-9]+)?)|([-+]([0-9]+)(\.[0-9]*)?[eE][-+]?[0-9]+)} @end multitable 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); } diff --git a/3rdparty/libconfig/grammar.c b/3rdparty/libconfig/grammar.c index eb00552e2..7d5757b2f 100644 --- a/3rdparty/libconfig/grammar.c +++ b/3rdparty/libconfig/grammar.c @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.5. */ +/* A Bison parser, made by GNU Bison 2.7.12-4996. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.5" +#define YYBISON_VERSION "2.7.12-4996" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -58,8 +58,6 @@ /* Pull parsers. */ #define YYPULL 1 -/* Using locations. */ -#define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse libconfig_yyparse @@ -70,11 +68,9 @@ #define yydebug libconfig_yydebug #define yynerrs libconfig_yynerrs - /* Copy the first part of user declarations. */ - -/* Line 268 of yacc.c */ -#line 32 "grammar.y" +/* Line 371 of yacc.c */ +#line 33 "grammar.y" #include <string.h> #include <stdlib.h> @@ -108,7 +104,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); @@ -126,14 +122,16 @@ void libconfig_yyerror(void *scanner, struct parse_context *ctx, } +/* Line 371 of yacc.c */ +#line 127 "grammar.c" -/* Line 268 of yacc.c */ -#line 132 "grammar.c" - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif +# ifndef YY_NULL +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULL nullptr +# else +# define YY_NULL 0 +# endif +# endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE @@ -143,11 +141,17 @@ void libconfig_yyerror(void *scanner, struct parse_context *ctx, # define YYERROR_VERBOSE 0 #endif -/* Enabling the token table. */ -#ifndef YYTOKEN_TABLE -# define YYTOKEN_TABLE 0 +/* In a future release of Bison, this section will be replaced + by #include "y.tab.h". */ +#ifndef YY_LIBCONFIG_YY_GRAMMAR_H_INCLUDED +# define YY_LIBCONFIG_YY_GRAMMAR_H_INCLUDED +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int libconfig_yydebug; #endif - /* Tokens. */ #ifndef YYTOKENTYPE @@ -201,13 +205,11 @@ void libconfig_yyerror(void *scanner, struct parse_context *ctx, - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { - -/* Line 293 of yacc.c */ -#line 85 "grammar.y" +/* Line 387 of yacc.c */ +#line 86 "grammar.y" int ival; long long llval; @@ -215,9 +217,8 @@ typedef union YYSTYPE char *sval; - -/* Line 293 of yacc.c */ -#line 221 "grammar.c" +/* Line 387 of yacc.c */ +#line 222 "grammar.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -225,11 +226,26 @@ typedef union YYSTYPE #endif -/* Copy the second part of user declarations. */ +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int libconfig_yyparse (void *YYPARSE_PARAM); +#else +int libconfig_yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int libconfig_yyparse (void *scanner, struct parse_context *ctx, struct scan_context *scan_ctx); +#else +int libconfig_yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ +#endif /* !YY_LIBCONFIG_YY_GRAMMAR_H_INCLUDED */ -/* Line 343 of yacc.c */ -#line 233 "grammar.c" +/* Copy the second part of user declarations. */ + +/* Line 390 of yacc.c */ +#line 249 "grammar.c" #ifdef short # undef short @@ -282,24 +298,33 @@ typedef short int yytype_int16; # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ -# define YY_(msgid) dgettext ("bison-runtime", msgid) +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ -# define YY_(msgid) msgid +# define YY_(Msgid) Msgid +# endif +#endif + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if (! defined __GNUC__ || __GNUC__ < 2 \ + || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)) +# define __attribute__(Spec) /* empty */ # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YYUSE(e) ((void) (e)) +# define YYUSE(E) ((void) (E)) #else -# define YYUSE(e) /* empty */ +# define YYUSE(E) /* empty */ #endif + /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint -# define YYID(n) (n) +# define YYID(N) (N) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) @@ -335,6 +360,7 @@ YYID (yyi) # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif @@ -426,20 +452,20 @@ union yyalloc #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from FROM to TO. The source and destination do +/* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else -# define YYCOPY(To, From, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ while (YYID (0)) # endif # endif @@ -529,15 +555,15 @@ static const yytype_int8 yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 100, 100, 102, 106, 107, 110, 112, 115, 117, - 118, 121, 123, 128, 127, 147, 146, 170, 169, 192, - 193, 194, 195, 199, 200, 204, 224, 246, 268, 290, - 312, 330, 358, 359, 363, 366, 368, 372, 373, 377, - 380, 382, 387, 386 + 0, 101, 101, 103, 107, 108, 111, 113, 116, 118, + 119, 122, 124, 129, 128, 148, 147, 171, 170, 193, + 194, 195, 196, 200, 201, 205, 225, 247, 269, 291, + 313, 331, 359, 360, 364, 367, 369, 373, 374, 378, + 381, 383, 388, 387 }; #endif -#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +#if YYDEBUG || YYERROR_VERBOSE || 0 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = @@ -551,7 +577,7 @@ static const char *const yytname[] = "setting_terminator", "comma_optional", "setting", "$@1", "array", "$@2", "list", "$@3", "value", "string", "simple_value", "value_list_sub", "value_list", "value_list_optional", "simple_value_list_sub", - "simple_value_list", "simple_value_list_optional", "group", "$@4", 0 + "simple_value_list", "simple_value_list_optional", "group", "$@4", YY_NULL }; #endif @@ -640,10 +666,10 @@ static const yytype_uint8 yytable[] = 45, 48, 47, 40, 0, 46, 0, 7 }; -#define yypact_value_is_default(yystate) \ - ((yystate) == (-26)) +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-26))) -#define yytable_value_is_error(yytable_value) \ +#define yytable_value_is_error(Yytable_value) \ YYID (0) static const yytype_int8 yycheck[] = @@ -693,62 +719,35 @@ static const yytype_uint8 yystos[] = #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (1); \ - goto yybackup; \ - } \ - else \ - { \ +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ yyerror (scanner, ctx, scan_ctx, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) - +/* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (YYID (N)) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (YYID (0)) -#endif - - /* This macro is provided for backward compatibility. */ - #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif /* YYLEX -- calling `yylex' with the right arguments. */ - #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else @@ -801,6 +800,8 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, scanner, ctx, scan_ctx) struct scan_context *scan_ctx; #endif { + FILE *yyo = yyoutput; + YYUSE (yyo); if (!yyvaluep) return; YYUSE (scanner); @@ -812,11 +813,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, scanner, ctx, scan_ctx) # else YYUSE (yyoutput); # endif - switch (yytype) - { - default: - break; - } + YYUSE (yytype); } @@ -1061,12 +1058,11 @@ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); + YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); YYSIZE_T yysize = yysize0; - YYSIZE_T yysize1; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ - const char *yyformat = 0; + const char *yyformat = YY_NULL; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per @@ -1126,11 +1122,13 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, break; } yyarg[yycount++] = yytname[yyx]; - yysize1 = yysize + yytnamerr (0, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; + { + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } } } } @@ -1150,10 +1148,12 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, # undef YYCASE_ } - yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; + { + YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } if (*yymsg_alloc < yysize) { @@ -1213,29 +1213,10 @@ yydestruct (yymsg, yytype, yyvaluep, scanner, ctx, scan_ctx) YY_SYMBOL_PRINT (yymsg ? yymsg : "Deleting", yytype, yyvaluep, yylocationp); - switch (yytype) - { - - default: - break; - } + YYUSE (yytype); } -/* Prevent warnings from -Wmissing-prototypes. */ -#ifdef YYPARSE_PARAM -#if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); -#else -int yyparse (); -#endif -#else /* ! YYPARSE_PARAM */ -#if defined __STDC__ || defined __cplusplus -int yyparse (void *scanner, struct parse_context *ctx, struct scan_context *scan_ctx); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ /*----------. @@ -1269,8 +1250,31 @@ yyparse (scanner, ctx, scan_ctx) /* The lookahead symbol. */ int yychar; + +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +/* Default value used for initialization, for pacifying older GCCs + or non-GCC compilers. */ +static YYSTYPE yyval_default; +# define YY_INITIAL_VALUE(Value) = Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + /* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; +YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); /* Number of syntax errors so far. */ int yynerrs; @@ -1283,7 +1287,7 @@ YYSTYPE yylval; `yyss': related to states. `yyvs': related to semantic values. - Refer to the stacks thru separate pointers, to allow yyoverflow + Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ @@ -1301,7 +1305,7 @@ YYSTYPE yylval; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ - int yytoken; + int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; @@ -1319,9 +1323,8 @@ YYSTYPE yylval; Keep to zero when no symbol should be popped. */ int yylen = 0; - yytoken = 0; - yyss = yyssa; - yyvs = yyvsa; + yyssp = yyss = yyssa; + yyvsp = yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); @@ -1330,14 +1333,6 @@ YYSTYPE yylval; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - yyssp = yyss; - yyvsp = yyvs; - goto yysetstate; /*------------------------------------------------------------. @@ -1478,7 +1473,9 @@ yybackup: yychar = YYEMPTY; yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; @@ -1515,9 +1512,8 @@ yyreduce: switch (yyn) { case 13: - -/* Line 1806 of yacc.c */ -#line 128 "grammar.y" +/* Line 1802 of yacc.c */ +#line 129 "grammar.y" { ctx->setting = config_setting_add(ctx->parent, (yyvsp[(1) - (1)].sval), CONFIG_TYPE_NONE); @@ -1534,9 +1530,8 @@ yyreduce: break; case 15: - -/* Line 1806 of yacc.c */ -#line 147 "grammar.y" +/* Line 1802 of yacc.c */ +#line 148 "grammar.y" { if(IN_LIST()) { @@ -1553,9 +1548,8 @@ yyreduce: break; case 16: - -/* Line 1806 of yacc.c */ -#line 162 "grammar.y" +/* Line 1802 of yacc.c */ +#line 163 "grammar.y" { if(ctx->parent) ctx->parent = ctx->parent->parent; @@ -1563,9 +1557,8 @@ yyreduce: break; case 17: - -/* Line 1806 of yacc.c */ -#line 170 "grammar.y" +/* Line 1802 of yacc.c */ +#line 171 "grammar.y" { if(IN_LIST()) { @@ -1582,9 +1575,8 @@ yyreduce: break; case 18: - -/* Line 1806 of yacc.c */ -#line 185 "grammar.y" +/* Line 1802 of yacc.c */ +#line 186 "grammar.y" { if(ctx->parent) ctx->parent = ctx->parent->parent; @@ -1592,28 +1584,25 @@ yyreduce: break; case 23: - -/* Line 1806 of yacc.c */ -#line 199 "grammar.y" +/* Line 1802 of yacc.c */ +#line 200 "grammar.y" { parsectx_append_string(ctx, (yyvsp[(1) - (1)].sval)); free((yyvsp[(1) - (1)].sval)); } break; case 24: - -/* Line 1806 of yacc.c */ -#line 200 "grammar.y" +/* Line 1802 of yacc.c */ +#line 201 "grammar.y" { parsectx_append_string(ctx, (yyvsp[(2) - (2)].sval)); free((yyvsp[(2) - (2)].sval)); } break; case 25: - -/* Line 1806 of yacc.c */ -#line 205 "grammar.y" +/* Line 1802 of yacc.c */ +#line 206 "grammar.y" { if(IN_ARRAY() || IN_LIST()) { - config_setting_t *e = config_setting_set_bool_elem(ctx->parent, -1, - (int)(yyvsp[(1) - (1)].ival)); + struct config_setting_t *e = config_setting_set_bool_elem(ctx->parent, -1, + (int)(yyvsp[(1) - (1)].ival)); if(! e) { @@ -1631,13 +1620,12 @@ yyreduce: break; case 26: - -/* Line 1806 of yacc.c */ -#line 225 "grammar.y" +/* Line 1802 of yacc.c */ +#line 226 "grammar.y" { if(IN_ARRAY() || IN_LIST()) { - config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, (yyvsp[(1) - (1)].ival)); + struct config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, (yyvsp[(1) - (1)].ival)); if(! e) { libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); @@ -1658,13 +1646,12 @@ yyreduce: break; case 27: - -/* Line 1806 of yacc.c */ -#line 247 "grammar.y" +/* Line 1802 of yacc.c */ +#line 248 "grammar.y" { if(IN_ARRAY() || IN_LIST()) { - config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, (yyvsp[(1) - (1)].llval)); + struct config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, (yyvsp[(1) - (1)].llval)); if(! e) { libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); @@ -1685,13 +1672,12 @@ yyreduce: break; case 28: - -/* Line 1806 of yacc.c */ -#line 269 "grammar.y" +/* Line 1802 of yacc.c */ +#line 270 "grammar.y" { if(IN_ARRAY() || IN_LIST()) { - config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, (yyvsp[(1) - (1)].ival)); + struct config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, (yyvsp[(1) - (1)].ival)); if(! e) { libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); @@ -1712,13 +1698,12 @@ yyreduce: break; case 29: - -/* Line 1806 of yacc.c */ -#line 291 "grammar.y" +/* Line 1802 of yacc.c */ +#line 292 "grammar.y" { if(IN_ARRAY() || IN_LIST()) { - config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, (yyvsp[(1) - (1)].llval)); + struct config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, (yyvsp[(1) - (1)].llval)); if(! e) { libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); @@ -1739,13 +1724,12 @@ yyreduce: break; case 30: - -/* Line 1806 of yacc.c */ -#line 313 "grammar.y" +/* Line 1802 of yacc.c */ +#line 314 "grammar.y" { if(IN_ARRAY() || IN_LIST()) { - config_setting_t *e = config_setting_set_float_elem(ctx->parent, -1, (yyvsp[(1) - (1)].fval)); + struct config_setting_t *e = config_setting_set_float_elem(ctx->parent, -1, (yyvsp[(1) - (1)].fval)); if(! e) { libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); @@ -1762,14 +1746,13 @@ yyreduce: break; case 31: - -/* Line 1806 of yacc.c */ -#line 331 "grammar.y" +/* Line 1802 of yacc.c */ +#line 332 "grammar.y" { 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) @@ -1792,9 +1775,8 @@ yyreduce: break; case 42: - -/* Line 1806 of yacc.c */ -#line 387 "grammar.y" +/* Line 1802 of yacc.c */ +#line 388 "grammar.y" { if(IN_LIST()) { @@ -1811,9 +1793,8 @@ yyreduce: break; case 43: - -/* Line 1806 of yacc.c */ -#line 402 "grammar.y" +/* Line 1802 of yacc.c */ +#line 403 "grammar.y" { if(ctx->parent) ctx->parent = ctx->parent->parent; @@ -1821,9 +1802,8 @@ yyreduce: break; - -/* Line 1806 of yacc.c */ -#line 1829 "grammar.c" +/* Line 1802 of yacc.c */ +#line 1809 "grammar.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -1986,7 +1966,9 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ @@ -2010,7 +1992,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#if !defined(yyoverflow) || YYERROR_VERBOSE +#if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -2052,8 +2034,6 @@ yyreturn: } - -/* Line 2067 of yacc.c */ -#line 408 "grammar.y" - +/* Line 2050 of yacc.c */ +#line 409 "grammar.y" diff --git a/3rdparty/libconfig/grammar.h b/3rdparty/libconfig/grammar.h index d7fd02cc8..86b7b65cd 100644 --- a/3rdparty/libconfig/grammar.h +++ b/3rdparty/libconfig/grammar.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 2.5. */ +/* A Bison parser, made by GNU Bison 2.7.12-4996. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,6 +30,15 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ +#ifndef YY_LIBCONFIG_YY_GRAMMAR_H_INCLUDED +# define YY_LIBCONFIG_YY_GRAMMAR_H_INCLUDED +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int libconfig_yydebug; +#endif /* Tokens. */ #ifndef YYTOKENTYPE @@ -83,13 +92,11 @@ - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { - -/* Line 2068 of yacc.c */ -#line 85 "grammar.y" +/* Line 2060 of yacc.c */ +#line 86 "grammar.y" int ival; long long llval; @@ -97,9 +104,8 @@ typedef union YYSTYPE char *sval; - -/* Line 2068 of yacc.c */ -#line 103 "grammar.h" +/* Line 2060 of yacc.c */ +#line 109 "grammar.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -107,5 +113,18 @@ typedef union YYSTYPE #endif +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int libconfig_yyparse (void *YYPARSE_PARAM); +#else +int libconfig_yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int libconfig_yyparse (void *scanner, struct parse_context *ctx, struct scan_context *scan_ctx); +#else +int libconfig_yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ - +#endif /* !YY_LIBCONFIG_YY_GRAMMAR_H_INCLUDED */ diff --git a/3rdparty/libconfig/libconfig-1.4.9 b/3rdparty/libconfig/libconfig-1.4.9 deleted file mode 100644 index e69de29bb..000000000 --- a/3rdparty/libconfig/libconfig-1.4.9 +++ /dev/null diff --git a/3rdparty/libconfig/libconfig-1.5 b/3rdparty/libconfig/libconfig-1.5 new file mode 100644 index 000000000..bf5328dcd --- /dev/null +++ b/3rdparty/libconfig/libconfig-1.5 @@ -0,0 +1,2 @@ +Based on https://github.com/hyperrealm/libconfig/releases/tag/v1.5 +f9f23d7a95608936ea7d839731dbd56f1667b7ed diff --git a/3rdparty/libconfig/libconfig.c b/3rdparty/libconfig/libconfig.c index 3d03ede9a..0942241c2 100644 --- a/3rdparty/libconfig/libconfig.c +++ b/3rdparty/libconfig/libconfig.c @@ -1,7 +1,7 @@ /* ---------------------------------------------------------------------------- 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. @@ -24,56 +24,56 @@ #include "ac_config.h" #endif -#include "libconfig.h" -#include "grammar.h" -#include "scanner.h" -#include "scanctx.h" -#include "parsectx.h" -#include "wincompat.h" - #include <locale.h> #ifdef HAVE_XLOCALE_H #include <xlocale.h> #endif +#include <ctype.h> +#include <float.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> -#include <ctype.h> +#include <sys/stat.h> +#include <sys/types.h> + +#include "libconfig.h" +#include "parsectx.h" +#include "scanctx.h" +#include "wincompat.h" +#include "grammar.h" +#include "scanner.h" #define PATH_TOKENS ":/" #define CHUNK_SIZE 16 -#define FLOAT_PRECISION 10 +#define FLOAT_PRECISION DBL_DIG -#define _new(T) (T *)calloc(sizeof(T), 1) /* zeroed */ +#define _new(T) (T *)calloc(1, sizeof(T)) /* zeroed */ #define _delete(P) free((void *)(P)) /* ------------------------------------------------------------------------- */ #ifndef LIBCONFIG_STATIC -#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) +#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__) \ + || defined(WIN64) || defined(_WIN64)) BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { return(TRUE); } -#endif /* WIN32 */ +#endif /* WIN32 || WIN64 */ #endif /* LIBCONFIG_STATIC */ /* ------------------------------------------------------------------------- */ static const char *__io_error = "file I/O error"; -static void __config_list_destroy(config_list_t *list); -static void __config_write_setting(const config_setting_t *setting, - FILE *stream, int depth, - unsigned short tab_width); - -extern int libconfig_yyparse(void *scanner, struct parse_context *ctx, - struct scan_context *scan_ctx); -extern int libconfig_yylex_init_extra(struct scan_context *scan_ctx, - yyscan_t *scanner); +static void __config_list_destroy(struct config_list_t *list); +static void __config_write_setting(const struct config_t *config, + const struct config_setting_t *setting, + FILE *stream, int depth); /* ------------------------------------------------------------------------- */ @@ -106,6 +106,11 @@ static void __config_locale_override(void) /* ------------------------------------------------------------------------- */ +#define __config_has_option(C, O) \ + (((C)->options & (O)) != 0) + +/* ------------------------------------------------------------------------- */ + static void __config_locale_restore(void) { #if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) \ @@ -169,9 +174,9 @@ static void __config_indent(FILE *stream, int depth, unsigned short w) /* ------------------------------------------------------------------------- */ -static void __config_write_value(const config_value_t *value, int type, - int format, int depth, - unsigned short tab_width, FILE *stream) +static void __config_write_value(const struct config_t *config, + const union config_value_t *value, int type, + int format, int depth, FILE *stream) { char fbuf[64]; @@ -297,20 +302,20 @@ static void __config_write_value(const config_value_t *value, int type, /* list */ case CONFIG_TYPE_LIST: { - config_list_t *list = value->list; + struct config_list_t *list = value->list; fprintf(stream, "( "); if(list) { int len = list->length; - config_setting_t **s; + struct config_setting_t **s; for(s = list->elements; len--; s++) { - __config_write_value(&((*s)->value), (*s)->type, - config_setting_get_format(*s), - depth + 1, tab_width, stream); + __config_write_value(config, &((*s)->value), (*s)->type, + config_setting_get_format(*s), depth + 1, + stream); if(len) fputc(',', stream); @@ -326,20 +331,20 @@ static void __config_write_value(const config_value_t *value, int type, /* array */ case CONFIG_TYPE_ARRAY: { - config_list_t *list = value->list; + struct config_list_t *list = value->list; fprintf(stream, "[ "); if(list) { int len = list->length; - config_setting_t **s; + struct config_setting_t **s; for(s = list->elements; len--; s++) { - __config_write_value(&((*s)->value), (*s)->type, - config_setting_get_format(*s), - depth + 1, tab_width, stream); + __config_write_value(config, &((*s)->value), (*s)->type, + config_setting_get_format(*s), depth + 1, + stream); if(len) fputc(',', stream); @@ -355,32 +360,32 @@ static void __config_write_value(const config_value_t *value, int type, /* group */ case CONFIG_TYPE_GROUP: { - config_list_t *list = value->list; + struct config_list_t *list = value->list; if(depth > 0) { -#ifdef K_AND_R_STYLE /* Horrendous, but many people like it. */ - fputc(' ', stream); -#else - fputc('\n', stream); + if((config->options & CONFIG_OPTION_OPEN_BRACE_ON_SEPARATE_LINE) != 0) + { + fputc('\n', stream); + + if(depth > 1) + __config_indent(stream, depth, config->tab_width); + } - if(depth > 1) - __config_indent(stream, depth, tab_width); -#endif fprintf(stream, "{\n"); } if(list) { int len = list->length; - config_setting_t **s; + struct config_setting_t **s; for(s = list->elements; len--; s++) - __config_write_setting(*s, stream, depth + 1, tab_width); + __config_write_setting(config, *s, stream, depth + 1); } if(depth > 1) - __config_indent(stream, depth, tab_width); + __config_indent(stream, depth, config->tab_width); if(depth > 0) fputc('}', stream); @@ -397,13 +402,13 @@ static void __config_write_value(const config_value_t *value, int type, /* ------------------------------------------------------------------------- */ -static void __config_list_add(config_list_t *list, config_setting_t *setting) +static void __config_list_add(struct config_list_t *list, struct config_setting_t *setting) { if((list->length % CHUNK_SIZE) == 0) { - list->elements = (config_setting_t **)realloc( + list->elements = (struct config_setting_t **)realloc( list->elements, - (list->length + CHUNK_SIZE) * sizeof(config_setting_t *)); + (list->length + CHUNK_SIZE) * sizeof(struct config_setting_t *)); } list->elements[list->length] = setting; @@ -412,11 +417,11 @@ static void __config_list_add(config_list_t *list, config_setting_t *setting) /* ------------------------------------------------------------------------- */ -static config_setting_t *__config_list_search(config_list_t *list, +static struct config_setting_t *__config_list_search(struct config_list_t *list, const char *name, unsigned int *idx) { - config_setting_t **found = NULL; + struct config_setting_t **found = NULL; unsigned int i; if(! list) @@ -441,15 +446,15 @@ static config_setting_t *__config_list_search(config_list_t *list, /* ------------------------------------------------------------------------- */ -static config_setting_t *__config_list_remove(config_list_t *list, int idx) +static struct config_setting_t *__config_list_remove(struct config_list_t *list, int idx) { - config_setting_t *removed = *(list->elements + idx); - int offset = (idx * sizeof(config_setting_t *)); + struct config_setting_t *removed = *(list->elements + idx); + int offset = (idx * sizeof(struct config_setting_t *)); int len = list->length - 1 - idx; char *base = (char *)list->elements + offset; - memmove(base, base + sizeof(config_setting_t *), - len * sizeof(config_setting_t *)); + memmove(base, base + sizeof(struct config_setting_t *), + len * sizeof(struct config_setting_t *)); list->length--; @@ -460,7 +465,7 @@ static config_setting_t *__config_list_remove(config_list_t *list, int idx) /* ------------------------------------------------------------------------- */ -static void __config_setting_destroy(config_setting_t *setting) +static void __config_setting_destroy(struct config_setting_t *setting) { if(setting) { @@ -487,9 +492,9 @@ static void __config_setting_destroy(config_setting_t *setting) /* ------------------------------------------------------------------------- */ -static void __config_list_destroy(config_list_t *list) +static void __config_list_destroy(struct config_list_t *list) { - config_setting_t **p; + struct config_setting_t **p; unsigned int i; if(! list) @@ -508,7 +513,7 @@ static void __config_list_destroy(config_list_t *list) /* ------------------------------------------------------------------------- */ -static int __config_vector_checktype(const config_setting_t *vector, int type) +static int __config_vector_checktype(const struct config_setting_t *vector, int type) { /* if the array is empty, then it has no type yet */ @@ -538,9 +543,8 @@ static int __config_validate_name(const char *name) if(*p == '\0') return(CONFIG_FALSE); - if(! isalpha((int)*p) && !isdigit((int)*p) && (*p != '*')) { + if(! isalpha((int)*p) && !isdigit((int)*p) && (*p != '*')) return(CONFIG_FALSE); - } for(++p; *p; ++p) { @@ -553,20 +557,19 @@ static int __config_validate_name(const char *name) /* ------------------------------------------------------------------------- */ -static int __config_read(config_t *config, FILE *stream, const char *filename, +static int __config_read(struct config_t *config, FILE *stream, const char *filename, const char *str) { yyscan_t scanner; struct scan_context scan_ctx; struct parse_context parse_ctx; - /*YY_BUFFER_STATE buffer = NULL;*/ int r; /* Reinitialize the config */ void (*destructor)(void *) = config->destructor; const char *include_dir = config->include_dir; unsigned short tab_width = config->tab_width; - unsigned short flags = config->flags; + int options = config->options; config->include_dir = NULL; config_destroy(config); @@ -575,7 +578,7 @@ static int __config_read(config_t *config, FILE *stream, const char *filename, config->destructor = destructor; config->include_dir = include_dir; config->tab_width = tab_width; - config->flags = flags; + config->options = options; parsectx_init(&parse_ctx); parse_ctx.config = config; @@ -585,13 +588,14 @@ static int __config_read(config_t *config, FILE *stream, const char *filename, __config_locale_override(); scanctx_init(&scan_ctx, filename); + config->root->file = scanctx_current_filename(&scan_ctx); scan_ctx.config = config; libconfig_yylex_init_extra(&scan_ctx, &scanner); if(stream) libconfig_yyrestart(stream, scanner); else /* read from string */ - /*buffer = */libconfig_yy_scan_string(str, scanner); + (void)libconfig_yy_scan_string(str, scanner); libconfig_yyset_lineno(1, scanner); r = libconfig_yyparse(scanner, &parse_ctx, &scan_ctx); @@ -619,63 +623,91 @@ static int __config_read(config_t *config, FILE *stream, const char *filename, /* ------------------------------------------------------------------------- */ -int config_read(config_t *config, FILE *stream) +int config_read(struct config_t *config, FILE *stream) { return(__config_read(config, stream, NULL, NULL)); } /* ------------------------------------------------------------------------- */ -int config_read_string(config_t *config, const char *str) +int config_read_string(struct config_t *config, const char *str) { return(__config_read(config, NULL, NULL, str)); } /* ------------------------------------------------------------------------- */ -static void __config_write_setting(const config_setting_t *setting, - FILE *stream, int depth, - unsigned short tab_width) +static void __config_write_setting(const struct config_t *config, + const struct config_setting_t *setting, + FILE *stream, int depth) { + char group_assign_char = __config_has_option( + config, CONFIG_OPTION_COLON_ASSIGNMENT_FOR_GROUPS) ? ':' : '='; + + char nongroup_assign_char = __config_has_option( + config, CONFIG_OPTION_COLON_ASSIGNMENT_FOR_NON_GROUPS) ? ':' : '='; + if(depth > 1) - __config_indent(stream, depth, tab_width); + __config_indent(stream, depth, config->tab_width); + if(setting->name) { fputs(setting->name, stream); - fprintf(stream, " %c ", (setting->type == CONFIG_TYPE_GROUP ? ':' : '=')); + fprintf(stream, " %c ", ((setting->type == CONFIG_TYPE_GROUP) + ? group_assign_char + : nongroup_assign_char)); } - __config_write_value(&(setting->value), setting->type, - config_setting_get_format(setting), - depth, tab_width, stream); + __config_write_value(config, &(setting->value), setting->type, + config_setting_get_format(setting), depth, stream); if(depth > 0) { - fputc(';', stream); + if(__config_has_option(config, CONFIG_OPTION_SEMICOLON_SEPARATORS)) + fputc(';', stream); + fputc('\n', stream); } } /* ------------------------------------------------------------------------- */ -void config_write(const config_t *config, FILE *stream) +void config_write(const struct config_t *config, FILE *stream) { __config_locale_override(); - __config_write_setting(config->root, stream, 0, config->tab_width); + __config_write_setting(config, config->root, stream, 0); __config_locale_restore(); } /* ------------------------------------------------------------------------- */ -int config_read_file(config_t *config, const char *filename) +int config_read_file(struct config_t *config, const char *filename) { - int ret; + int ret, ok = 0; + FILE *stream = fopen(filename, "rt"); - if(! stream) + if(stream != NULL) + { + // On some operating systems, fopen() succeeds on a directory. + int fd = fileno(stream); + struct stat statbuf; + + if(fstat(fd, &statbuf) == 0) + { + // Only proceed if this is not a directory. + if(!S_ISDIR(statbuf.st_mode)) + ok = 1; + } + } + + if(!ok) { + if(stream != NULL) + fclose(stream); + config->error_text = __io_error; config->error_type = CONFIG_ERR_FILE_IO; return(CONFIG_FALSE); @@ -689,25 +721,26 @@ int config_read_file(config_t *config, const char *filename) /* ------------------------------------------------------------------------- */ -int config_write_file(config_t *config, const char *filename) +int config_write_file(struct config_t *config, const char *filename) { - FILE *f = fopen(filename, "wt"); - if(! f) + FILE *stream = fopen(filename, "wt"); + if(stream == NULL) { config->error_text = __io_error; config->error_type = CONFIG_ERR_FILE_IO; + config->error_file = filename; return(CONFIG_FALSE); } - config_write(config, f); - fclose(f); + config_write(config, stream); + fclose(stream); config->error_type = CONFIG_ERR_NONE; return(CONFIG_TRUE); } /* ------------------------------------------------------------------------- */ -void config_destroy(config_t *config) +void config_destroy(struct config_t *config) { unsigned int count = config->num_filenames; const char **f; @@ -720,52 +753,69 @@ void config_destroy(config_t *config) _delete(config->filenames); _delete(config->include_dir); - memset((void *)config, 0, sizeof(config_t)); + memset((void *)config, 0, sizeof(struct config_t)); } /* ------------------------------------------------------------------------- */ -void config_init(config_t *config) +void config_init(struct config_t *config) { - memset((void *)config, 0, sizeof(config_t)); + memset((void *)config, 0, sizeof(struct config_t)); - config->root = _new(config_setting_t); + config->root = _new(struct config_setting_t); config->root->type = CONFIG_TYPE_GROUP; config->root->config = config; + config->options = (CONFIG_OPTION_SEMICOLON_SEPARATORS + | CONFIG_OPTION_COLON_ASSIGNMENT_FOR_GROUPS + | CONFIG_OPTION_OPEN_BRACE_ON_SEPARATE_LINE); config->tab_width = 2; } /* ------------------------------------------------------------------------- */ -void config_set_auto_convert(config_t *config, int flag) +void config_set_auto_convert(struct config_t *config, int flag) { if(flag) - config->flags |= CONFIG_OPTION_AUTOCONVERT; + config->options |= CONFIG_OPTION_AUTOCONVERT; else - config->flags &= ~CONFIG_OPTION_AUTOCONVERT; + config->options &= ~CONFIG_OPTION_AUTOCONVERT; +} + +/* ------------------------------------------------------------------------- */ + +int config_get_auto_convert(const struct config_t *config) +{ + return(__config_has_option(config, CONFIG_OPTION_AUTOCONVERT)); +} + +/* ------------------------------------------------------------------------- */ + +void config_set_options(struct config_t *config, int options) +{ + config->options = options; } /* ------------------------------------------------------------------------- */ -int config_get_auto_convert(const config_t *config) +int config_get_options(const struct config_t *config) { - return((config->flags & CONFIG_OPTION_AUTOCONVERT) != 0); + return(config->options); } /* ------------------------------------------------------------------------- */ -static config_setting_t *config_setting_create(config_setting_t *parent, +static struct config_setting_t *config_setting_create(struct config_setting_t *parent, const char *name, int type) { - config_setting_t *setting; - config_list_t *list; + struct config_setting_t *setting; + struct config_list_t *list; if((parent->type != CONFIG_TYPE_GROUP) && (parent->type != CONFIG_TYPE_ARRAY) && (parent->type != CONFIG_TYPE_LIST)) return(NULL); - setting = _new(config_setting_t); + setting = _new(struct config_setting_t); setting->parent = parent; setting->name = (name == NULL) ? NULL : strdup(name); setting->type = type; @@ -776,7 +826,7 @@ static config_setting_t *config_setting_create(config_setting_t *parent, list = parent->value.list; if(! list) - list = parent->value.list = _new(config_list_t); + list = parent->value.list = _new(struct config_list_t); __config_list_add(list, setting); @@ -785,7 +835,7 @@ static config_setting_t *config_setting_create(config_setting_t *parent, /* ------------------------------------------------------------------------- */ -static int __config_setting_get_int(const config_setting_t *setting, +static int __config_setting_get_int(const struct config_setting_t *setting, int *value) { switch(setting->type) @@ -803,7 +853,7 @@ static int __config_setting_get_int(const config_setting_t *setting, return(CONFIG_TRUE); case CONFIG_TYPE_FLOAT: - if((setting->config->flags & CONFIG_OPTION_AUTOCONVERT) != 0) + if(__config_has_option(setting->config, CONFIG_OPTION_AUTOCONVERT)) { *value = (int)(setting->value.fval); return(CONFIG_TRUE); @@ -818,7 +868,7 @@ static int __config_setting_get_int(const config_setting_t *setting, /* ------------------------------------------------------------------------- */ -int config_setting_get_int(const config_setting_t *setting) +int config_setting_get_int(const struct config_setting_t *setting) { int value = 0; __config_setting_get_int(setting, &value); @@ -827,7 +877,7 @@ int config_setting_get_int(const config_setting_t *setting) /* ------------------------------------------------------------------------- */ -static int __config_setting_get_int64(const config_setting_t *setting, +static int __config_setting_get_int64(const struct config_setting_t *setting, long long *value) { switch(setting->type) @@ -841,7 +891,7 @@ static int __config_setting_get_int64(const config_setting_t *setting, return(CONFIG_TRUE); case CONFIG_TYPE_FLOAT: - if((setting->config->flags & CONFIG_OPTION_AUTOCONVERT) != 0) + if(__config_has_option(setting->config, CONFIG_OPTION_AUTOCONVERT)) { *value = (long long)(setting->value.fval); return(CONFIG_TRUE); @@ -856,7 +906,7 @@ static int __config_setting_get_int64(const config_setting_t *setting, /* ------------------------------------------------------------------------- */ -long long config_setting_get_int64(const config_setting_t *setting) +long long config_setting_get_int64(const struct config_setting_t *setting) { long long value = 0; __config_setting_get_int64(setting, &value); @@ -865,10 +915,10 @@ long long config_setting_get_int64(const config_setting_t *setting) /* ------------------------------------------------------------------------- */ -int config_setting_lookup_int(const config_setting_t *setting, +int config_setting_lookup_int(const struct config_setting_t *setting, const char *name, int *value) { - config_setting_t *member = config_setting_get_member(setting, name); + struct config_setting_t *member = config_setting_get_member(setting, name); if(! member) return(CONFIG_FALSE); @@ -877,10 +927,10 @@ int config_setting_lookup_int(const config_setting_t *setting, /* ------------------------------------------------------------------------- */ -int config_setting_lookup_int64(const config_setting_t *setting, +int config_setting_lookup_int64(const struct config_setting_t *setting, const char *name, long long *value) { - config_setting_t *member = config_setting_get_member(setting, name); + struct config_setting_t *member = config_setting_get_member(setting, name); if(! member) return(CONFIG_FALSE); @@ -889,7 +939,7 @@ int config_setting_lookup_int64(const config_setting_t *setting, /* ------------------------------------------------------------------------- */ -static int __config_setting_get_float(const config_setting_t *setting, +static int __config_setting_get_float(const struct config_setting_t *setting, double *value) { switch(setting->type) @@ -923,7 +973,7 @@ static int __config_setting_get_float(const config_setting_t *setting, /* ------------------------------------------------------------------------- */ -double config_setting_get_float(const config_setting_t *setting) +double config_setting_get_float(const struct config_setting_t *setting) { double value = 0.0; __config_setting_get_float(setting, &value); @@ -932,10 +982,10 @@ double config_setting_get_float(const config_setting_t *setting) /* ------------------------------------------------------------------------- */ -int config_setting_lookup_float(const config_setting_t *setting, +int config_setting_lookup_float(const struct config_setting_t *setting, const char *name, double *value) { - config_setting_t *member = config_setting_get_member(setting, name); + struct config_setting_t *member = config_setting_get_member(setting, name); if(! member) return(CONFIG_FALSE); @@ -944,10 +994,10 @@ int config_setting_lookup_float(const config_setting_t *setting, /* ------------------------------------------------------------------------- */ -int config_setting_lookup_string(const config_setting_t *setting, +int config_setting_lookup_string(const struct config_setting_t *setting, const char *name, const char **value) { - config_setting_t *member = config_setting_get_member(setting, name); + struct config_setting_t *member = config_setting_get_member(setting, name); if(! member) return(CONFIG_FALSE); @@ -960,10 +1010,10 @@ int config_setting_lookup_string(const config_setting_t *setting, /* ------------------------------------------------------------------------- */ -int config_setting_lookup_bool(const config_setting_t *setting, +int config_setting_lookup_bool(const struct config_setting_t *setting, const char *name, int *value) { - config_setting_t *member = config_setting_get_member(setting, name); + struct config_setting_t *member = config_setting_get_member(setting, name); if(! member) return(CONFIG_FALSE); @@ -976,7 +1026,7 @@ int config_setting_lookup_bool(const config_setting_t *setting, /* ------------------------------------------------------------------------- */ -int config_setting_set_int(config_setting_t *setting, int value) +int config_setting_set_int(struct config_setting_t *setting, int value) { switch(setting->type) { @@ -1004,7 +1054,7 @@ int config_setting_set_int(config_setting_t *setting, int value) /* ------------------------------------------------------------------------- */ -int config_setting_set_int64(config_setting_t *setting, long long value) +int config_setting_set_int64(struct config_setting_t *setting, long long value) { switch(setting->type) { @@ -1039,7 +1089,7 @@ int config_setting_set_int64(config_setting_t *setting, long long value) /* ------------------------------------------------------------------------- */ -int config_setting_set_float(config_setting_t *setting, double value) +int config_setting_set_float(struct config_setting_t *setting, double value) { switch(setting->type) { @@ -1052,7 +1102,7 @@ int config_setting_set_float(config_setting_t *setting, double value) return(CONFIG_TRUE); case CONFIG_TYPE_INT: - if((setting->config->flags & CONFIG_OPTION_AUTOCONVERT) != 0) + if(__config_has_option(setting->config, CONFIG_OPTION_AUTOCONVERT)) { setting->value.ival = (int)value; return(CONFIG_TRUE); @@ -1061,7 +1111,7 @@ int config_setting_set_float(config_setting_t *setting, double value) return(CONFIG_FALSE); case CONFIG_TYPE_INT64: - if((setting->config->flags & CONFIG_OPTION_AUTOCONVERT) != 0) + if(__config_has_option(setting->config, CONFIG_OPTION_AUTOCONVERT)) { setting->value.llval = (long long)value; return(CONFIG_TRUE); @@ -1076,14 +1126,14 @@ int config_setting_set_float(config_setting_t *setting, double value) /* ------------------------------------------------------------------------- */ -int config_setting_get_bool(const config_setting_t *setting) +int config_setting_get_bool(const struct config_setting_t *setting) { return((setting->type == CONFIG_TYPE_BOOL) ? setting->value.ival : 0); } /* ------------------------------------------------------------------------- */ -int config_setting_set_bool(config_setting_t *setting, int value) +int config_setting_set_bool(struct config_setting_t *setting, int value) { if(setting->type == CONFIG_TYPE_NONE) setting->type = CONFIG_TYPE_BOOL; @@ -1096,14 +1146,14 @@ int config_setting_set_bool(config_setting_t *setting, int value) /* ------------------------------------------------------------------------- */ -const char *config_setting_get_string(const config_setting_t *setting) +const char *config_setting_get_string(const struct config_setting_t *setting) { return((setting->type == CONFIG_TYPE_STRING) ? setting->value.sval : NULL); } /* ------------------------------------------------------------------------- */ -int config_setting_set_string(config_setting_t *setting, const char *value) +int config_setting_set_string(struct config_setting_t *setting, const char *value) { if(setting->type == CONFIG_TYPE_NONE) setting->type = CONFIG_TYPE_STRING; @@ -1119,7 +1169,7 @@ int config_setting_set_string(config_setting_t *setting, const char *value) /* ------------------------------------------------------------------------- */ -int config_setting_set_format(config_setting_t *setting, short format) +int config_setting_set_format(struct config_setting_t *setting, short format) { if(((setting->type != CONFIG_TYPE_INT) && (setting->type != CONFIG_TYPE_INT64)) @@ -1133,7 +1183,7 @@ int config_setting_set_format(config_setting_t *setting, short format) /* ------------------------------------------------------------------------- */ -short config_setting_get_format(const config_setting_t *setting) +short config_setting_get_format(const struct config_setting_t *setting) { return(setting->format != 0 ? setting->format : setting->config->default_format); @@ -1141,11 +1191,11 @@ short config_setting_get_format(const config_setting_t *setting) /* ------------------------------------------------------------------------- */ -config_setting_t *config_lookup_from(config_setting_t *setting, - const char *path) +struct config_setting_t *config_setting_lookup(struct config_setting_t *setting, + const char *path) { const char *p = path; - config_setting_t *found; + struct config_setting_t *found; for(;;) { @@ -1174,17 +1224,17 @@ config_setting_t *config_lookup_from(config_setting_t *setting, /* ------------------------------------------------------------------------- */ -config_setting_t *config_lookup(const config_t *config, const char *path) +struct config_setting_t *config_lookup(const struct config_t *config, const char *path) { - return(config_lookup_from(config->root, path)); + return(config_setting_lookup(config->root, path)); } /* ------------------------------------------------------------------------- */ -int config_lookup_string(const config_t *config, const char *path, +int config_lookup_string(const struct config_t *config, const char *path, const char **value) { - const config_setting_t *s = config_lookup(config, path); + const struct config_setting_t *s = config_lookup(config, path); if(! s) return(CONFIG_FALSE); @@ -1198,10 +1248,10 @@ int config_lookup_string(const config_t *config, const char *path, /* ------------------------------------------------------------------------- */ -int config_lookup_int(const config_t *config, const char *path, +int config_lookup_int(const struct config_t *config, const char *path, int *value) { - const config_setting_t *s = config_lookup(config, path); + const struct config_setting_t *s = config_lookup(config, path); if(! s) return(CONFIG_FALSE); @@ -1210,10 +1260,10 @@ int config_lookup_int(const config_t *config, const char *path, /* ------------------------------------------------------------------------- */ -int config_lookup_int64(const config_t *config, const char *path, +int config_lookup_int64(const struct config_t *config, const char *path, long long *value) { - const config_setting_t *s = config_lookup(config, path); + const struct config_setting_t *s = config_lookup(config, path); if(! s) return(CONFIG_FALSE); @@ -1222,10 +1272,10 @@ int config_lookup_int64(const config_t *config, const char *path, /* ------------------------------------------------------------------------- */ -int config_lookup_float(const config_t *config, const char *path, +int config_lookup_float(const struct config_t *config, const char *path, double *value) { - const config_setting_t *s = config_lookup(config, path); + const struct config_setting_t *s = config_lookup(config, path); if(! s) return(CONFIG_FALSE); @@ -1234,9 +1284,9 @@ int config_lookup_float(const config_t *config, const char *path, /* ------------------------------------------------------------------------- */ -int config_lookup_bool(const config_t *config, const char *path, int *value) +int config_lookup_bool(const struct config_t *config, const char *path, int *value) { - const config_setting_t *s = config_lookup(config, path); + const struct config_setting_t *s = config_lookup(config, path); if(! s) return(CONFIG_FALSE); @@ -1249,19 +1299,19 @@ int config_lookup_bool(const config_t *config, const char *path, int *value) /* ------------------------------------------------------------------------- */ -int config_setting_get_int_elem(const config_setting_t *vector, int idx) +int config_setting_get_int_elem(const struct config_setting_t *vector, int idx) { - const config_setting_t *element = config_setting_get_elem(vector, idx); + const struct config_setting_t *element = config_setting_get_elem(vector, idx); return(element ? config_setting_get_int(element) : 0); } /* ------------------------------------------------------------------------- */ -config_setting_t *config_setting_set_int_elem(config_setting_t *vector, +struct config_setting_t *config_setting_set_int_elem(struct config_setting_t *vector, int idx, int value) { - config_setting_t *element = NULL; + struct config_setting_t *element = NULL; if((vector->type != CONFIG_TYPE_ARRAY) && (vector->type != CONFIG_TYPE_LIST)) return(NULL); @@ -1289,20 +1339,20 @@ config_setting_t *config_setting_set_int_elem(config_setting_t *vector, /* ------------------------------------------------------------------------- */ -long long config_setting_get_int64_elem(const config_setting_t *vector, +long long config_setting_get_int64_elem(const struct config_setting_t *vector, int idx) { - const config_setting_t *element = config_setting_get_elem(vector, idx); + const struct config_setting_t *element = config_setting_get_elem(vector, idx); return(element ? config_setting_get_int64(element) : 0); } /* ------------------------------------------------------------------------- */ -config_setting_t *config_setting_set_int64_elem(config_setting_t *vector, +struct config_setting_t *config_setting_set_int64_elem(struct config_setting_t *vector, int idx, long long value) { - config_setting_t *element = NULL; + struct config_setting_t *element = NULL; if((vector->type != CONFIG_TYPE_ARRAY) && (vector->type != CONFIG_TYPE_LIST)) return(NULL); @@ -1330,19 +1380,19 @@ config_setting_t *config_setting_set_int64_elem(config_setting_t *vector, /* ------------------------------------------------------------------------- */ -double config_setting_get_float_elem(const config_setting_t *vector, int idx) +double config_setting_get_float_elem(const struct config_setting_t *vector, int idx) { - config_setting_t *element = config_setting_get_elem(vector, idx); + struct config_setting_t *element = config_setting_get_elem(vector, idx); return(element ? config_setting_get_float(element) : 0.0); } /* ------------------------------------------------------------------------- */ -config_setting_t *config_setting_set_float_elem(config_setting_t *vector, +struct config_setting_t *config_setting_set_float_elem(struct config_setting_t *vector, int idx, double value) { - config_setting_t *element = NULL; + struct config_setting_t *element = NULL; if((vector->type != CONFIG_TYPE_ARRAY) && (vector->type != CONFIG_TYPE_LIST)) return(NULL); @@ -1368,9 +1418,9 @@ config_setting_t *config_setting_set_float_elem(config_setting_t *vector, /* ------------------------------------------------------------------------- */ -int config_setting_get_bool_elem(const config_setting_t *vector, int idx) +int config_setting_get_bool_elem(const struct config_setting_t *vector, int idx) { - config_setting_t *element = config_setting_get_elem(vector, idx); + struct config_setting_t *element = config_setting_get_elem(vector, idx); if(! element) return(CONFIG_FALSE); @@ -1383,10 +1433,10 @@ int config_setting_get_bool_elem(const config_setting_t *vector, int idx) /* ------------------------------------------------------------------------- */ -config_setting_t *config_setting_set_bool_elem(config_setting_t *vector, +struct config_setting_t *config_setting_set_bool_elem(struct config_setting_t *vector, int idx, int value) { - config_setting_t *element = NULL; + struct config_setting_t *element = NULL; if((vector->type != CONFIG_TYPE_ARRAY) && (vector->type != CONFIG_TYPE_LIST)) return(NULL); @@ -1412,10 +1462,10 @@ config_setting_t *config_setting_set_bool_elem(config_setting_t *vector, /* ------------------------------------------------------------------------- */ -const char *config_setting_get_string_elem(const config_setting_t *vector, +const char *config_setting_get_string_elem(const struct config_setting_t *vector, int idx) { - config_setting_t *element = config_setting_get_elem(vector, idx); + struct config_setting_t *element = config_setting_get_elem(vector, idx); if(! element) return(NULL); @@ -1428,10 +1478,10 @@ const char *config_setting_get_string_elem(const config_setting_t *vector, /* ------------------------------------------------------------------------- */ -config_setting_t *config_setting_set_string_elem(config_setting_t *vector, +struct config_setting_t *config_setting_set_string_elem(struct config_setting_t *vector, int idx, const char *value) { - config_setting_t *element = NULL; + struct config_setting_t *element = NULL; if((vector->type != CONFIG_TYPE_ARRAY) && (vector->type != CONFIG_TYPE_LIST)) return(NULL); @@ -1457,10 +1507,10 @@ config_setting_t *config_setting_set_string_elem(config_setting_t *vector, /* ------------------------------------------------------------------------- */ -config_setting_t *config_setting_get_elem(const config_setting_t *vector, +struct config_setting_t *config_setting_get_elem(const struct config_setting_t *vector, unsigned int idx) { - config_list_t *list = vector->value.list; + struct config_list_t *list = vector->value.list; if(((vector->type != CONFIG_TYPE_ARRAY) && (vector->type != CONFIG_TYPE_LIST) @@ -1475,7 +1525,7 @@ config_setting_t *config_setting_get_elem(const config_setting_t *vector, /* ------------------------------------------------------------------------- */ -config_setting_t *config_setting_get_member(const config_setting_t *setting, +struct config_setting_t *config_setting_get_member(const struct config_setting_t *setting, const char *name) { if(setting->type != CONFIG_TYPE_GROUP) @@ -1486,14 +1536,14 @@ config_setting_t *config_setting_get_member(const config_setting_t *setting, /* ------------------------------------------------------------------------- */ -void config_set_destructor(config_t *config, void (*destructor)(void *)) +void config_set_destructor(struct config_t *config, void (*destructor)(void *)) { config->destructor = destructor; } /* ------------------------------------------------------------------------- */ -void config_set_include_dir(config_t *config, const char *include_dir) +void config_set_include_dir(struct config_t *config, const char *include_dir) { _delete(config->include_dir); config->include_dir = strdup(include_dir); @@ -1501,7 +1551,7 @@ void config_set_include_dir(config_t *config, const char *include_dir) /* ------------------------------------------------------------------------- */ -int config_setting_length(const config_setting_t *setting) +int config_setting_length(const struct config_setting_t *setting) { if((setting->type != CONFIG_TYPE_GROUP) && (setting->type != CONFIG_TYPE_ARRAY) @@ -1516,14 +1566,14 @@ int config_setting_length(const config_setting_t *setting) /* ------------------------------------------------------------------------- */ -void config_setting_set_hook(config_setting_t *setting, void *hook) +void config_setting_set_hook(struct config_setting_t *setting, void *hook) { setting->hook = hook; } /* ------------------------------------------------------------------------- */ -config_setting_t *config_setting_add(config_setting_t *parent, +struct config_setting_t *config_setting_add(struct config_setting_t *parent, const char *name, int type) { if((type < CONFIG_TYPE_NONE) || (type > CONFIG_TYPE_LIST)) @@ -1558,10 +1608,10 @@ config_setting_t *config_setting_add(config_setting_t *parent, /* ------------------------------------------------------------------------- */ -int config_setting_remove(config_setting_t *parent, const char *name) +int config_setting_remove(struct config_setting_t *parent, const char *name) { unsigned int idx; - config_setting_t *setting; + struct config_setting_t *setting; if(! parent) return(CONFIG_FALSE); @@ -1580,10 +1630,10 @@ int config_setting_remove(config_setting_t *parent, const char *name) /* ------------------------------------------------------------------------- */ -int config_setting_remove_elem(config_setting_t *parent, unsigned int idx) +int config_setting_remove_elem(struct config_setting_t *parent, unsigned int idx) { - config_list_t *list; - config_setting_t *removed = NULL; + struct config_list_t *list; + struct config_setting_t *removed = NULL; if(! parent) return(CONFIG_FALSE); @@ -1606,10 +1656,10 @@ int config_setting_remove_elem(config_setting_t *parent, unsigned int idx) /* ------------------------------------------------------------------------- */ -int config_setting_index(const config_setting_t *setting) +int config_setting_index(const struct config_setting_t *setting) { - config_setting_t **found = NULL; - config_list_t *list; + struct config_setting_t **found = NULL; + struct config_list_t *list; int i; if(! setting->parent) @@ -1627,4 +1677,3 @@ int config_setting_index(const config_setting_t *setting) } /* ------------------------------------------------------------------------- */ -/* eof */ diff --git a/3rdparty/libconfig/libconfig.h b/3rdparty/libconfig/libconfig.h index cc5c5b79f..58c1f914e 100644 --- a/3rdparty/libconfig/libconfig.h +++ b/3rdparty/libconfig/libconfig.h @@ -1,7 +1,7 @@ /* ---------------------------------------------------------------------------- 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. @@ -40,8 +40,8 @@ extern "C" { #endif /* WIN32 */ #define LIBCONFIG_VER_MAJOR 1 -#define LIBCONFIG_VER_MINOR 4 -#define LIBCONFIG_VER_REVISION 9 +#define LIBCONFIG_VER_MINOR 5 +#define LIBCONFIG_VER_REVISION 0 #include <stdio.h> @@ -58,260 +58,267 @@ extern "C" { #define CONFIG_FORMAT_DEFAULT 0 #define CONFIG_FORMAT_HEX 1 -#define CONFIG_OPTION_AUTOCONVERT 0x01 +#define CONFIG_OPTION_AUTOCONVERT 0x01 +#define CONFIG_OPTION_SEMICOLON_SEPARATORS 0x02 +#define CONFIG_OPTION_COLON_ASSIGNMENT_FOR_GROUPS 0x04 +#define CONFIG_OPTION_COLON_ASSIGNMENT_FOR_NON_GROUPS 0x08 +#define CONFIG_OPTION_OPEN_BRACE_ON_SEPARATE_LINE 0x10 #define CONFIG_TRUE (1) #define CONFIG_FALSE (0) -typedef union config_value_t +union config_value_t { int ival; long long llval; double fval; char *sval; struct config_list_t *list; -} config_value_t; +}; -typedef struct config_setting_t +struct config_setting_t { char *name; short type; short format; - config_value_t value; + union config_value_t value; struct config_setting_t *parent; struct config_t *config; void *hook; unsigned int line; const char *file; -} config_setting_t; +}; -typedef enum +enum config_error_t { CONFIG_ERR_NONE = 0, CONFIG_ERR_FILE_IO = 1, CONFIG_ERR_PARSE = 2 -} config_error_t; +}; -typedef struct config_list_t +struct config_list_t { unsigned int length; - config_setting_t **elements; -} config_list_t; + struct config_setting_t **elements; +}; -typedef struct config_t +struct config_t { - config_setting_t *root; + struct config_setting_t *root; void (*destructor)(void *); - unsigned short flags; + int options; unsigned short tab_width; short default_format; const char *include_dir; const char *error_text; const char *error_file; int error_line; - config_error_t error_type; + enum config_error_t error_type; const char **filenames; unsigned int num_filenames; -} config_t; +}; -extern LIBCONFIG_API int config_read(config_t *config, FILE *stream); -extern LIBCONFIG_API void config_write(const config_t *config, FILE *stream); +extern LIBCONFIG_API int config_read(struct config_t *config, FILE *stream); +extern LIBCONFIG_API void config_write(const struct config_t *config, FILE *stream); -extern LIBCONFIG_API void config_set_default_format(config_t *config, +extern LIBCONFIG_API void config_set_default_format(struct config_t *config, short format); -extern LIBCONFIG_API void config_set_auto_convert(config_t *config, int flag); -extern LIBCONFIG_API int config_get_auto_convert(const config_t *config); +extern LIBCONFIG_API void config_set_options(struct config_t *config, int options); +extern LIBCONFIG_API int config_get_options(const struct config_t *config); -extern LIBCONFIG_API int config_read_string(config_t *config, const char *str); +extern LIBCONFIG_API void config_set_auto_convert(struct config_t *config, int flag); +extern LIBCONFIG_API int config_get_auto_convert(const struct config_t *config); -extern LIBCONFIG_API int config_read_file(config_t *config, +extern LIBCONFIG_API int config_read_string(struct config_t *config, const char *str); + +extern LIBCONFIG_API int config_read_file(struct config_t *config, const char *filename); -extern LIBCONFIG_API int config_write_file(config_t *config, +extern LIBCONFIG_API int config_write_file(struct config_t *config, const char *filename); -extern LIBCONFIG_API void config_set_destructor(config_t *config, +extern LIBCONFIG_API void config_set_destructor(struct config_t *config, void (*destructor)(void *)); -extern LIBCONFIG_API void config_set_include_dir(config_t *config, +extern LIBCONFIG_API void config_set_include_dir(struct config_t *config, const char *include_dir); -extern LIBCONFIG_API void config_init(config_t *config); -extern LIBCONFIG_API void config_destroy(config_t *config); +extern LIBCONFIG_API void config_init(struct config_t *config); +extern LIBCONFIG_API void config_destroy(struct config_t *config); extern LIBCONFIG_API int config_setting_get_int( - const config_setting_t *setting); + const struct config_setting_t *setting); extern LIBCONFIG_API long long config_setting_get_int64( - const config_setting_t *setting); + const struct config_setting_t *setting); extern LIBCONFIG_API double config_setting_get_float( - const config_setting_t *setting); + const struct config_setting_t *setting); extern LIBCONFIG_API int config_setting_get_bool( - const config_setting_t *setting); + const struct config_setting_t *setting); extern LIBCONFIG_API const char *config_setting_get_string( - const config_setting_t *setting); + const struct config_setting_t *setting); extern LIBCONFIG_API int config_setting_lookup_int( - const config_setting_t *setting, const char *name, int *value); + const struct config_setting_t *setting, const char *name, int *value); extern LIBCONFIG_API int config_setting_lookup_int64( - const config_setting_t *setting, const char *name, long long *value); + const struct config_setting_t *setting, const char *name, long long *value); extern LIBCONFIG_API int config_setting_lookup_float( - const config_setting_t *setting, const char *name, double *value); + const struct config_setting_t *setting, const char *name, double *value); extern LIBCONFIG_API int config_setting_lookup_bool( - const config_setting_t *setting, const char *name, int *value); + const struct config_setting_t *setting, const char *name, int *value); extern LIBCONFIG_API int config_setting_lookup_string( - const config_setting_t *setting, const char *name, const char **value); + const struct config_setting_t *setting, const char *name, const char **value); -extern LIBCONFIG_API int config_setting_set_int(config_setting_t *setting, +extern LIBCONFIG_API int config_setting_set_int(struct config_setting_t *setting, int value); -extern LIBCONFIG_API int config_setting_set_int64(config_setting_t *setting, +extern LIBCONFIG_API int config_setting_set_int64(struct config_setting_t *setting, long long value); -extern LIBCONFIG_API int config_setting_set_float(config_setting_t *setting, +extern LIBCONFIG_API int config_setting_set_float(struct config_setting_t *setting, double value); -extern LIBCONFIG_API int config_setting_set_bool(config_setting_t *setting, +extern LIBCONFIG_API int config_setting_set_bool(struct config_setting_t *setting, int value); -extern LIBCONFIG_API int config_setting_set_string(config_setting_t *setting, +extern LIBCONFIG_API int config_setting_set_string(struct config_setting_t *setting, const char *value); -extern LIBCONFIG_API int config_setting_set_format(config_setting_t *setting, +extern LIBCONFIG_API int config_setting_set_format(struct config_setting_t *setting, short format); extern LIBCONFIG_API short config_setting_get_format( - const config_setting_t *setting); + const struct config_setting_t *setting); extern LIBCONFIG_API int config_setting_get_int_elem( - const config_setting_t *setting, int idx); + const struct config_setting_t *setting, int idx); extern LIBCONFIG_API long long config_setting_get_int64_elem( - const config_setting_t *setting, int idx); + const struct config_setting_t *setting, int idx); extern LIBCONFIG_API double config_setting_get_float_elem( - const config_setting_t *setting, int idx); + const struct config_setting_t *setting, int idx); extern LIBCONFIG_API int config_setting_get_bool_elem( - const config_setting_t *setting, int idx); + const struct config_setting_t *setting, int idx); extern LIBCONFIG_API const char *config_setting_get_string_elem( - const config_setting_t *setting, int idx); - -extern LIBCONFIG_API config_setting_t *config_setting_set_int_elem( - config_setting_t *setting, int idx, int value); -extern LIBCONFIG_API config_setting_t *config_setting_set_int64_elem( - config_setting_t *setting, int idx, long long value); -extern LIBCONFIG_API config_setting_t *config_setting_set_float_elem( - config_setting_t *setting, int idx, double value); -extern LIBCONFIG_API config_setting_t *config_setting_set_bool_elem( - config_setting_t *setting, int idx, int value); -extern LIBCONFIG_API config_setting_t *config_setting_set_string_elem( - config_setting_t *setting, int idx, const char *value); - -#define /* const char * */ config_get_include_dir(/* const config_t * */ C) \ + const struct config_setting_t *setting, int idx); + +extern LIBCONFIG_API struct config_setting_t *config_setting_set_int_elem( + struct config_setting_t *setting, int idx, int value); +extern LIBCONFIG_API struct config_setting_t *config_setting_set_int64_elem( + struct config_setting_t *setting, int idx, long long value); +extern LIBCONFIG_API struct config_setting_t *config_setting_set_float_elem( + struct config_setting_t *setting, int idx, double value); +extern LIBCONFIG_API struct config_setting_t *config_setting_set_bool_elem( + struct config_setting_t *setting, int idx, int value); +extern LIBCONFIG_API struct config_setting_t *config_setting_set_string_elem( + struct config_setting_t *setting, int idx, const char *value); + +#define /* const char * */ config_get_include_dir(/* const struct config_t * */ C) \ ((C)->include_dir) -#define /* int */ config_setting_type(/* const config_setting_t * */ S) \ +#define /* int */ config_setting_type(/* const struct config_setting_t * */ S) \ ((S)->type) -#define /* int */ config_setting_is_group(/* const config_setting_t * */ S) \ +#define /* int */ config_setting_is_group(/* const struct config_setting_t * */ S) \ ((S)->type == CONFIG_TYPE_GROUP) -#define /* int */ config_setting_is_array(/* const config_setting_t * */ S) \ +#define /* int */ config_setting_is_array(/* const struct config_setting_t * */ S) \ ((S)->type == CONFIG_TYPE_ARRAY) -#define /* int */ config_setting_is_list(/* const config_setting_t * */ S) \ +#define /* int */ config_setting_is_list(/* const struct config_setting_t * */ S) \ ((S)->type == CONFIG_TYPE_LIST) #define /* int */ config_setting_is_aggregate( \ - /* const config_setting_t * */ S) \ + /* const struct config_setting_t * */ S) \ (((S)->type == CONFIG_TYPE_GROUP) || ((S)->type == CONFIG_TYPE_LIST) \ || ((S)->type == CONFIG_TYPE_ARRAY)) -#define /* int */ config_setting_is_number(/* const config_setting_t * */ S) \ +#define /* int */ config_setting_is_number(/* const struct config_setting_t * */ S) \ (((S)->type == CONFIG_TYPE_INT) \ || ((S)->type == CONFIG_TYPE_INT64) \ || ((S)->type == CONFIG_TYPE_FLOAT)) -#define /* int */ config_setting_is_scalar(/* const config_setting_t * */ S) \ +#define /* int */ config_setting_is_scalar(/* const struct config_setting_t * */ S) \ (((S)->type == CONFIG_TYPE_BOOL) || ((S)->type == CONFIG_TYPE_STRING) \ || config_setting_is_number(S)) #define /* const char * */ config_setting_name( \ - /* const config_setting_t * */ S) \ + /* const struct config_setting_t * */ S) \ ((S)->name) -#define /* config_setting_t * */ config_setting_parent( \ - /* const config_setting_t * */ S) \ +#define /* struct config_setting_t * */ config_setting_parent( \ + /* const struct config_setting_t * */ S) \ ((S)->parent) #define /* int */ config_setting_is_root( \ - /* const config_setting_t * */ S) \ + /* const struct config_setting_t * */ S) \ ((S)->parent ? CONFIG_FALSE : CONFIG_TRUE) -extern LIBCONFIG_API int config_setting_index(const config_setting_t *setting); +extern LIBCONFIG_API int config_setting_index(const struct config_setting_t *setting); extern LIBCONFIG_API int config_setting_length( - const config_setting_t *setting); -extern LIBCONFIG_API config_setting_t *config_setting_get_elem( - const config_setting_t *setting, unsigned int idx); + const struct config_setting_t *setting); +extern LIBCONFIG_API struct config_setting_t *config_setting_get_elem( + const struct config_setting_t *setting, unsigned int idx); -extern LIBCONFIG_API config_setting_t *config_setting_get_member( - const config_setting_t *setting, const char *name); +extern LIBCONFIG_API struct config_setting_t *config_setting_get_member( + const struct config_setting_t *setting, const char *name); -extern LIBCONFIG_API config_setting_t *config_setting_add( - config_setting_t *parent, const char *name, int type); -extern LIBCONFIG_API int config_setting_remove(config_setting_t *parent, +extern LIBCONFIG_API struct config_setting_t *config_setting_add( + struct config_setting_t *parent, const char *name, int type); +extern LIBCONFIG_API int config_setting_remove(struct config_setting_t *parent, const char *name); -extern LIBCONFIG_API int config_setting_remove_elem(config_setting_t *parent, +extern LIBCONFIG_API int config_setting_remove_elem(struct config_setting_t *parent, unsigned int idx); -extern LIBCONFIG_API void config_setting_set_hook(config_setting_t *setting, +extern LIBCONFIG_API void config_setting_set_hook(struct config_setting_t *setting, void *hook); #define config_setting_get_hook(S) ((S)->hook) -extern LIBCONFIG_API config_setting_t *config_lookup(const config_t *config, +extern LIBCONFIG_API struct config_setting_t *config_lookup(const struct config_t *config, const char *path); -extern LIBCONFIG_API config_setting_t *config_lookup_from( - config_setting_t *setting, const char *path); +extern LIBCONFIG_API struct config_setting_t *config_setting_lookup( + struct config_setting_t *setting, const char *path); -extern LIBCONFIG_API int config_lookup_int(const config_t *config, +extern LIBCONFIG_API int config_lookup_int(const struct config_t *config, const char *path, int *value); -extern LIBCONFIG_API int config_lookup_int64(const config_t *config, +extern LIBCONFIG_API int config_lookup_int64(const struct config_t *config, const char *path, long long *value); -extern LIBCONFIG_API int config_lookup_float(const config_t *config, +extern LIBCONFIG_API int config_lookup_float(const struct config_t *config, const char *path, double *value); -extern LIBCONFIG_API int config_lookup_bool(const config_t *config, +extern LIBCONFIG_API int config_lookup_bool(const struct config_t *config, const char *path, int *value); -extern LIBCONFIG_API int config_lookup_string(const config_t *config, +extern LIBCONFIG_API int config_lookup_string(const struct config_t *config, const char *path, const char **value); -#define /* config_setting_t * */ config_root_setting( \ - /* const config_t * */ C) \ +#define /* struct config_setting_t * */ config_root_setting( \ + /* const struct config_t * */ C) \ ((C)->root) -#define /* void */ config_set_default_format(/* config_t * */ C, \ +#define /* void */ config_set_default_format(/* struct config_t * */ C, \ /* short */ F) \ (C)->default_format = (F) -#define /* short */ config_get_default_format(/* config_t * */ C) \ +#define /* short */ config_get_default_format(/* struct config_t * */ C) \ ((C)->default_format) -#define /* void */ config_set_tab_width(/* config_t * */ C, \ +#define /* void */ config_set_tab_width(/* struct config_t * */ C, \ /* unsigned short */ W) \ (C)->tab_width = ((W) & 0x0F) -#define /* unsigned char */ config_get_tab_width(/* const config_t * */ C) \ +#define /* unsigned char */ config_get_tab_width(/* const struct config_t * */ C) \ ((C)->tab_width) #define /* unsigned short */ config_setting_source_line( \ - /* const config_setting_t * */ S) \ + /* const struct config_setting_t * */ S) \ ((S)->line) #define /* const char */ config_setting_source_file( \ - /* const config_setting_t * */ S) \ + /* const struct config_setting_t * */ S) \ ((S)->file) -#define /* const char * */ config_error_text(/* const config_t * */ C) \ +#define /* const char * */ config_error_text(/* const struct config_t * */ C) \ ((C)->error_text) -#define /* const char * */ config_error_file(/* const config_t * */ C) \ +#define /* const char * */ config_error_file(/* const struct config_t * */ C) \ ((C)->error_file) -#define /* int */ config_error_line(/* const config_t * */ C) \ +#define /* int */ config_error_line(/* const struct config_t * */ C) \ ((C)->error_line) -#define /* config_error_t */ config_error_type(/* const config_t * */ C) \ +#define /* enum config_error_t */ config_error_type(/* const struct config_t * */ C) \ ((C)->error_type) #ifdef __cplusplus diff --git a/3rdparty/libconfig/parsectx.h b/3rdparty/libconfig/parsectx.h index 732e5f20d..4d1f261d9 100644 --- a/3rdparty/libconfig/parsectx.h +++ b/3rdparty/libconfig/parsectx.h @@ -1,7 +1,7 @@ /* ---------------------------------------------------------------------------- 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. @@ -28,9 +28,9 @@ struct parse_context { - config_t *config; - config_setting_t *parent; - config_setting_t *setting; + struct config_t *config; + struct config_setting_t *parent; + struct config_setting_t *setting; char *name; strbuf_t string; }; diff --git a/3rdparty/libconfig/scanctx.c b/3rdparty/libconfig/scanctx.c index f2fe8cd80..b3d9a6379 100644 --- a/3rdparty/libconfig/scanctx.c +++ b/3rdparty/libconfig/scanctx.c @@ -1,7 +1,7 @@ /* ---------------------------------------------------------------------------- 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. @@ -40,7 +40,6 @@ static const char *err_include_too_deep = "include file nesting too deep"; static const char *__scanctx_add_filename(struct scan_context *ctx, const char *filename) { -#ifndef __clang_analyzer__ // FIXME: Clang's static analyzer doesn't like this unsigned int count = ctx->num_filenames; const char **f; @@ -62,7 +61,6 @@ static const char *__scanctx_add_filename(struct scan_context *ctx, ctx->filenames[ctx->num_filenames] = filename; ++ctx->num_filenames; -#endif // __clang_analyzer__ return(filename); } @@ -71,8 +69,10 @@ static const char *__scanctx_add_filename(struct scan_context *ctx, void scanctx_init(struct scan_context *ctx, const char *top_filename) { memset(ctx, 0, sizeof(struct scan_context)); +#ifndef __clang_analyzer__ // FIXME: Clang's static analyzer doesn't like this if(top_filename) ctx->top_filename = __scanctx_add_filename(ctx, strdup(top_filename)); +#endif // __clang_analyzer__ } /* ------------------------------------------------------------------------- */ @@ -124,7 +124,9 @@ FILE *scanctx_push_include(struct scan_context *ctx, void *buffer, if(fp) { ctx->streams[ctx->depth] = fp; +#ifndef __clang_analyzer__ // FIXME: Clang's static analyzer doesn't like this ctx->files[ctx->depth] = __scanctx_add_filename(ctx, file); +#endif // __clang_analyzer__ ctx->buffers[ctx->depth] = buffer; ++(ctx->depth); } @@ -170,4 +172,3 @@ const char *scanctx_current_filename(struct scan_context *ctx) } /* ------------------------------------------------------------------------- */ -/* eof */ diff --git a/3rdparty/libconfig/scanctx.h b/3rdparty/libconfig/scanctx.h index 9bb1f1a0d..004523e2a 100644 --- a/3rdparty/libconfig/scanctx.h +++ b/3rdparty/libconfig/scanctx.h @@ -1,7 +1,7 @@ /* ---------------------------------------------------------------------------- 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. @@ -33,7 +33,7 @@ struct scan_context { - config_t *config; + struct config_t *config; const char *top_filename; const char *files[MAX_INCLUDE_DEPTH]; void *buffers[MAX_INCLUDE_DEPTH]; diff --git a/3rdparty/libconfig/scanner.c b/3rdparty/libconfig/scanner.c index 96c01fc5f..abe173830 100644 --- a/3rdparty/libconfig/scanner.c +++ b/3rdparty/libconfig/scanner.c @@ -1,10 +1,6 @@ #line 2 "scanner.c" -#line 36 "scanner.l" -#include "scanctx.h" - - -#line 8 "scanner.c" +#line 4 "scanner.c" #define YY_INT_ALIGNED short int @@ -12,8 +8,8 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 39 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 0 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -163,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. @@ -348,7 +352,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(yyscanner) (/*CONSTCOND*/1) #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; @@ -360,6 +364,9 @@ typedef int yy_state_type; static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); static int yy_get_next_buffer (yyscan_t yyscanner ); +#if defined(__GNUC__) && __GNUC__ >= 3 +__attribute__((__noreturn__)) +#endif static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); /* Done after the current pattern has been matched and before the @@ -399,7 +406,7 @@ static yyconst flex_int16_t yy_accept[123] = 19, 0 } ; -static yyconst flex_int32_t yy_ec[256] = +static yyconst YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 4, 5, 1, 1, 1, 1, 1, 1, 1, @@ -431,7 +438,7 @@ static yyconst flex_int32_t yy_ec[256] = 1, 1, 1, 1, 1 } ; -static yyconst flex_int32_t yy_meta[51] = +static yyconst YY_CHAR yy_meta[51] = { 0, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 3, 1, 1, 3, 3, 1, 4, 4, 1, 1, @@ -440,7 +447,7 @@ static yyconst flex_int32_t yy_meta[51] = 4, 4, 3, 3, 3, 3, 3, 3, 1, 1 } ; -static yyconst flex_int16_t yy_base[134] = +static yyconst flex_uint16_t yy_base[134] = { 0, 0, 49, 49, 50, 48, 49, 50, 51, 244, 243, 248, 251, 245, 251, 251, 251, 243, 251, 251, 0, @@ -478,7 +485,7 @@ static yyconst flex_int16_t yy_def[134] = 122, 122, 122 } ; -static yyconst flex_int16_t yy_nxt[302] = +static yyconst flex_uint16_t yy_nxt[302] = { 0, 12, 13, 14, 15, 15, 16, 17, 12, 18, 19, 20, 21, 22, 21, 23, 24, 25, 26, 27, 28, @@ -572,7 +579,8 @@ static yyconst flex_int32_t yy_rule_can_match_eol[46] = /* -*- mode: C -*- */ /* -------------------------------------------------------------------------- libconfig - A library for processing structured configuration files - 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. @@ -592,20 +600,20 @@ static yyconst flex_int32_t yy_rule_can_match_eol[46] = ---------------------------------------------------------------------------- */ #define YY_NO_UNISTD_H 1 +#line 37 "scanner.l" -#line 40 "scanner.l" #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 @@ -643,15 +651,8 @@ 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; -} - -#line 655 "scanner.c" +#line 656 "scanner.c" #define INITIAL 0 #define COMMENT 1 @@ -722,11 +723,11 @@ void libconfig_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); FILE *libconfig_yyget_in (yyscan_t yyscanner ); -void libconfig_yyset_in (FILE * in_str ,yyscan_t yyscanner ); +void libconfig_yyset_in (FILE * _in_str ,yyscan_t yyscanner ); FILE *libconfig_yyget_out (yyscan_t yyscanner ); -void libconfig_yyset_out (FILE * out_str ,yyscan_t yyscanner ); +void libconfig_yyset_out (FILE * _out_str ,yyscan_t yyscanner ); yy_size_t libconfig_yyget_leng (yyscan_t yyscanner ); @@ -734,11 +735,11 @@ char *libconfig_yyget_text (yyscan_t yyscanner ); int libconfig_yyget_lineno (yyscan_t yyscanner ); -void libconfig_yyset_lineno (int line_number ,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 ); +void libconfig_yyset_column (int _column_no ,yyscan_t yyscanner ); YYSTYPE * libconfig_yyget_lval (yyscan_t yyscanner ); @@ -756,6 +757,10 @@ extern int libconfig_yywrap (yyscan_t yyscanner ); #endif #endif +#ifndef YY_NO_UNPUT + +#endif + #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); #endif @@ -776,7 +781,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. */ @@ -865,7 +875,7 @@ extern int libconfig_yylex \ /* Code executed at the end of each rule. */ #ifndef YY_BREAK -#define YY_BREAK break; +#define YY_BREAK /*LINTED*/break; #endif #define YY_RULE_SETUP \ @@ -878,9 +888,9 @@ extern int libconfig_yylex \ */ YY_DECL { - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yylval = yylval_param; @@ -912,12 +922,12 @@ YY_DECL } { -#line 112 "scanner.l" +#line 103 "scanner.l" -#line 919 "scanner.c" +#line 929 "scanner.c" - while ( 1 ) /* loops until end-of-file is reached */ + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { yy_cp = yyg->yy_c_buf_p; @@ -934,7 +944,7 @@ YY_DECL yy_match: do { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; + 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; @@ -983,69 +993,69 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 114 "scanner.l" +#line 105 "scanner.l" { BEGIN COMMENT; } YY_BREAK case 2: YY_RULE_SETUP -#line 115 "scanner.l" +#line 106 "scanner.l" { BEGIN INITIAL; } YY_BREAK case 3: YY_RULE_SETUP -#line 116 "scanner.l" +#line 107 "scanner.l" { /* ignore */ } YY_BREAK case 4: /* rule 4 can match eol */ YY_RULE_SETUP -#line 117 "scanner.l" +#line 108 "scanner.l" { /* ignore */ } YY_BREAK case 5: YY_RULE_SETUP -#line 119 "scanner.l" +#line 110 "scanner.l" { BEGIN STRING; } YY_BREAK case 6: /* rule 6 can match eol */ YY_RULE_SETUP -#line 120 "scanner.l" +#line 111 "scanner.l" { scanctx_append_string(yyextra, yytext); } YY_BREAK case 7: YY_RULE_SETUP -#line 121 "scanner.l" +#line 112 "scanner.l" { scanctx_append_string(yyextra, "\n"); } YY_BREAK case 8: YY_RULE_SETUP -#line 122 "scanner.l" +#line 113 "scanner.l" { scanctx_append_string(yyextra, "\r"); } YY_BREAK case 9: YY_RULE_SETUP -#line 123 "scanner.l" +#line 114 "scanner.l" { scanctx_append_string(yyextra, "\t"); } YY_BREAK case 10: YY_RULE_SETUP -#line 124 "scanner.l" +#line 115 "scanner.l" { scanctx_append_string(yyextra, "\f"); } YY_BREAK case 11: YY_RULE_SETUP -#line 125 "scanner.l" +#line 116 "scanner.l" { scanctx_append_string(yyextra, "\\"); } YY_BREAK case 12: YY_RULE_SETUP -#line 126 "scanner.l" +#line 117 "scanner.l" { scanctx_append_string(yyextra, "\""); } YY_BREAK case 13: YY_RULE_SETUP -#line 127 "scanner.l" +#line 118 "scanner.l" { char c[2] = { (char)(strtol(yytext + 2, NULL, 16) & 0xFF), 0 }; @@ -1054,12 +1064,12 @@ YY_RULE_SETUP YY_BREAK case 14: YY_RULE_SETUP -#line 132 "scanner.l" +#line 123 "scanner.l" { scanctx_append_string(yyextra, "\\"); } YY_BREAK case 15: YY_RULE_SETUP -#line 133 "scanner.l" +#line 124 "scanner.l" { yylval->sval = scanctx_take_string(yyextra); BEGIN INITIAL; @@ -1068,18 +1078,18 @@ YY_RULE_SETUP YY_BREAK case 16: YY_RULE_SETUP -#line 139 "scanner.l" +#line 130 "scanner.l" { BEGIN SCRIPTBLOCK; } YY_BREAK case 17: /* rule 17 can match eol */ YY_RULE_SETUP -#line 140 "scanner.l" +#line 131 "scanner.l" { scanctx_append_string(yyextra, yytext); } YY_BREAK case 18: YY_RULE_SETUP -#line 141 "scanner.l" +#line 132 "scanner.l" { yylval->sval = scanctx_take_string(yyextra); BEGIN INITIAL; @@ -1088,28 +1098,28 @@ YY_RULE_SETUP YY_BREAK case 19: YY_RULE_SETUP -#line 147 "scanner.l" +#line 138 "scanner.l" { BEGIN INCLUDE; } YY_BREAK case 20: /* rule 20 can match eol */ YY_RULE_SETUP -#line 148 "scanner.l" +#line 139 "scanner.l" { scanctx_append_string(yyextra, yytext); } YY_BREAK case 21: YY_RULE_SETUP -#line 149 "scanner.l" +#line 140 "scanner.l" { scanctx_append_string(yyextra, "\\"); } YY_BREAK case 22: YY_RULE_SETUP -#line 150 "scanner.l" +#line 141 "scanner.l" { scanctx_append_string(yyextra, "\""); } YY_BREAK case 23: YY_RULE_SETUP -#line 151 "scanner.l" +#line 142 "scanner.l" { const char *error; FILE *fp = scanctx_push_include(yyextra, @@ -1135,97 +1145,116 @@ YY_RULE_SETUP case 24: /* rule 24 can match eol */ YY_RULE_SETUP -#line 175 "scanner.l" +#line 166 "scanner.l" { /* ignore */ } YY_BREAK case 25: YY_RULE_SETUP -#line 176 "scanner.l" +#line 167 "scanner.l" { /* ignore */ } YY_BREAK case 26: YY_RULE_SETUP -#line 178 "scanner.l" +#line 169 "scanner.l" { return(TOK_EQUALS); } YY_BREAK case 27: YY_RULE_SETUP -#line 179 "scanner.l" +#line 170 "scanner.l" { return(TOK_COMMA); } YY_BREAK case 28: YY_RULE_SETUP -#line 180 "scanner.l" +#line 171 "scanner.l" { return(TOK_GROUP_START); } YY_BREAK case 29: YY_RULE_SETUP -#line 181 "scanner.l" +#line 172 "scanner.l" { return(TOK_GROUP_END); } YY_BREAK case 30: YY_RULE_SETUP -#line 182 "scanner.l" +#line 173 "scanner.l" { yylval->ival = 1; return(TOK_BOOLEAN); } YY_BREAK case 31: YY_RULE_SETUP -#line 183 "scanner.l" +#line 174 "scanner.l" { yylval->ival = 0; return(TOK_BOOLEAN); } YY_BREAK case 32: YY_RULE_SETUP -#line 184 "scanner.l" +#line 175 "scanner.l" { yylval->fval = atof(yytext); return(TOK_FLOAT); } YY_BREAK case 33: YY_RULE_SETUP -#line 185 "scanner.l" -{ yylval->ival = atoi(yytext); return(TOK_INTEGER); } +#line 176 "scanner.l" +{ + 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); + } + } YY_BREAK case 34: YY_RULE_SETUP -#line 186 "scanner.l" +#line 190 "scanner.l" { yylval->llval = atoll(yytext); return(TOK_INTEGER64); } YY_BREAK case 35: YY_RULE_SETUP -#line 187 "scanner.l" -{ yylval->ival = fromihex(yytext); return(TOK_HEX); } +#line 191 "scanner.l" +{ + unsigned long ulval = strtoul(yytext, NULL, 16); + if (ulval > INT32_MAX) + ulval &= INT32_MAX; + yylval->ival = (int)ulval; + return(TOK_HEX); + } YY_BREAK case 36: YY_RULE_SETUP -#line 188 "scanner.l" +#line 198 "scanner.l" { yylval->llval = fromhex(yytext); return(TOK_HEX64); } YY_BREAK case 37: YY_RULE_SETUP -#line 189 "scanner.l" +#line 199 "scanner.l" { yylval->sval = yytext; return(TOK_NAME); } YY_BREAK case 38: YY_RULE_SETUP -#line 190 "scanner.l" +#line 200 "scanner.l" { return(TOK_ARRAY_START); } YY_BREAK case 39: YY_RULE_SETUP -#line 191 "scanner.l" +#line 201 "scanner.l" { return(TOK_ARRAY_END); } YY_BREAK case 40: YY_RULE_SETUP -#line 192 "scanner.l" +#line 202 "scanner.l" { return(TOK_LIST_START); } YY_BREAK case 41: YY_RULE_SETUP -#line 193 "scanner.l" +#line 203 "scanner.l" { return(TOK_LIST_END); } YY_BREAK case 42: YY_RULE_SETUP -#line 194 "scanner.l" +#line 204 "scanner.l" { return(TOK_SEMICOLON); } YY_BREAK case 43: @@ -1233,12 +1262,12 @@ case 43: yyg->yy_c_buf_p = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 195 "scanner.l" +#line 205 "scanner.l" { /* ignore */ } YY_BREAK case 44: YY_RULE_SETUP -#line 196 "scanner.l" +#line 206 "scanner.l" { return(TOK_GARBAGE); } YY_BREAK case YY_STATE_EOF(INITIAL): @@ -1246,7 +1275,7 @@ case YY_STATE_EOF(COMMENT): case YY_STATE_EOF(STRING): case YY_STATE_EOF(INCLUDE): case YY_STATE_EOF(SCRIPTBLOCK): -#line 198 "scanner.l" +#line 208 "scanner.l" { YY_BUFFER_STATE buf = (YY_BUFFER_STATE)scanctx_pop_include( yyextra); @@ -1261,10 +1290,10 @@ case YY_STATE_EOF(SCRIPTBLOCK): YY_BREAK case 45: YY_RULE_SETUP -#line 209 "scanner.l" +#line 219 "scanner.l" ECHO; YY_BREAK -#line 1268 "scanner.c" +#line 1297 "scanner.c" case YY_END_OF_BUFFER: { @@ -1407,9 +1436,9 @@ ECHO; static int yy_get_next_buffer (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = yyg->yytext_ptr; - register int number_to_move, i; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + yy_size_t number_to_move, i; int ret_val; if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) @@ -1438,7 +1467,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) /* Try to read more data. */ /* First move last chars to start of buffer. */ - number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; + number_to_move = (yy_size_t) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); @@ -1520,8 +1549,6 @@ 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); @@ -1529,7 +1556,6 @@ 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; @@ -1544,8 +1570,8 @@ static int yy_get_next_buffer (yyscan_t yyscanner) static yy_state_type yy_get_previous_state (yyscan_t yyscanner) { - register yy_state_type yy_current_state; - register char *yy_cp; + yy_state_type yy_current_state; + char *yy_cp; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yy_current_state = yyg->yy_start; @@ -1553,7 +1579,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; @@ -1578,11 +1604,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) { - register int yy_is_jam; + int yy_is_jam; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ - register char *yy_cp = yyg->yy_c_buf_p; + char *yy_cp = yyg->yy_c_buf_p; - register YY_CHAR yy_c = 1; + YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; @@ -1601,6 +1627,10 @@ static int yy_get_next_buffer (yyscan_t yyscanner) return yy_is_jam ? 0 : yy_current_state; } +#ifndef YY_NO_UNPUT + +#endif + #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (yyscan_t yyscanner) @@ -1762,7 +1792,7 @@ static void libconfig_yy_load_buffer_state (yyscan_t yyscanner) if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in libconfig_yy_create_buffer()" ); - b->yy_buf_size = size; + b->yy_buf_size = (yy_size_t)size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. @@ -1923,7 +1953,7 @@ static void libconfig_yyensure_buffer_stack (yyscan_t yyscanner) * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ - num_to_alloc = 1; + num_to_alloc = 1; // After all that talk, this was set to 1 anyways... yyg->yy_buffer_stack = (struct yy_buffer_state**)libconfig_yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) , yyscanner); @@ -1940,7 +1970,7 @@ static void libconfig_yyensure_buffer_stack (yyscan_t yyscanner) if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ /* Increase the buffer to prepare for a possible push. */ - int grow_size = 8 /* arbitrary grow size */; + yy_size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = yyg->yy_buffer_stack_max + grow_size; yyg->yy_buffer_stack = (struct yy_buffer_state**)libconfig_yyrealloc @@ -2048,7 +2078,9 @@ YY_BUFFER_STATE libconfig_yy_scan_bytes (yyconst char * yybytes, yy_size_t _yy static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner) { - (void) fprintf( stderr, "%s\n", msg ); + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } @@ -2154,10 +2186,10 @@ void libconfig_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) } /** Set the current line number. - * @param line_number + * @param _line_number line number * @param yyscanner The scanner object. */ -void libconfig_yyset_lineno (int line_number , yyscan_t yyscanner) +void libconfig_yyset_lineno (int _line_number , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; @@ -2165,14 +2197,14 @@ void libconfig_yyset_lineno (int line_number , yyscan_t yyscanner) if (! YY_CURRENT_BUFFER ) YY_FATAL_ERROR( "libconfig_yyset_lineno called with no buffer" ); - yylineno = line_number; + yylineno = _line_number; } /** Set the current column. - * @param line_number + * @param _column_no column number * @param yyscanner The scanner object. */ -void libconfig_yyset_column (int column_no , yyscan_t yyscanner) +void libconfig_yyset_column (int _column_no , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; @@ -2180,25 +2212,25 @@ void libconfig_yyset_column (int column_no , yyscan_t yyscanner) if (! YY_CURRENT_BUFFER ) YY_FATAL_ERROR( "libconfig_yyset_column called with no buffer" ); - yycolumn = column_no; + yycolumn = _column_no; } /** Set the input stream. This does not discard the current * input buffer. - * @param in_str A readable stream. + * @param _in_str A readable stream. * @param yyscanner The scanner object. * @see libconfig_yy_switch_to_buffer */ -void libconfig_yyset_in (FILE * in_str , yyscan_t yyscanner) +void libconfig_yyset_in (FILE * _in_str , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyin = in_str ; + yyin = _in_str ; } -void libconfig_yyset_out (FILE * out_str , yyscan_t yyscanner) +void libconfig_yyset_out (FILE * _out_str , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyout = out_str ; + yyout = _out_str ; } int libconfig_yyget_debug (yyscan_t yyscanner) @@ -2207,10 +2239,10 @@ int libconfig_yyget_debug (yyscan_t yyscanner) return yy_flex_debug; } -void libconfig_yyset_debug (int bdebug , yyscan_t yyscanner) +void libconfig_yyset_debug (int _bdebug , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yy_flex_debug = bdebug ; + yy_flex_debug = _bdebug ; } /* Accessor methods for yylval and yylloc */ @@ -2361,7 +2393,10 @@ int libconfig_yylex_destroy (yyscan_t yyscanner) #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) { - register int i; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } @@ -2370,7 +2405,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yysca #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) { - register int n; + int n; for ( n = 0; s[n]; ++n ) ; @@ -2380,11 +2415,16 @@ static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) void *libconfig_yyalloc (yy_size_t size , yyscan_t yyscanner) { + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; return (void *) malloc( size ); } void *libconfig_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) { + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter @@ -2397,9 +2437,11 @@ void *libconfig_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) void libconfig_yyfree (void * ptr , yyscan_t yyscanner) { + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; free( (char *) ptr ); /* see libconfig_yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" -#line 209 "scanner.l" +#line 219 "scanner.l" diff --git a/3rdparty/libconfig/scanner.h b/3rdparty/libconfig/scanner.h index f684433ec..ce2f5cc95 100644 --- a/3rdparty/libconfig/scanner.h +++ b/3rdparty/libconfig/scanner.h @@ -3,12 +3,8 @@ #define libconfig_yyIN_HEADER 1 #line 6 "scanner.h" -#line 36 "scanner.l" -#include "scanctx.h" - - -#line 12 "scanner.h" +#line 8 "scanner.h" #define YY_INT_ALIGNED short int @@ -16,8 +12,8 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 39 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 0 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -136,7 +132,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 #ifndef YY_TYPEDEF_YY_BUFFER_STATE @@ -216,7 +220,7 @@ void *libconfig_yyalloc (yy_size_t ,yyscan_t yyscanner ); void *libconfig_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); void libconfig_yyfree (void * ,yyscan_t yyscanner ); -#define libconfig_yywrap(yyscanner) 1 +#define libconfig_yywrap(yyscanner) (/*CONSTCOND*/1) #define YY_SKIP_YYWRAP #define yytext_ptr yytext_r @@ -251,11 +255,11 @@ void libconfig_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); FILE *libconfig_yyget_in (yyscan_t yyscanner ); -void libconfig_yyset_in (FILE * in_str ,yyscan_t yyscanner ); +void libconfig_yyset_in (FILE * _in_str ,yyscan_t yyscanner ); FILE *libconfig_yyget_out (yyscan_t yyscanner ); -void libconfig_yyset_out (FILE * out_str ,yyscan_t yyscanner ); +void libconfig_yyset_out (FILE * _out_str ,yyscan_t yyscanner ); yy_size_t libconfig_yyget_leng (yyscan_t yyscanner ); @@ -263,11 +267,11 @@ char *libconfig_yyget_text (yyscan_t yyscanner ); int libconfig_yyget_lineno (yyscan_t yyscanner ); -void libconfig_yyset_lineno (int line_number ,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 ); +void libconfig_yyset_column (int _column_no ,yyscan_t yyscanner ); YYSTYPE * libconfig_yyget_lval (yyscan_t yyscanner ); @@ -299,7 +303,12 @@ static int yy_flex_strlen (yyconst char * ,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 /* Number of entries by which start-condition stack grows. */ @@ -334,8 +343,8 @@ extern int libconfig_yylex \ #undef YY_DECL #endif -#line 209 "scanner.l" +#line 219 "scanner.l" -#line 340 "scanner.h" +#line 349 "scanner.h" #undef libconfig_yyIN_HEADER #endif /* libconfig_yyHEADER_H */ diff --git a/3rdparty/libconfig/strbuf.c b/3rdparty/libconfig/strbuf.c index 1ed17a899..0b5dfe511 100644 --- a/3rdparty/libconfig/strbuf.c +++ b/3rdparty/libconfig/strbuf.c @@ -1,7 +1,7 @@ /* ---------------------------------------------------------------------------- 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. @@ -55,4 +55,3 @@ void strbuf_append(strbuf_t *buf, const char *text) } /* ------------------------------------------------------------------------- */ -/* eof */ diff --git a/3rdparty/libconfig/strbuf.h b/3rdparty/libconfig/strbuf.h index 8b451e730..948bf4768 100644 --- a/3rdparty/libconfig/strbuf.h +++ b/3rdparty/libconfig/strbuf.h @@ -1,7 +1,7 @@ /* ---------------------------------------------------------------------------- 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. diff --git a/3rdparty/libconfig/win32/stdint.h b/3rdparty/libconfig/win32/stdint.h new file mode 100644 index 000000000..71c0776d0 --- /dev/null +++ b/3rdparty/libconfig/win32/stdint.h @@ -0,0 +1,221 @@ +// ISO C9x compliant stdint.h for Microsoft Visual Studio +// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 +// +// Copyright (c) 2006 Alexander Chemeris +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. The name of the author may be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _MSC_VER // [ +#error "Use this header only with Microsoft Visual C++ compilers!" +#endif // _MSC_VER ] + +#ifndef _MSC_STDINT_H_ // [ +#define _MSC_STDINT_H_ + +#if _MSC_VER > 1000 +#pragma once +#endif + +#include <limits.h> + +// For Visual Studio 6 in C++ mode wrap <wchar.h> include with 'extern "C++" {}' +// or compiler give many errors like this: +// error C2733: second C linkage of overloaded function 'wmemchr' not allowed +#if (_MSC_VER < 1300) && defined(__cplusplus) + extern "C++" { +#endif +# include <wchar.h> +#if (_MSC_VER < 1300) && defined(__cplusplus) + } +#endif + +// 7.18.1 Integer types + +// 7.18.1.1 Exact-width integer types +typedef __int8 int8_t; +typedef __int16 int16_t; +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int8 uint8_t; +typedef unsigned __int16 uint16_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int64 uint64_t; + +// 7.18.1.2 Minimum-width integer types +typedef int8_t int_least8_t; +typedef int16_t int_least16_t; +typedef int32_t int_least32_t; +typedef int64_t int_least64_t; +typedef uint8_t uint_least8_t; +typedef uint16_t uint_least16_t; +typedef uint32_t uint_least32_t; +typedef uint64_t uint_least64_t; + +// 7.18.1.3 Fastest minimum-width integer types +typedef int8_t int_fast8_t; +typedef int16_t int_fast16_t; +typedef int32_t int_fast32_t; +typedef int64_t int_fast64_t; +typedef uint8_t uint_fast8_t; +typedef uint16_t uint_fast16_t; +typedef uint32_t uint_fast32_t; +typedef uint64_t uint_fast64_t; + +// 7.18.1.4 Integer types capable of holding object pointers +#ifdef _WIN64 // [ + typedef __int64 intptr_t; + typedef unsigned __int64 uintptr_t; +#else // _WIN64 ][ + typedef int intptr_t; + typedef unsigned int uintptr_t; +#endif // _WIN64 ] + +// 7.18.1.5 Greatest-width integer types +typedef int64_t intmax_t; +typedef uint64_t uintmax_t; + + +// 7.18.2 Limits of specified-width integer types + +#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 + +// 7.18.2.1 Limits of exact-width integer types +#define INT8_MIN ((int8_t)_I8_MIN) +#define INT8_MAX _I8_MAX +#define INT16_MIN ((int16_t)_I16_MIN) +#define INT16_MAX _I16_MAX +#define INT32_MIN ((int32_t)_I32_MIN) +#define INT32_MAX _I32_MAX +#define INT64_MIN ((int64_t)_I64_MIN) +#define INT64_MAX _I64_MAX +#define UINT8_MAX _UI8_MAX +#define UINT16_MAX _UI16_MAX +#define UINT32_MAX _UI32_MAX +#define UINT64_MAX _UI64_MAX + +// 7.18.2.2 Limits of minimum-width integer types +#define INT_LEAST8_MIN INT8_MIN +#define INT_LEAST8_MAX INT8_MAX +#define INT_LEAST16_MIN INT16_MIN +#define INT_LEAST16_MAX INT16_MAX +#define INT_LEAST32_MIN INT32_MIN +#define INT_LEAST32_MAX INT32_MAX +#define INT_LEAST64_MIN INT64_MIN +#define INT_LEAST64_MAX INT64_MAX +#define UINT_LEAST8_MAX UINT8_MAX +#define UINT_LEAST16_MAX UINT16_MAX +#define UINT_LEAST32_MAX UINT32_MAX +#define UINT_LEAST64_MAX UINT64_MAX + +// 7.18.2.3 Limits of fastest minimum-width integer types +#define INT_FAST8_MIN INT8_MIN +#define INT_FAST8_MAX INT8_MAX +#define INT_FAST16_MIN INT16_MIN +#define INT_FAST16_MAX INT16_MAX +#define INT_FAST32_MIN INT32_MIN +#define INT_FAST32_MAX INT32_MAX +#define INT_FAST64_MIN INT64_MIN +#define INT_FAST64_MAX INT64_MAX +#define UINT_FAST8_MAX UINT8_MAX +#define UINT_FAST16_MAX UINT16_MAX +#define UINT_FAST32_MAX UINT32_MAX +#define UINT_FAST64_MAX UINT64_MAX + +// 7.18.2.4 Limits of integer types capable of holding object pointers +#ifdef _WIN64 // [ +# define INTPTR_MIN INT64_MIN +# define INTPTR_MAX INT64_MAX +# define UINTPTR_MAX UINT64_MAX +#else // _WIN64 ][ +# define INTPTR_MIN INT32_MIN +# define INTPTR_MAX INT32_MAX +# define UINTPTR_MAX UINT32_MAX +#endif // _WIN64 ] + +// 7.18.2.5 Limits of greatest-width integer types +#define INTMAX_MIN INT64_MIN +#define INTMAX_MAX INT64_MAX +#define UINTMAX_MAX UINT64_MAX + +// 7.18.3 Limits of other integer types + +#ifdef _WIN64 // [ +# define PTRDIFF_MIN _I64_MIN +# define PTRDIFF_MAX _I64_MAX +#else // _WIN64 ][ +# define PTRDIFF_MIN _I32_MIN +# define PTRDIFF_MAX _I32_MAX +#endif // _WIN64 ] + +#define SIG_ATOMIC_MIN INT_MIN +#define SIG_ATOMIC_MAX INT_MAX + +#ifndef SIZE_MAX // [ +# ifdef _WIN64 // [ +# define SIZE_MAX _UI64_MAX +# else // _WIN64 ][ +# define SIZE_MAX _UI32_MAX +# endif // _WIN64 ] +#endif // SIZE_MAX ] + +// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h> +#ifndef WCHAR_MIN // [ +# define WCHAR_MIN 0 +#endif // WCHAR_MIN ] +#ifndef WCHAR_MAX // [ +# define WCHAR_MAX _UI16_MAX +#endif // WCHAR_MAX ] + +#define WINT_MIN 0 +#define WINT_MAX _UI16_MAX + +#endif // __STDC_LIMIT_MACROS ] + + +// 7.18.4 Limits of other integer types + +#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 + +// 7.18.4.1 Macros for minimum-width integer constants + +#define INT8_C(val) val##i8 +#define INT16_C(val) val##i16 +#define INT32_C(val) val##i32 +#define INT64_C(val) val##i64 + +#define UINT8_C(val) val##ui8 +#define UINT16_C(val) val##ui16 +#define UINT32_C(val) val##ui32 +#define UINT64_C(val) val##ui64 + +// 7.18.4.2 Macros for greatest-width integer constants +#define INTMAX_C INT64_C +#define UINTMAX_C UINT64_C + +#endif // __STDC_CONSTANT_MACROS ] + +#endif // _MSC_STDINT_H_ ] diff --git a/3rdparty/libconfig/wincompat.h b/3rdparty/libconfig/wincompat.h index 418191972..7e30f0e8d 100644 --- a/3rdparty/libconfig/wincompat.h +++ b/3rdparty/libconfig/wincompat.h @@ -1,7 +1,7 @@ /* ---------------------------------------------------------------------------- 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. @@ -32,12 +32,19 @@ #define WIN32_LEAN_AND_MEAN #include <windows.h> +#define fileno _fileno +#define fstat _fstat +#define stat _stat // struct stat for fstat() #define snprintf _snprintf -#ifndef __MINGW32__ +#if !defined(__MINGW32__) && _MSC_VER < 1800 #define atoll _atoi64 #define strtoull _strtoui64 -#endif /* __MINGW32__ */ +#endif + +#if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#endif #endif |