summaryrefslogtreecommitdiffstats
path: root/src/config/config-parser-private.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/config-parser-private.h')
-rw-r--r--src/config/config-parser-private.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/config/config-parser-private.h b/src/config/config-parser-private.h
new file mode 100644
index 0000000..9fe98ce
--- /dev/null
+++ b/src/config/config-parser-private.h
@@ -0,0 +1,75 @@
+#ifndef CONFIG_PARSER_PRIVATE_H
+#define CONFIG_PARSER_PRIVATE_H
+
+#include "config-parser.h"
+#include "config-filter.h"
+
+enum config_line_type {
+ CONFIG_LINE_TYPE_SKIP,
+ CONFIG_LINE_TYPE_CONTINUE,
+ CONFIG_LINE_TYPE_ERROR,
+ CONFIG_LINE_TYPE_KEYVALUE,
+ CONFIG_LINE_TYPE_KEYFILE,
+ CONFIG_LINE_TYPE_KEYVARIABLE,
+ CONFIG_LINE_TYPE_SECTION_BEGIN,
+ CONFIG_LINE_TYPE_SECTION_END,
+ CONFIG_LINE_TYPE_INCLUDE,
+ CONFIG_LINE_TYPE_INCLUDE_TRY
+};
+
+struct config_section_stack {
+ struct config_section_stack *prev;
+ const char *key;
+
+ struct config_filter filter;
+ /* root=NULL-terminated list of parsers */
+ struct config_module_parser *parsers;
+ size_t pathlen;
+
+ const char *open_path;
+ unsigned int open_linenum;
+ bool is_filter;
+};
+
+struct input_stack {
+ struct input_stack *prev;
+
+ struct istream *input;
+ const char *path;
+ unsigned int linenum;
+};
+
+struct config_parser_context {
+ pool_t pool;
+ const char *path;
+ const char *const *modules;
+
+ ARRAY(struct config_filter_parser *) all_parsers;
+ struct config_module_parser *root_parsers;
+ struct config_section_stack *cur_section;
+ struct input_stack *cur_input;
+
+ string_t *str;
+ size_t pathlen;
+ unsigned int section_counter;
+ const char *error;
+
+ struct old_set_parser *old;
+
+ HASH_TABLE(const char *, const char *) seen_settings;
+ struct config_filter_context *filter;
+ bool expand_values:1;
+ bool hide_errors:1;
+};
+
+extern void (*hook_config_parser_begin)(struct config_parser_context *ctx);
+extern int (*hook_config_parser_end)(struct config_parser_context *ctx,
+ const char **error_r);
+
+int config_apply_line(struct config_parser_context *ctx, const char *key,
+ const char *line, const char *section_name) ATTR_NULL(4);
+void config_parser_apply_line(struct config_parser_context *ctx,
+ enum config_line_type type,
+ const char *key, const char *value);
+
+#endif