diff options
Diffstat (limited to 'src/config/config-parser-private.h')
-rw-r--r-- | src/config/config-parser-private.h | 75 |
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 |