summarylogtreecommitdiffstats
path: root/ini.h
diff options
context:
space:
mode:
Diffstat (limited to 'ini.h')
-rw-r--r--ini.h62
1 files changed, 55 insertions, 7 deletions
diff --git a/ini.h b/ini.h
index 4db7d7720da7..d1a2ba825a7a 100644
--- a/ini.h
+++ b/ini.h
@@ -1,5 +1,9 @@
/* inih -- simple .INI file parser
+SPDX-License-Identifier: BSD-3-Clause
+
+Copyright (C) 2009-2020, Ben Hoyt
+
inih is released under the New BSD license (see LICENSE.txt). Go to the project
home page for more info:
@@ -7,8 +11,8 @@ https://github.com/benhoyt/inih
*/
-#ifndef __INI_H__
-#define __INI_H__
+#ifndef INI_H
+#define INI_H
/* Make this header file easier to include in C++ code */
#ifdef __cplusplus
@@ -22,6 +26,27 @@ extern "C" {
#define INI_HANDLER_LINENO 0
#endif
+/* Visibility symbols, required for Windows DLLs */
+#ifndef INI_API
+#if defined _WIN32 || defined __CYGWIN__
+# ifdef INI_SHARED_LIB
+# ifdef INI_SHARED_LIB_BUILDING
+# define INI_API __declspec(dllexport)
+# else
+# define INI_API __declspec(dllimport)
+# endif
+# else
+# define INI_API
+# endif
+#else
+# if defined(__GNUC__) && __GNUC__ >= 4
+# define INI_API __attribute__ ((visibility ("default")))
+# else
+# define INI_API
+# endif
+#endif
+#endif
+
/* Typedef for prototype of handler function. */
#if INI_HANDLER_LINENO
typedef int (*ini_handler)(void* user, const char* section,
@@ -48,22 +73,22 @@ typedef char* (*ini_reader)(char* str, int num, void* stream);
stop on first error), -1 on file open error, or -2 on memory allocation
error (only when INI_USE_STACK is zero).
*/
-int ini_parse(const char* filename, ini_handler handler, void* user);
+INI_API int ini_parse(const char* filename, ini_handler handler, void* user);
/* Same as ini_parse(), but takes a FILE* instead of filename. This doesn't
close the file when it's finished -- the caller must do that. */
-int ini_parse_file(FILE* file, ini_handler handler, void* user);
+INI_API int ini_parse_file(FILE* file, ini_handler handler, void* user);
/* Same as ini_parse(), but takes an ini_reader function pointer instead of
filename. Used for implementing custom or string-based I/O (see also
ini_parse_string). */
-int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler,
+INI_API int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler,
void* user);
/* Same as ini_parse(), but takes a zero-terminated string with the INI data
instead of a file. Useful for parsing INI data from a network socket or
already in memory. */
-int ini_parse_string(const char* string, ini_handler handler, void* user);
+INI_API int ini_parse_string(const char* string, ini_handler handler, void* user);
/* Nonzero to allow multi-line value parsing, in the style of Python's
configparser. If allowed, ini_parse() will call the handler with the same
@@ -123,8 +148,31 @@ int ini_parse_string(const char* string, ini_handler handler, void* user);
#define INI_STOP_ON_FIRST_ERROR 0
#endif
+/* Nonzero to call the handler at the start of each new section (with
+ name and value NULL). Default is to only call the handler on
+ each name=value pair. */
+#ifndef INI_CALL_HANDLER_ON_NEW_SECTION
+#define INI_CALL_HANDLER_ON_NEW_SECTION 0
+#endif
+
+/* Nonzero to allow a name without a value (no '=' or ':' on the line) and
+ call the handler with value NULL in this case. Default is to treat
+ no-value lines as an error. */
+#ifndef INI_ALLOW_NO_VALUE
+#define INI_ALLOW_NO_VALUE 0
+#endif
+
+/* Nonzero to use custom ini_malloc, ini_free, and ini_realloc memory
+ allocation functions (INI_USE_STACK must also be 0). These functions must
+ have the same signatures as malloc/free/realloc and behave in a similar
+ way. ini_realloc is only needed if INI_ALLOW_REALLOC is set. */
+#ifndef INI_CUSTOM_ALLOCATOR
+#define INI_CUSTOM_ALLOCATOR 0
+#endif
+
+
#ifdef __cplusplus
}
#endif
-#endif /* __INI_H__ */
+#endif /* INI_H */