diff options
author | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2010-01-17 17:07:22 +0100 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2010-08-05 23:42:40 +0200 |
commit | 8faa445d364dda147146e2036f6460a5347736f0 (patch) | |
tree | 70b046425e9b88d95cfaf2742b670784a1c2967f /include | |
parent | 6ff4fcbfe507605b2796eb8e7e44c7e8e4b33a28 (diff) |
add config parser
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/internal/parse_config.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/include/internal/parse_config.h b/include/internal/parse_config.h new file mode 100644 index 000000000..e5241105c --- /dev/null +++ b/include/internal/parse_config.h @@ -0,0 +1,50 @@ +/* vi: set sw=4 ts=4: */ +/* + * config file parser helper + * + * Copyright (C) 2008 by Vladimir Dronnikov <dronnikov@gmail.com> + * + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. + * Also for use in uClibc (http://uclibc.org/) licensed under LGPLv2.1 or later. + */ + +#include <stdio.h> +#ifndef FAST_FUNC +# define FAST_FUNC +#endif + +/* + * Config file parser + */ +enum { + PARSE_COLLAPSE = 0x00010000, /* treat consecutive delimiters as one */ + PARSE_TRIM = 0x00020000, /* trim leading and trailing delimiters */ +/* TODO: COLLAPSE and TRIM seem to always go in pair */ + PARSE_GREEDY = 0x00040000, /* last token takes entire remainder of the line */ + PARSE_MIN_DIE = 0x00100000, /* die if < min tokens found */ + /* keep a copy of current line */ + PARSE_KEEP_COPY = 0x00200000 * 0, /*ENABLE_FEATURE_CROND_D, */ +/* PARSE_ESCAPE = 0x00400000,*/ /* process escape sequences in tokens */ + /* NORMAL is: + * remove leading and trailing delimiters and collapse + multiple delimiters into one + * warn and continue if less than mintokens delimiters found + * grab everything into last token + */ + PARSE_NORMAL = PARSE_COLLAPSE | PARSE_TRIM | PARSE_GREEDY, +}; + +typedef struct parser_t { + FILE *fp; /* input file */ + char *data; /* pointer to data */ + size_t data_len; /* offset into data of begin of line */ + char *line; /* pointer to beginning of line */ + size_t line_len; /* length of line */ + smalluint allocated; +} parser_t; +parser_t* config_open(const char *filename) FAST_FUNC attribute_hidden; +int config_read(parser_t *parser, char ***tokens, unsigned flags, const char *delims) FAST_FUNC attribute_hidden; +#define config_read(parser, tokens, max, min, str, flags) \ + config_read(parser, tokens, ((flags) | (((min) & 0xFF) << 8) | ((max) & 0xFF)), str) +void config_close(parser_t *parser) FAST_FUNC attribute_hidden; + |