view src/config/config-parser-private.h @ 14629:c93ca5e46a8a

Marked functions parameters that are allowed to be NULL. Some APIs were also changed. The non-obvious APIs where NULL parameter was changed to "" are master_service_init() and auth_master_user_list_init(). These checks can currently be enabled only on a patched clang: http://llvm.org/bugs/show_bug.cgi?id=6786
author Timo Sirainen <tss@iki.fi>
date Sun, 24 Jun 2012 00:52:57 +0300
parents 41cb0217b7c3
children a097ef0a9d6d
line wrap: on
line source

#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_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;

	struct config_filter filter;
	/* root=NULL-terminated list of parsers */
	struct config_module_parser *parsers;
	unsigned int pathlen;

	const char *open_path;
	unsigned int open_linenum;
};

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 *module;

	ARRAY_DEFINE(all_parsers, struct config_filter_parser *);
	struct config_module_parser *root_parsers;
	struct config_section_stack *cur_section;
	struct input_stack *cur_input;

	string_t *str;
	unsigned int pathlen;
	unsigned int section_counter;
	const char *error;

	struct old_set_parser *old;

	struct config_filter_context *filter;
	unsigned int expand_values:1;
	unsigned int hide_errors:1;
};

extern void (*hook_config_parser_begin)(struct config_parser_context *ctx);

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