summaryrefslogtreecommitdiff
path: root/include/internal
diff options
context:
space:
mode:
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2010-01-17 17:07:22 +0100
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2010-08-05 23:42:40 +0200
commit8faa445d364dda147146e2036f6460a5347736f0 (patch)
tree70b046425e9b88d95cfaf2742b670784a1c2967f /include/internal
parent6ff4fcbfe507605b2796eb8e7e44c7e8e4b33a28 (diff)
add config parser
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'include/internal')
-rw-r--r--include/internal/parse_config.h50
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;
+