libconfini 1.10.1

libconfini is a simple INI parsing library with the ability to read disabled entries (i.e., valid entries nested in comments). libconfini does not store the data read from an INI file, but rather dispatches it, formatted, to a custom listener. The code is written in C (C99) and does not depend on any particular library, except for the C standard libraries stdio.h, stdlib.h and stdint.h.

Tags ini library unix configuration configuration-file ini-parser ini-reader ini-config conf shared-library config configuration-management gnu
License GNU GPLv3
State stable

Recent Releases

1.10.119 Sep 2019 17:09 minor bugfix: Changes: * Code review (`strip_ini_cache()`) a small bug concerning `CR` + `LF` line breaks has been fixed
1.10.002 Aug 2019 18:25 minor feature: Changes: * Function `strip_ini_cache()` has been created see issue #9 ( most of the code of `load_ini_file()` has now been moved to `strip_ini_cache()` * Code review (`load_ini_file()` and `load_ini_path()`) * Documentation * Created new examples (see `examples/topics/strip_ini_cache.c`)
1.9.225 Apr 2019 14:43 documentation: * Documentation * Created new examples (see examples/miscellanea/colon_as_delimiter.c)
1.9.129 Mar 2019 06:25 major bugfix: * Private function further_cuts(): fixed bug concerning blocks that had been marked as INI_IGNORE wrongly re-marked as comments after 1.9.0 (due to this bug error CONFINI_EOOR was thrown) * Private function load_ini_file(): fixed bug related to IniFormat::disabled_after_space stopping to work properly after 1.9.0 * Documentation
1.9.026 Mar 2019 03:16 minor feature: * Improved performance of load_ini_file() (ambiguous disabled entries that have been already tested with a negative result before invoking f_init() will be internally marked as comments for not being tested twice an example of such ambiguous disabled entries is # foo #bar ) * Added --multiversion option to the script for future major version changes (see INSTALL) * Added --with-pkgconfigdir=DIR option to the configure script * Private function dqultrim_s() has been created * Private macros _LIBCONFINI_IS_COM_MARKER_() and _LIBCONFINI_SC_INT_MARKER_ have been created * Private macro _LIBCONFINI_INLINE_MARKER_ has been renamed to _LIBCONFINI_IC_INT_MARKER_ * Code review (load_ini_file(), private functions uncomment() and further_cuts()) * Documentation * Examples
1.8.618 Mar 2019 02:19 minor feature: * Code review (load_ini_file(), private functions get_type_as_active() and further_cuts()) * Documentation * Examples
1.8.511 Mar 2019 01:29 documentation: * Documentation
1.8.408 Jan 2019 03:45 minor feature: * replaced #!/bin/sh with #!/bin/bash see issue #7
1.8.319 Nov 2018 23:14 minor feature: * Code review (ini_string_match_ss(), ini_string_match_si(), ini_array_foreach(), ini_array_split()) * Documentation * Examples
1.8.211 Nov 2018 23:20 minor feature: * Code review (private function further_cuts()) * Optimization flag -O2 seems to be working better than -O3 on Unix systems: conditionally use -O2 or -O3 depending on the host * Use libtool's -avoid-version only when compiling under native Microsoft Windows environment * Added --clean option to the script * Updated Autotools macros * Documentation * Examples
1.8.105 Nov 2018 06:25 minor feature: * Code review (load_ini_file(), ini_array_foreach(), ini_array_split(), private functions is_some_space(), ltrim_s(), ltrim_h(), ltrim_hh(), rtrim_s() and rtrim_h()) * Updated Autotools macros * Documentation * Examples
1.8.029 Oct 2018 00:41 minor feature: * Created `typedef`s of callback functions (types `IniStatsHandler` and `IniDispHandler`, both required by `load_ini_file()` and `load_ini_path()`, type `IniStrHandler`, required by `ini_array_split()`, and type `IniSubstrHandler`, required by `ini_array_foreach()`) * Internal macro `_LIBCONFINI_INIFORMAT_AS_()` has been renamed to `INIFORMAT_TABLE_AS()` and marked as public please note that the arguments that are passed to the user-given callback are now different * Introduced **libtool** versioning system for the compiled binary (versioning begins with current version 1.8.0, represented as `0:0:0`); note that **libtool** versioning system does not affect the versioning of the project currently in use, but constitutes only a means for the linker to keep track of incompatibilities between different releases of the library * Improved support for building **libconfini** under Microsoft Windows (created Windows resource file `src/winres.rc`; conditionally added option `-avoid-version` to `LDFLAGS` in order to skip foreign **libtool** versioning system under Microsoft Windows; created batch script `mgwmake.bat` for compiling **libconfini** under Microsoft Windows without **Autotools**) * Code review (`ini_fton()` and `ini_ntof()`) * Updated **Autotools** macros * Documentation * Created new examples (see `examples/topics/ini_array_foreach.c`, `examples/topics/ini_array_split.c` and `examples/miscellanea/stats_only.c`)
1.7.319 Oct 2018 04:45 minor feature: * Code review (`load_ini_file()`, private function `get_type_as_active()`) * Made sure that the `CLOSE_SECTION` character is never followed by anything else than empty spaces * Documentation
1.7.212 Oct 2018 12:45 minor feature: * Code review (load_ini_path() -- see issue #6 concerning file access under Microsoft Windows) * Documentation -- see issues #5 and #6
1.7.108 Oct 2018 22:13 minor feature: * Added `--disable-doc` and `disable-examples` options to the `configure` script * Added `--noconfigure` and `--help` options to the `` script
1.7.006 Oct 2018 13:45 minor feature: * Default format `INI_UNIXLIKE_FORMAT` has been created * `IniFormat::no_disabled_after_space` has been renamed to `IniFormat::disabled_after_space` (the field has opposite meaning now, please invert your booleans accordingly) * Moved `#include ` from `confini.c` to `confini.h` * Documentation * Examples
1.6.329 Sep 2018 22:04 minor feature: - Constant CONFINI_EFEOOR has been renamed to CONFINI_EOOR - Code review - Documentation
1.6.223 May 2018 03:15 minor feature: Function ini_array_match() has been created. Documentation. Examples.
1.6.119 May 2018 03:15 minor feature: Functions ini_array_shift(), ini_array_break(), ini_array_release() have been created. Made sure that escapable characters cannot be used as delimiters in formats that support escape sequences. Boolean pair OFF/ON has been added to the list of supported INI booleans. Boolean pair 0/1 has been removed from the list of supported INI booleans. Public macro INIFORMAT_HAS_NO_ESC has been created. Redundant function ini_get_lazy_bool() has been removed. The buffer pointed by IniDispatch::append_to is now passed as const. Code review (ini_string_match_ss(), ini_string_match_si(), ini_string_match_ii(), ini_string_parse(), ini_array_get_length(), ini_array_foreach(), ini_array_split(), private functions uncomment() and further_cuts()). Private functions get_metachar_pos() and collapse_empty_quotes() have been created. Private functions sanitize_key_name() and get_delimiter_pos() have been renamed to collapse_everything() and getn_metachar_pos() (the latter now requires one more argument). Documentation. Examples.
1.6.015 May 2018 03:15 minor feature: Added IniFormat::section_paths option to the IniFormat bitfield. Created enum IniSectionPaths. Made sure that implicit keys containing only empty quotes are ignored in formats that support quotes. Private function ultrim_h() has been renamed to qultrim_h() and rewritten. Code review (ini_array_foreach(), ini_array_split(), ini_string_parse(), private functions get_delimiter_pos() and get_type_as_active()).
1.5.203 May 2018 03:15 minor feature: Changed fields order and sizes in the IniFormat bitfield. Changed internal values of INI_KEY, INI_SECTION, INI_DISABLED_KEY andINI_DISABLED_SECTION (see enum IniNodeType). Moved example INI files to examples/ini_files. Documentation.
1.5.129 Apr 2018 03:15 minor feature: Added IniFormat::preserve_empty_quotes option to the IniFormat bitfield. IniFormat::hash, IniFormat::semicolon and IniFormat::multiline_entries have been renamed to IniFormat::hash_marker, IniFormat::semicolon_marker and IniFormat::multiline_nodes. Function ini_string_parse() has been created. Function ini_collapse_array() has been renamed to ini_array_collapse(). Function ini_split_array() has been renamed to ini_array_split(). Function ini_set_implicit_value() has been renamed toini_global_set_implicit_value(). Function confini_global_set_lowercase_mode() has been renamed toini_global_set_lowercase_mode(). Global variable INI_INSENSITIVE_LOWERCASE has been renamed toINI_GLOBAL_LOWERCASE_MODE. Default value of INI_GLOBAL_LOWERCASE_MODE has been set to FALSE. Data type IniFormatId has been renamed to IniFormatNum. ini_format_get_id() has been renamed to ini_fton(). ini_format_set_to_id() has been renamed to ini_ntof() -- now accepts only one argument and has a return value. Constants INI_PARSE_COMMENT, INI_SHOW_COMMENT, INI_FORGET_COMMENT andINI_NORMAL_CHARACTER have been renamed to INI_DISABLED_OR_COMMENT,INI_ONLY_COMMENT, INI_IGNORE and INI_IS_NOT_A_MARKER. Constants INI_EVERYTHING_MULTILINE, INI_ACTIVE_AND_DISABLED_MULTILINE andINI_ACTIVE_MULTILINE have been renamed to INI_MULTILINE_EVERYWHERE,INI_BUT_COMMENTS, and INI_BUT_DISABLED_AND_COMMENTS. Constants CONFINI_EIINTR and CONFINI_EFEINTR have been renamed toCONFINI_IINTR and CONFINI_FEINTR. enum tags ConfiniErrorNo and IniComments have been renamed toConfiniInterruptNo and IniCommentMarker. Private function sanitize_section_name() has been renamed tosanitize_section_path(). Created private function sanitize_key_name(). Code review (ini_array_get_length(), ini_string_match_si(),ini_string_match_ii(), private functions sanitize_section_path() andcollapse_spaces()). Made sure that sections appended to root as pseudo-subsections will be dispatched always without the leading dot. Made sure that key and section names
1.5.018 Apr 2018 19:35 minor feature: Changes: * Added `IniFormat::preserve_empty_quotes` option to the `IniFormat` bitfield * `IniFormat::hash`, `IniFormat::semicolon` and `IniFormat::multiline_entries` have been renamed to `IniFormat::hash_marker`, `IniFormat::semicolon_marker` and `IniFormat::multiline_nodes` * Function `ini_string_parse()` has been created * Function `ini_collapse_array()` has been renamed to `ini_array_collapse()` * Function `ini_split_array()` has been renamed to `ini_array_split()` * Function `ini_set_implicit_value()` has been renamed to `ini_global_set_implicit_value()` * Function `confini_global_set_lowercase_mode()` has been renamed to `ini_global_set_lowercase_mode()` * Global variable `INI_INSENSITIVE_LOWERCASE` has been renamed to `INI_GLOBAL_LOWERCASE_MODE` * Default value of `INI_GLOBAL_LOWERCASE_MODE` has been set to `FALSE` * Data type `IniFormatId` has been renamed to `IniFormatNum` * `ini_format_get_id()` has been renamed to `ini_fton()` * `ini_format_set_to_id()` has been renamed to `ini_ntof()` -- now accepts only one argument and has a return value * Constants `INI_PARSE_COMMENT`, `INI_SHOW_COMMENT`, `INI_FORGET_COMMENT` and `INI_NORMAL_CHARACTER` have been renamed to `INI_DISABLED_OR_COMMENT`, `INI_ONLY_COMMENT`, `INI_IGNORE` and `INI_IS_NOT_A_MARKER` * Constants `INI_EVERYTHING_MULTILINE`, `INI_ACTIVE_AND_DISABLED_MULTILINE` and `INI_ACTIVE_MULTILINE` have been renamed to `INI_MULTILINE_EVERYWHERE`, `INI_BUT_COMMENTS`, and `INI_BUT_DISABLED_AND_COMMENTS` * Constants `CONFINI_EIINTR` and `CONFINI_EFEINTR` have been renamed to `CONFINI_IINTR` and `CONFINI_FEINTR` * `enum` tags `ConfiniErrorNo` and `IniComments` have been renamed to `ConfiniInterruptNo` and `IniCommentMarker` * Private function `sanitize_section_name()` has been renamed to `sanitize_section_path()` * Created private function `sanitize_key_name()` * Code review (`ini_array_get_length()`, `ini_string_match_si()`, `ini_string_match_ii()`, private functions `sanitize_sectio