From 8faa445d364dda147146e2036f6460a5347736f0 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Sun, 17 Jan 2010 17:07:22 +0100 Subject: add config parser Signed-off-by: Bernhard Reutner-Fischer --- include/internal/parse_config.h | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 include/internal/parse_config.h (limited to 'include/internal') 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 + * + * 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 +#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; + -- cgit v1.2.3