Skip to content
goat-based ini config parser
C Makefile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
res
src
.gitignore
license.md
makefile
readme.md

readme.md

Configator

Configator is a lightweight library for ini config file parsing. This was created to make it easy following the "DRY" coding rule without using macros, and with flexibility in mind.

It integrates very well with the Argoat arguments parser library, by using the same function pointers format. This way, you can easily load settings from an ini file while overloading them with command-line arguments if needed: the handling functions will be the same.

Configator does not use any macro or dynamic memory allocation, and was built in less than 350 lines of C99 code.

Testing

Run make to compile an example executable and perform basic testing

Using

TL;DR

Please see example.c for the condensed version (or better, read the actual documentation below). It is a bit too long to be copied here twice...

Details

Include argoat.h and compile argoat.c with your code.

Write the functions that will handle your parameters. They will be called during the parsing process, in the order given by the user

void handle_config_u8(void* data, char** value, const int pars_count)
{
	if (pars_count > 0)
	{
		*((uint8_t*) data) = atoi(*value);
	}
}

In your main, declare the variables to configure. They will be passed to the corresponding functions as void* data

	uint8_t answer = 0;

Declare the arrays of parameters by section, starting with the general section. If you don't want to handle parameters in some section, just declare it NULL.

struct configator_param* map_no_section = NULL;

Declare real sections parameters afterwards

struct configator_param map_test_section[] =
{
	{"ping", &answer, handle_config_u8},
	{"pong", &answer, handle_config_u8},
};

Then group them in the map

struct configator_param* map[] =
{
	map_no_section,
	map_test_section
};

And declare the sections array. Configator will execute the pointed function with NULL arguments at the beginning of each detected section. You can also declare sections with NULL parameters, in which case nothing will be executed.

struct configator_param sections[] =
{
	{"network_test", &answer, handle_config_u8},
};

Don't forget to put the right numbers in the lenght variables

uint16_t map_len[] = {0, 2};
uint16_t sections_len = 1;

Then initialize and use configator

struct configator config;
config.map = map;
config.map_len = map_len;
config.sections = sections;
config.sections_len = sections_len;

configator(&config, "config.ini");
printf("answer = %d\n", answer);
You can’t perform that action at this time.