| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | /* 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. */#ifndef __INTERNAL_PARSE_CONFIG_H#define __INTERNAL_PARSE_CONFIG_H#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;libc_hidden_proto(config_open)int config_read(parser_t *parser, char ***tokens, unsigned flags, const char *delims) FAST_FUNC attribute_hidden;libc_hidden_proto(config_read)#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;libc_hidden_proto(config_close)#endif /* __INTERNAL_PARSE_CONFIG_H */
 |