libconfini
Yet another INI parser
ChangeLog

Record of notable changes

1.8.5 – 2019-03-10

Changes:

  • Documentation

1.8.4 – 2019-01-08

Changes:

  • autogen.sh: replaced #!/bin/sh with #!/bin/bash – see issue #7

1.8.3 – 2018-11-19

Changes:

1.8.2 – 2018-11-11

Changes:

  • 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 autogen.sh script
  • Updated Autotools macros
  • Documentation
  • Examples

1.8.1 – 2018-11-04

Changes:

1.8.0 – 2018-10-28

Changes:

  • Created typedefs 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.3 – 2018-10-19

Changes:

  • 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.2 – 2018-10-12

Changes:

  • Code review (load_ini_path() – see issue #6 concerning file access under Microsoft Windows)
  • Documentation – see issues #5 and #6

1.7.1 – 2018-10-08

Changes:

  • Added --disable-doc and --disable-examples options to the configure script
  • Added --noconfigure and --help options to the autogen.sh script

1.7.0 – 2018-10-06

Changes:

  • 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 <stdio.h> from confini.c to confini.h
  • Documentation
  • Examples

1.6.3 – 2018-09-29

Changes:

  • Constant † CONFINI_EFEOOR has been renamed to CONFINI_EOOR
  • Code review
  • Documentation

1.6.2 – 2018-05-21

Changes:

1.6.1 – 2018-05-17

Changes:

1.6.0 – 2018-05-15

Changes:

1.5.2 – 2018-05-06

Changes:

1.5.1 – 2018-04-30

Changes:

  • Changed field order and size in the IniFormat bitfield
  • Changed internal values of INI_KEY, INI_SECTION, INI_DISABLED_KEY and INI_DISABLED_SECTION (see enum IniNodeType)
  • Moved example INI files to examples/ini_files
  • Documentation

1.5.0 – 2018-04-22

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_section_path() and collapse_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 will always be cleaned of empty quotes in formats that support quotes (relevant for space collapsing)
  • Removed unused internationalization support from Autotools
  • Documentation
  • Examples

Due to the many renamings this release is largely incompatible with previous versions. However it is possible to reach full backward compatibility with version 1.4.2 by using the following aliases:

#define hash hash_marker
#define semicolon semicolon_marker
#define multiline_entries multiline_nodes
#define ini_collapse_array ini_array_collapse
#define ini_split_array ini_array_split
#define ini_set_implicit_value ini_global_set_implicit_value
#define INI_INSENSITIVE_LOWERCASE INI_GLOBAL_LOWERCASE_MODE
#define IniFormatId IniFormatNum
#define ini_format_get_id ini_fton
#define ini_format_set_to_id(DEST, SRC) (*(DEST) = ini_ntof(SRC))
#define INI_PARSE_COMMENT INI_DISABLED_OR_COMMENT
#define INI_SHOW_COMMENT INI_ONLY_COMMENT
#define INI_FORGET_COMMENT INI_IGNORE
#define INI_NORMAL_CHARACTER INI_IS_NOT_A_MARKER
#define INI_EVERYTHING_MULTILINE INI_MULTILINE_EVERYWHERE
#define INI_ACTIVE_AND_DISABLED_MULTILINE INI_BUT_COMMENTS
#define INI_ACTIVE_MULTILINE INI_BUT_COMMENTS
#define CONFINI_EIINTR CONFINI_IINTR
#define CONFINI_EFEINTR CONFINI_FEINTR

1.4.2 – 2017-10-05

Changes:

  • Code review and bug fix in private function † sanitize_section_name()

1.4.1 – 2017-10-02

Changes:

1.4.0 – 2017-09-07

Changes:

  • Function load_ini_file() now uses a FILE handle instead of a path – in order to use a path (a string), the shortcut load_ini_path() has been created
  • Added #include <stdint.h> to confini.c
  • Moved #include <stdio.h> from confini.c to confini.h
  • nul characters found in INI files will be skipped
  • unsigned long int replaced with size_t in return values of ini_unquote(), ini_array_get_length() and † ini_collapse_array()
  • unsigned int replaced with int in return values of load_ini_file(), ini_array_foreach() and † ini_split_array()
  • UTF-8 BOM recognized and skipped
  • Version numbering standardized (${major}.${minor}.${revision} instead of ${major}.${minor}-${release})
  • Documentation

1.3-5 – 2017-05-04

Changes:

1.3-4 – 2016-11-10

Changes:

  • Fixed some bugs concerning comments and disabled entries
  • Removed recursion in private function further_cuts()

1.3-3 – 2016-11-02

Changes:

  • Files ending without EOL: bug fixed
  • Added new documentation

1.3-2 – 2016-10-28

Changes:

  • Non collapsing spaces in implicit keys: bug fixed
  • Code optimization
  • Added new documentation

1.3-1 – 2016-10-24

Changes:

  • ini_collapse_array() has been created
  • index and format parameters have been added to callback function in ini_array_foreach() and † ini_split_array()
  • INI_ERASE_COMMENT has been renamed to † INI_FORGET_COMMENT
  • Added new documentation and examples

1.2-2 – 2016-10-21

Changes:

  • Fixed bug in formatting inline comments
  • Code optimization

1.2-1 – 2016-10-20

Changes:

1.1-2 – 2016-10-15

Changes:

  • IniFormatMask has been renamed to IniFormatId
  • ini_format_set_from_mask() has been renamed to † ini_format_set_to_id()
  • ini_format_calculate_mask() has been renamed to † ini_format_get_id()
  • IniFormat::no_spaces_in_names: small bug fixed
  • General code review

1.1-1 – 2016-10-14

Changes:

  • Fixed quotes nesting bug
  • enum IniDelimiters has been created
  • Added support for INI_ANY_SPACE (0) as delimiter in ini_array_get_length(), ini_array_foreach() and † ini_split_array()
  • IniFormat::no_spaces_in_names has been created
  • IniFormat::no_disabled_after_spaces has been renamed to † IniFormat::no_disabled_after_space
  • IniFormat::preserve_spaces_in_values has been renamed to † IniFormat::no_collapsed_values

1.0-1 – 2016-10-10

Changes:

  • ini_array_getlength() has been renamed to ini_array_get_length()
  • ini_getbool() has been renamed to ini_get_bool()
  • ini_getlazybool() has been renamed to ini_get_lazy_bool()
  • ini_getfloat() has been renamed to ini_get_float()
  • ini_getllint() has been renamed to ini_get_llint()
  • get_ini_format_mask() has been renamed to † ini_format_calculate_mask()
  • read_ini_format_mask() has been renamed to † ini_format_set_from_mask()

0.9-4 – 2016-10-07

Changes:

  • Small bug regarding multiline inline comments has been fixed

0.9-3 – 2016-10-06

Changes:

  • Small bug regarding inline comments has been fixed

0.9-2 – 2016-10-06

Changes:

  • Documentation has been moved to docs/

0.9-1 – 2016-10-05

libconfini 0.9-1 is ready to be published!