libconfini
Yet another INI parser
|
Go to the documentation of this file.
16 #ifndef _LIBCONFINI_HEADER_
17 #define _LIBCONFINI_HEADER_
36 #define __INIFORMAT_TABLE_CB_FIELDS__(NAME, OFFSET, SIZE, DEFVAL) \
37 unsigned char NAME:SIZE;
38 #define __INIFORMAT_TABLE_CB_DEFAULT__(NAME, OFFSET, SIZE, DEFVAL) DEFVAL,
39 #define __INIFORMAT_TABLE_CB_ZERO__(NAME, OFFSET, SIZE, DEFVAL) 0,
40 #define _LIBCONFINI_INIFORMAT_TYPE_ \
41 struct IniFormat { INIFORMAT_TABLE_AS(__INIFORMAT_TABLE_CB_FIELDS__) }
42 #define _LIBCONFINI_DEFAULT_FORMAT_ \
43 { INIFORMAT_TABLE_AS(__INIFORMAT_TABLE_CB_DEFAULT__) }
44 #define _LIBCONFINI_UNIXLIKE_FORMAT_ \
45 { INIFORMAT_TABLE_AS(__INIFORMAT_TABLE_CB_ZERO__) }
61 #define INIFORMAT_TABLE_AS(_____)
65 _____( delimiter_symbol, 0, 7, INI_EQUALS ) \
66 _____( case_sensitive, 7, 1, false )
68 _____( semicolon_marker, 8, 2, INI_DISABLED_OR_COMMENT ) \
69 _____( hash_marker, 10, 2, INI_DISABLED_OR_COMMENT ) \
70 _____( section_paths, 12, 2, INI_ABSOLUTE_AND_RELATIVE ) \
71 _____( multiline_nodes, 14, 2, INI_MULTILINE_EVERYWHERE )
73 _____( no_single_quotes, 16, 1, false ) \
74 _____( no_double_quotes, 17, 1, false ) \
75 _____( no_spaces_in_names, 18, 1, false ) \
76 _____( implicit_is_not_empty, 19, 1, false ) \
77 _____( do_not_collapse_values, 20, 1, false ) \
78 _____( preserve_empty_quotes, 21, 1, false ) \
79 _____( disabled_after_space, 22, 1, false ) \
80 _____( disabled_can_be_implicit, 23, 1, false )
87 #define INIFORMAT_HAS_NO_ESC(FORMAT) \
88 (FORMAT.multiline_nodes == INI_NO_MULTILINE && \
89 FORMAT.no_double_quotes && FORMAT.no_single_quotes)
100 typedef _LIBCONFINI_INIFORMAT_TYPE_
IniFormat;
159 size_t string_length,
170 const char * ini_string,
184 register char *
const ini_source,
185 const size_t ini_length,
189 void *
const user_data
194 FILE *
const ini_file,
198 void *
const user_data
203 const char *
const path,
207 void *
const user_data
212 const char *
const simple_string_a,
213 const char *
const simple_string_b,
219 const char *
const simple_string,
220 const char *
const ini_string,
226 const char *
const ini_string_a,
227 const char *
const ini_string_b,
233 const char *
const ini_string_a,
234 const char *
const ini_string_b,
235 const char delimiter,
241 char *
const ini_string,
247 char *
const ini_string,
253 const char *
const ini_string,
254 const char delimiter,
260 const char *
const ini_string,
261 const char delimiter,
264 void *
const user_data
269 const char **
const ini_strptr,
270 const char delimiter,
276 char *
const ini_string,
277 const char delimiter,
283 char *
const ini_string,
284 const char delimiter,
290 char **
const ini_strptr,
291 const char delimiter,
297 char *
const ini_string,
298 const char delimiter,
301 void *
const user_data
311 char *
const implicit_value,
312 const size_t implicit_v_len
327 const char *
const ini_string,
337 const char * ini_string
342 const char * ini_string
347 const char * ini_string
352 const char * ini_string
360 #define ini_get_float \
361 _Pragma("GCC warning \"function `ini_get_float()` is deprecated for parsing a `double` data type; use `ini_get_double()` instead\"") \
372 #define CONFINI_ERROR 252
490 static const IniFormat INI_DEFAULT_FORMAT = {
INI_EQUALS, 0,
INI_DISABLED_OR_COMMENT,
INI_DISABLED_OR_COMMENT,
INI_ABSOLUTE_AND_RELATIVE,
INI_MULTILINE_EVERYWHERE, 0, 0, 0, 0, 0, 0, 0, 0 };
498 static const IniFormat INI_UNIXLIKE_FORMAT = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
525 #undef _LIBCONFINI_UNIXLIKE_FORMAT_
526 #undef _LIBCONFINI_DEFAULT_FORMAT_
527 #undef _LIBCONFINI_INIFORMAT_TYPE_
528 #undef __INIFORMAT_TABLE_CB_ZERO__
529 #undef __INIFORMAT_TABLE_CB_DEFAULT__
530 #undef __INIFORMAT_TABLE_CB_FIELDS__
@ INI_NO_SECTIONS
Definition: confini.h:458
int ini_array_split(char *const ini_string, const char delimiter, const IniFormat format, const IniStrHandler f_foreach, void *const user_data)
Splits a stringified INI array into NUL-separated members and calls a custom function for each member...
Definition: confini.c:4696
@ INI_DOT
Definition: confini.h:423
@ INI_MULTILINE_EVERYWHERE
Definition: confini.h:468
bool ini_string_match_ss(const char *const simple_string_a, const char *const simple_string_b, const IniFormat format)
Compares two simple strings and checks whether they match.
Definition: confini.c:2967
@ INI_UNKNOWN
Definition: confini.h:396
@ INI_BUT_DISABLED_AND_COMMENTS
Definition: confini.h:474
long int(*const ini_get_lint)(const char *ini_string)
Pointer to atol()
Definition: confini.c:4986
@ CONFINI_EOOR
Definition: confini.h:383
@ INI_DISABLED_SECTION
Definition: confini.h:408
const IniFormat format
Definition: confini.h:112
uint32_t IniFormatNum
The unique ID of an INI format (24-bit maximum)
Definition: confini.h:127
size_t v_len
Definition: confini.h:118
char * data
Definition: confini.h:114
@ INI_COMMA
Definition: confini.h:424
ConfiniInterruptNo
Error codes.
Definition: confini.h:373
size_t ini_unquote(char *const ini_string, const IniFormat format)
Unescapes \', \", and \\ and removes all unescaped quotes (if single/double quotes are considered met...
Definition: confini.c:3662
bool ini_string_match_ii(const char *const ini_string_a, const char *const ini_string_b, const IniFormat format)
Compares two INI strings and checks whether they match.
Definition: confini.c:3233
int(* IniSubstrHandler)(const char *ini_string, size_t fragm_offset, size_t fragm_length, size_t fragm_num, IniFormat format, void *user_data)
Callback function for handling a selected fragment of an INI string.
Definition: confini.h:164
@ CONFINI_EROADDR
Definition: confini.h:388
@ INI_ABSOLUTE_AND_RELATIVE
Definition: confini.h:449
@ INI_ANY_SPACE
Definition: confini.h:418
char * ini_array_break(char *const ini_string, const char delimiter, const IniFormat format)
Replaces the first delimiter found (together with the spaces that surround it) with \0
Definition: confini.c:4545
IniFormatNum ini_fton(const IniFormat format)
Calculates the IniFormatNum of an IniFormat.
Definition: confini.c:4861
@ CONFINI_ENOENT
Definition: confini.h:380
Global statistics about an INI file.
Definition: confini.h:101
@ CONFINI_FEINTR
Definition: confini.h:378
size_t ini_array_shift(const char **const ini_strptr, const char delimiter, const IniFormat format)
Shifts the location pointed by ini_strptr to the next member of the INI array (without modifying the ...
Definition: confini.c:4245
@ CONFINI_EIO
Definition: confini.h:382
@ CONFINI_EBADF
Definition: confini.h:385
IniDelimiters
Common array and key-value delimiters (but a delimiter may also be any other ASCII character not pres...
Definition: confini.h:417
@ CONFINI_ENOMEM
Definition: confini.h:381
long long int(*const ini_get_llint)(const char *ini_string)
Pointer to atoll()
Definition: confini.c:4988
struct IniDispatch IniDispatch
Dispatch of a single INI node.
@ INI_ABSOLUTE_ONLY
Definition: confini.h:452
@ INI_BUT_COMMENTS
Definition: confini.h:471
void ini_global_set_lowercase_mode(const bool lowercase)
Sets the value of the global variable INI_GLOBAL_LOWERCASE_MODE.
Definition: confini.c:4820
int load_ini_file(FILE *const ini_file, const IniFormat format, const IniStatsHandler f_init, const IniDispHandler f_foreach, void *const user_data)
Parses an INI file and dispatches its content to a custom callback using a FILE structure as argument...
Definition: confini.c:2806
size_t ini_array_collapse(char *const ini_string, const char delimiter, const IniFormat format)
Compresses the distribution of the data in a stringified INI array by removing all the white spaces t...
Definition: confini.c:4339
Dispatch of a single INI node.
Definition: confini.h:111
const size_t members
Definition: confini.h:104
@ INI_IGNORE
Definition: confini.h:437
@ INI_SECTION
Definition: confini.h:403
size_t dispatch_id
Definition: confini.h:120
size_t INI_GLOBAL_IMPLICIT_V_LEN
Length of the value assigned to implicit keys (default value: 0)
Definition: confini.c:5007
int strip_ini_cache(register char *const ini_source, const size_t ini_length, const IniFormat format, const IniStatsHandler f_init, const IniDispHandler f_foreach, void *const user_data)
Parses and tokenizes a buffer containing an INI file, then dispatches its content to a custom callbac...
Definition: confini.c:2296
size_t ini_string_parse(char *const ini_string, const IniFormat format)
Unescapes \', \", and \\ and removes all unescaped quotes (if single/double quotes are considered met...
Definition: confini.c:3800
double(*const ini_get_double)(const char *ini_string)
Pointer to atof()
Definition: confini.c:4990
int(*const ini_get_int)(const char *ini_string)
Pointer to atoi()
Definition: confini.c:4984
@ INI_ONE_LEVEL_ONLY
Definition: confini.h:455
const IniFormat format
Definition: confini.h:102
char * value
Definition: confini.h:115
@ CONFINI_EFBIG
Definition: confini.h:387
@ CONFINI_SUCCESS
Definition: confini.h:374
@ INI_INLINE_COMMENT
Definition: confini.h:406
@ INI_DISABLED_OR_COMMENT
Definition: confini.h:434
size_t ini_array_get_length(const char *const ini_string, const char delimiter, const IniFormat format)
Gets the length of a stringified INI array in number of members.
Definition: confini.c:3992
bool ini_array_match(const char *const ini_string_a, const char *const ini_string_b, const char delimiter, const IniFormat format)
Compares two INI arrays and checks whether they match.
Definition: confini.c:3427
bool ini_string_match_si(const char *const simple_string, const char *const ini_string, const IniFormat format)
Compares a simple string and an INI string and and checks whether they match.
Definition: confini.c:3065
struct IniStatistics IniStatistics
Global statistics about an INI file.
const char * append_to
Definition: confini.h:116
@ INI_IS_NOT_A_MARKER
Definition: confini.h:440
@ INI_NO_MULTILINE
Definition: confini.h:477
int(* IniDispHandler)(IniDispatch *dispatch, void *user_data)
Callback function for handling an IniDispatch structure.
Definition: confini.h:142
IniSectionPaths
Possible values of IniFormat::section_paths.
Definition: confini.h:448
@ INI_ONLY_COMMENT
Definition: confini.h:436
static const IniFormat INI_UNIXLIKE_FORMAT
A model format for Unix-like .conf files (where space characters are delimiters between keys and valu...
Definition: confini.h:493
IniNodeType
INI node types.
Definition: confini.h:395
bool INI_GLOBAL_LOWERCASE_MODE
If set to true, key and section names in case-insensitive INI formats will be dispatched lowercase,...
Definition: confini.c:5003
@ INI_KEY
Definition: confini.h:402
@ INI_COMMENT
Definition: confini.h:405
int(* IniStrHandler)(char *ini_string, size_t string_length, size_t string_num, IniFormat format, void *user_data)
Callback function for handling an INI string belonging to a sequence of INI strings.
Definition: confini.h:152
IniMultiline
Possible values of IniFormat::multiline_nodes.
Definition: confini.h:467
IniFormat ini_ntof(const IniFormatNum format_id)
Constructs a new IniFormat according to an IniFormatNum.
Definition: confini.c:4882
const size_t bytes
Definition: confini.h:103
@ CONFINI_IINTR
Definition: confini.h:376
uint8_t type
Definition: confini.h:113
@ INI_COLON
Definition: confini.h:422
@ INI_DISABLED_KEY
Definition: confini.h:407
char * INI_GLOBAL_IMPLICIT_VALUE
Value to be assigned to implicit keys (default value: NULL)
Definition: confini.c:5005
@ INI_EQUALS
Definition: confini.h:421
size_t at_len
Definition: confini.h:119
size_t d_len
Definition: confini.h:117
int load_ini_path(const char *const path, const IniFormat format, const IniStatsHandler f_init, const IniDispHandler f_foreach, void *const user_data)
Parses an INI file and dispatches its content to a custom callback using a path as argument.
Definition: confini.c:2890
void ini_global_set_implicit_value(char *const implicit_value, const size_t implicit_v_len)
Sets the value to be to be assigned to implicit keys.
Definition: confini.c:4845
int ini_get_bool(const char *const ini_string, const int when_fail)
Checks whether a string matches one of the booleans listed in the private constant INI_BOOLEANS (case...
Definition: confini.c:4927
static const IniFormat INI_DEFAULT_FORMAT
A model format for standard INI files.
Definition: confini.h:485
int ini_array_foreach(const char *const ini_string, const char delimiter, const IniFormat format, const IniSubstrHandler f_foreach, void *const user_data)
Calls a custom function for each member of a stringified INI array, without modifying the content of ...
Definition: confini.c:4114
char * ini_array_release(char **const ini_strptr, const char delimiter, const IniFormat format)
Replaces the first delimiter found (together with the spaces that surround it) with \0,...
Definition: confini.c:4624
int(* IniStatsHandler)(IniStatistics *statistics, void *user_data)
Callback function for handling an IniStatistics structure.
Definition: confini.h:133
@ INI_VALUE
Definition: confini.h:398
IniCommentMarker
Possible values of IniFormat::semicolon_marker and IniFormat::hash_marker (i.e., meaning of /\s+;/ an...
Definition: confini.h:433