libconfini
Yet another INI parser
|
Go to the documentation of this file.
15 #ifndef _LIBCONFINI_HEADER_
16 #define _LIBCONFINI_HEADER_
28 #define _LIBCONFINI_INIFORMAT_DESCR_(NAME, OFFSET, SIZE, DEFVAL) \
29 unsigned char NAME:SIZE;
30 #define _LIBCONFINI_DEFAULT_FMT_DESCR_(NAME, OFFSET, SIZE, DEFVAL) DEFVAL,
31 #define _LIBCONFINI_UNIXLIKE_FMT_DESCR_(NAME, OFFSET, SIZE, DEFVAL) 0,
32 #define _LIBCONFINI_INIFORMAT_TYPE_ \
33 struct IniFormat { INIFORMAT_TABLE_AS(_LIBCONFINI_INIFORMAT_DESCR_) }
34 #define _LIBCONFINI_DEFAULT_FORMAT_ \
35 { INIFORMAT_TABLE_AS(_LIBCONFINI_DEFAULT_FMT_DESCR_) }
36 #define _LIBCONFINI_UNIXLIKE_FORMAT_ \
37 { INIFORMAT_TABLE_AS(_LIBCONFINI_UNIXLIKE_FMT_DESCR_) }
52 #define INIFORMAT_TABLE_AS(_____)
56 _____( delimiter_symbol, 0, 7, INI_EQUALS ) \
57 _____( case_sensitive, 7, 1, 0 )
59 _____( semicolon_marker, 8, 2, INI_DISABLED_OR_COMMENT ) \
60 _____( hash_marker, 10, 2, INI_DISABLED_OR_COMMENT ) \
61 _____( section_paths, 12, 2, INI_ABSOLUTE_AND_RELATIVE ) \
62 _____( multiline_nodes, 14, 2, INI_MULTILINE_EVERYWHERE )
64 _____( no_single_quotes, 16, 1, 0 ) \
65 _____( no_double_quotes, 17, 1, 0 ) \
66 _____( no_spaces_in_names, 18, 1, 0 ) \
67 _____( implicit_is_not_empty, 19, 1, 0 ) \
68 _____( do_not_collapse_values, 20, 1, 0 ) \
69 _____( preserve_empty_quotes, 21, 1, 0 ) \
70 _____( disabled_after_space, 22, 1, 0 ) \
71 _____( disabled_can_be_implicit, 23, 1, 0 )
78 #define INIFORMAT_HAS_NO_ESC(FORMAT) \
79 (FORMAT.multiline_nodes == INI_NO_MULTILINE && \
80 FORMAT.no_double_quotes && FORMAT.no_single_quotes)
150 size_t string_length,
161 const char * ini_string,
175 register char *
const ini_source,
176 const size_t ini_length,
180 void *
const user_data
185 FILE *
const ini_file,
189 void *
const user_data
194 const char *
const path,
198 void *
const user_data
203 const char *
const simple_string_a,
204 const char *
const simple_string_b,
210 const char *
const simple_string,
211 const char *
const ini_string,
217 const char *
const ini_string_a,
218 const char *
const ini_string_b,
224 const char *
const ini_string_a,
225 const char *
const ini_string_b,
226 const char delimiter,
232 char *
const ini_string,
238 char *
const ini_string,
244 const char *
const ini_string,
245 const char delimiter,
251 const char *
const ini_string,
252 const char delimiter,
255 void *
const user_data
260 const char **
const ini_strptr,
261 const char delimiter,
267 char *
const ini_string,
268 const char delimiter,
274 char *
const ini_string,
275 const char delimiter,
281 char **
const ini_strptr,
282 const char delimiter,
288 char *
const ini_string,
289 const char delimiter,
292 void *
const user_data
302 char *
const implicit_value,
303 const size_t implicit_v_len
318 const char *
const ini_string,
319 const int return_value
328 const char * ini_string
333 const char * ini_string
338 const char * ini_string
343 const char * ini_string
351 #define ini_get_float \
352 _Pragma("GCC warning \"function `ini_get_float()` is deprecated for parsing a `double` data type; use `ini_get_double()` instead\"") \
363 #define CONFINI_ERROR 252
516 #undef _LIBCONFINI_UNIXLIKE_FORMAT_
517 #undef _LIBCONFINI_DEFAULT_FORMAT_
518 #undef _LIBCONFINI_INIFORMAT_TYPE_
519 #undef _LIBCONFINI_UNIXLIKE_FMT_DESCR_
520 #undef _LIBCONFINI_DEFAULT_FMT_DESCR_
521 #undef _LIBCONFINI_INIFORMAT_DESCR_
Definition: confini.h:452
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:4601
Definition: confini.h:418
Definition: confini.h:462
_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 if they match.
Definition: confini.c:3191
Definition: confini.h:391
Definition: confini.h:468
long int(*const ini_get_lint)(const char *ini_string)
Link to atol()
Definition: confini.c:4875
Definition: confini.h:379
Definition: confini.h:403
const IniFormat format
Definition: confini.h:108
uint32_t IniFormatNum
The unique ID of an INI format (24-bit maximum)
Definition: confini.h:123
size_t v_len
Definition: confini.h:114
char * data
Definition: confini.h:110
Definition: confini.h:419
ConfiniInterruptNo
Error codes.
Definition: confini.h:369
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:3616
struct IniDispatch IniDispatch
Dispatch of a single INI node.
IniFormat ini_ntof(IniFormatNum format_id)
Constructs a new IniFormat according to an IniFormatNum.
Definition: confini.c:4781
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:160
Definition: confini.h:443
Definition: confini.h:413
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:4458
IniFormatNum ini_fton(const IniFormat format)
Calculates the IniFormatNum of an IniFormat.
Definition: confini.c:4760
Definition: confini.h:376
Global statistics about an INI file.
Definition: confini.h:97
Definition: confini.h:374
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:4171
_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 if they match.
Definition: confini.c:3023
Definition: confini.h:378
Definition: confini.h:381
IniDelimiters
Most used key-value and array delimiters (but a delimiter may also be any other ASCII character)
Definition: confini.h:412
Definition: confini.h:377
long long int(*const ini_get_llint)(const char *ini_string)
Link to atoll()
Definition: confini.c:4877
Definition: confini.h:446
Definition: confini.h:465
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 using a FILE structure as argument.
Definition: confini.c:2768
size_t ini_array_collapse(char *const ini_string, const char delimiter, const IniFormat format)
Compresses the distribution of the data of a stringified INI array by removing all the white spaces t...
Definition: confini.c:4261
int ini_get_bool(const char *const ini_string, const int return_value)
Checks whether a string matches one of the booleans listed in the private constant INI_BOOLEANS (case...
Definition: confini.c:4826
struct IniStatistics IniStatistics
Global statistics about an INI file.
Dispatch of a single INI node.
Definition: confini.h:107
const size_t members
Definition: confini.h:100
Definition: confini.h:432
Definition: confini.h:398
size_t dispatch_id
Definition: confini.h:116
size_t INI_GLOBAL_IMPLICIT_V_LEN
Length of the value assigned to implicit keys – this may be any unsigned number, independently of the...
Definition: confini.c:4896
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:2262
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:3744
double(*const ini_get_double)(const char *ini_string)
Link to atof()
Definition: confini.c:4879
struct IniFormat IniFormat
24-bit bitfield representing the format of an INI file (INI dialect)
int(*const ini_get_int)(const char *ini_string)
Link to atoi()
Definition: confini.c:4873
Definition: confini.h:449
const IniFormat format
Definition: confini.h:98
char * value
Definition: confini.h:111
void ini_global_set_lowercase_mode(_Bool lowercase)
Sets the value of the global variable INI_GLOBAL_LOWERCASE_MODE.
Definition: confini.c:4719
Definition: confini.h:383
Definition: confini.h:370
Definition: confini.h:401
_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 if they match.
Definition: confini.c:2925
Definition: confini.h:429
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:3930
const char * append_to
Definition: confini.h:112
Definition: confini.h:434
Definition: confini.h:471
int(* IniDispHandler)(IniDispatch *dispatch, void *user_data)
Callback function for handling an IniDispatch structure.
Definition: confini.h:138
IniSectionPaths
Possible values of IniFormat::section_paths.
Definition: confini.h:442
Definition: confini.h:431
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:487
IniNodeType
INI node types.
Definition: confini.h:390
_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 if they match.
Definition: confini.c:3385
Definition: confini.h:397
Definition: confini.h:400
_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:4892
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:148
IniMultiline
Possible values of IniFormat::multiline_nodes.
Definition: confini.h:461
const size_t bytes
Definition: confini.h:99
Definition: confini.h:372
uint8_t type
Definition: confini.h:109
Definition: confini.h:417
Definition: confini.h:402
char * INI_GLOBAL_IMPLICIT_VALUE
Value to be assigned to implicit keys (default value: NULL)
Definition: confini.c:4894
Definition: confini.h:416
size_t at_len
Definition: confini.h:115
size_t d_len
Definition: confini.h:113
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 using a path as argument.
Definition: confini.c:2848
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:4744
static const IniFormat INI_DEFAULT_FORMAT
A model format for standard INI files.
Definition: confini.h:479
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:4046
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:4534
int(* IniStatsHandler)(IniStatistics *statistics, void *user_data)
Callback function for handling an IniStatistics structure.
Definition: confini.h:129
Definition: confini.h:393
IniCommentMarker
Possible values of IniFormat::semicolon_marker and IniFormat::hash_marker (i.e., meaning of /\s+[#;]/...
Definition: confini.h:428