xref: /minix3/minix/include/configfile.h (revision c2808d8b071b2aef9b390713b505f4c9dc567fbd)
1 /*	configfile.h - Generic configuration file format.
2  *							Author: Kees J. Bot
3  *								5 Jun 1999
4  */
5 #ifndef _CONFIGFILE_H
6 #define _CONFIGFILE_H
7 
8 /* Data can only be modified inside the library. */
9 #ifndef _c
10 #define _c	const
11 #endif
12 
13 typedef _c struct config {	/* Contents of a generic configuration file. */
14 _c	struct config	*next;		/* Next configuration file thing. */
15 _c	struct config	*list;		/* For a { sublist }. */
16 	const char	*file;		/* File and line where this is found. */
17 	unsigned	line;
18 	int		flags;		/* Special flags. */
19 	char		word[1];	/* Payload. */
20 } config_t;
21 
22 #define CFG_CLONG	0x0001		/* strtol(word, &end, 0) is valid. */
23 #define CFG_OLONG	0x0002		/* strtol(word, &end, 010). */
24 #define CFG_DLONG	0x0004		/* strtol(word, &end, 10). */
25 #define CFG_XLONG	0x0008		/* strtol(word, &end, 0x10). */
26 #define CFG_CULONG	0x0010		/* strtoul(word, &end, 0). */
27 #define CFG_OULONG	0x0020		/* strtoul(word, &end, 010). */
28 #define CFG_DULONG	0x0040		/* strtoul(word, &end, 10). */
29 #define CFG_XULONG	0x0080		/* strtoul(word, &end, 0x10). */
30 #define CFG_STRING	0x0100		/* The word is enclosed in quotes. */
31 #define CFG_SUBLIST	0x0200		/* This is a sublist, so no word. */
32 #define CFG_ESCAPED	0x0400		/* Escapes are still marked with \. */
33 
34 config_t *config_read(const char *_file, int flags, config_t *_cfg);
35 void config_delete(config_t *_cfg);
36 int config_renewed(config_t *_cfg);
37 size_t config_length(config_t *_cfg);
38 #define config_issub(cfg)	(!!((cfg)->flags & CFG_SUBLIST))
39 #define config_isatom(cfg)	(!config_issub(cfg))
40 #define config_isstring(cfg)	(!!((cfg)->flags & CFG_STRING))
41 
42 #undef _c
43 
44 #endif /* _CONFIGFILE_H */
45