toml/README.md

102 lines
2.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# tomlc99
TOML in c99; v0.4.0 compliant.
# Usage
Please see the `toml.h` file for details. What follows is a simple example that
parses this config file:
```
[server]
   host = "www.example.com"
port = 80
```
For each config param, the code first extracts a raw value and then
convert it to a string or integer depending on context.
```
FILE* fp;
toml_table_t* conf;
toml_table_t* server;
const char* raw;
char* host;
int64_t port;
char errbuf[200];
/* open file and parse */
if (0 == (fp = fopen(FNAME, "r"))) {
perror("fopen");
exit(1);
}
conf = toml_parse_file(fp, errbuf, sizeof(errbuf));
fclose(fp);
if (0 == conf) {
fprintf(stderr, "ERROR: %s\n", errbuf);
exit(1);
}
/* locate the [server] table */
if (0 == (server = toml_table_in(conf, "server"))) {
fprintf(stderr, "ERROR: missing [server]\n");
toml_free(conf);
exit(1);
}
/* extract host config value */
if (0 == (raw = toml_raw_in(server, "host"))) {
fprintf(stderr, "ERROR: missing 'host' in [server]\n");
toml_free(conf);
exit(1);
}
if (toml_rtos(raw, &host)) {
fprintf(stderr, "ERROR: bad value in 'host'\n");
toml_free(conf);
exit(1);
}
/* extract port config value */
if (0 == (raw = toml_raw_in(server, "port"))) {
fprintf(stderr, "ERROR: missing 'port' in [server]\n");
free(host);
toml_free(conf);
exit(1);
}
if (toml_rtoi(raw, &port)) {
fprintf(stderr, "ERROR: bad value in 'port'\n");
free(host);
toml_free(conf);
exit(1);
}
/* done with conf */
toml_free(conf);
/* use host and port */
do_work(host, port);
/* clean up */
free(host);
```
# Building
A normal *make* suffices. Alternately, you can also simply include the
`toml.c` and `toml.h` files in your project.
# Testing
To test against the standard test set provided by BurntSushi/toml-test:
```
% make
% cd test
% bash build.sh # do this once
% bash run.sh # this will run the test suite
```