]> mj.ucw.cz Git - libucw.git/blob - lib/conf.h
81c10ce24ae7a2c864ecb17cc2a828fea5522d09
[libucw.git] / lib / conf.h
1 /*
2  *      Sherlock Library -- Reading configuration files
3  *
4  *      (c) 2001 Robert Spalek <robert@ucw.cz>
5  */
6
7 #include <getopt.h>
8
9 /*
10  * Allocation in configuration memory pool.
11  */
12
13 void *cfg_malloc(uns size);
14 byte *cfg_stralloc(byte *s);
15
16 /*
17  * Every module places its configuration setting into some section.  Section is
18  * an array of cfitem, whose first record is of type CT_SECTION and contains
19  * the name of the section.  The configuration sections are registered by
20  * calling cf_register().
21  *
22  * item->var is a pointer to the destination variable or to the special parsing
23  * function.
24  */
25
26 enum cftype { CT_STOP, CT_SECTION, CT_INT, CT_STRING, CT_FUNCTION };
27
28 struct cfitem {
29         byte *name;
30         enum cftype type;
31         void *var;
32 };
33
34 typedef byte *(*ci_func)(struct cfitem *, byte *);
35
36 void cf_register(struct cfitem *items);
37
38 /*
39  * Direct setting of configuration items and parsing the configuration file.
40  */
41
42 int cf_item_count(void);
43 struct cfitem *cf_get_item(byte *sect, byte *name);
44 byte *cf_set_item(byte *sect, byte *name, byte *value);
45 void cf_read(byte *filename);
46
47 /*
48  * When using cf_getopt, you must prefix your own short/long options by the
49  * CF_(SHORT|LONG)_OPTS.
50  *
51  * cfdeffile contains filename of config file automatically loaded before a
52  * first --set option is executed.  If none --set option occures, it will be
53  * loaded after getopt returns -1 (at the end of configuration options).  It
54  * will be ignored, if another config file is set by --config option at first.
55  * Its initial value is DEFAULT_CONFIG from config.h, but you can override it
56  * manually.
57  */
58
59 #define CF_SHORT_OPTS   "S:C:"
60 #define CF_LONG_OPTS    \
61         {"set",         1, 0, 'S'},\
62         {"config",      1, 0, 'C'},
63 #define CF_NO_LONG_OPTS (const struct option []){ CF_LONG_OPTS { NULL, 0, 0, 0 } }
64
65 extern byte *cfdeffile;
66
67 int cf_getopt(int argc,char * const argv[],
68                 const char *shortopts,const struct option *longopts,
69                 int *longindex);
70