Skip to content

andy5995/canfigger

Repository files navigation

codeql-badge actions-c-badge cirrus-badge windows-badge

canfigger v0.3.2999

Canfigger is a lightweight C language library designed to parse configuration files. It provides functionality to read them and represent their contents as a linked list of key-value pairs, along with associated attributes for each pair.

Format

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, ':');

Platform path helpers

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/appname or $HOME/.config/appname)
  • canfigger_data_dir(appname) — returns the per-application data directory ($XDG_DATA_HOME/appname or $HOME/.local/share/appname)
  • canfigger_config_file(filename) — returns a path directly under the base config directory, without an application subdirectory ($XDG_CONFIG_HOME/filename or $HOME/.config/filename); useful when the config file lives at the config root rather than in a per-application subdirectory
  • canfigger_path_join(dir, file) — joins a directory and filename with the platform separator

See the API documentation for details.

Dependencies

None

Building

meson setup _build
cd _build
ninja

For configuration options, use meson configure (see the Meson docs for detailed usage).

Tests

meson test (-v)

Example programs

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.