Canfigger is a C library for parsing configuration files. It reads a file and returns the contents as a linked list of key-value nodes. Each node can carry a list of attributes — extra values separated by a delimiter on the same line. The library includes helpers for reading attributes as integers and for parsing RGBA hex colors. It also provides functions for locating standard user directories on Linux (XDG), macOS, and Windows.
The following config file example represents the format handled by canfigger:
foo = bar
blue = color, shiny
statement = hello world, obvious
# An option with no value or attributes
FeatureFooEnabled
# key, value with 2 attributes
dhcp-range = 192.168.0.50, 192.168.0.150, 12
# key, value with 9 attributes
solar_system = sun, Mercury, Venus, Earth, Mars, Jupiter, Saturn, Neptune, Uranus, Pluto
You can change the attribute delimiter character by passing it as the second argument:
canfigger_parse_file(filename_ptr, ':');
Canfigger provides helpers for locating standard per-user paths on Linux (XDG), macOS, and Windows:
canfigger_config_dir(appname)— returns the per-application config directory ($XDG_CONFIG_HOME/appnameor$HOME/.config/appname)canfigger_data_dir(appname)— returns the per-application data directory ($XDG_DATA_HOME/appnameor$HOME/.local/share/appname)canfigger_cache_dir(appname)— returns the per-application cache directory ($XDG_CACHE_HOME/appnameor$HOME/.cache/appname)canfigger_config_file(filename)— returns a path directly under the base config directory, without an application subdirectory ($XDG_CONFIG_HOME/filenameor$HOME/.config/filename); useful when the config file lives at the config root rather than in a per-application subdirectorycanfigger_path_join(dir, file)— joins a directory and filename with the platform separator
See the API documentation for details.
None
meson setup _build
cd _build
ninja
For configuration options, use meson configure (see the Meson
docs for detailed usage).
meson test (-v)
Example programs will be built when you run ninja. If you want to try them
with a different config file, give them the name of a config file as an
argument.