Annotation of embedaddon/confuse/src/confuse.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (c) 2002,2003,2007 Martin Hedenfalk <martin@bzero.se>
3: *
4: * Permission to use, copy, modify, and distribute this software for any
5: * purpose with or without fee is hereby granted, provided that the above
6: * copyright notice and this permission notice appear in all copies.
7: *
8: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15: */
16:
17: /** A configuration file parser library.
18: * @file confuse.h
19: *
20: */
21:
22: /**
23: * \mainpage libConfuse Documentation
24: *
25: * \section intro
26: *
27: * Copyright © 2002-2003 Martin Hedenfalk <martin@bzero.se>
28: *
29: * The latest versions of this manual and the libConfuse software are
30: * available at http://www.nongnu.org/confuse/
31: *
32: *
33: * <em>If you can't convince, confuse.</em>
34: */
35:
36: #ifndef _cfg_h_
37: #define _cfg_h_
38:
39: #ifdef __cplusplus
40: extern "C" {
41: #endif
42:
43: #include <stdio.h>
44: #include <stdarg.h>
45:
46: #if defined(_WIN32) && !defined(__GNUC__)
47: # ifdef HAVE__FILENO
48: # define fileno _fileno
49: # endif
50: # include <io.h>
51: # ifdef HAVE__ISATTY
52: # define isatty _isatty
53: # endif
54: # ifdef BUILDING_DLL
55: # define DLLIMPORT __declspec (dllexport)
56: # else /* ! BUILDING_DLL */
57: # define DLLIMPORT __declspec (dllimport)
58: # endif /* BUILDING_DLL */
59: #else /* ! _WIN32 || __GNUC__ */
60: # define DLLIMPORT
61: #endif /* _WIN32 */
62:
63: #ifndef __BORLANDC__
64: # define __export
65: #endif
66:
67: /** Fundamental option types */
68: enum cfg_type_t {
69: CFGT_NONE,
70: CFGT_INT, /**< integer */
71: CFGT_FLOAT, /**< floating point number */
72: CFGT_STR, /**< string */
73: CFGT_BOOL, /**< boolean value */
74: CFGT_SEC, /**< section */
75: CFGT_FUNC, /**< function */
76: CFGT_PTR /**< pointer to user-defined value */
77: };
78: typedef enum cfg_type_t cfg_type_t;
79:
80: /** Flags. */
81: #define CFGF_NONE 0
82: #define CFGF_MULTI 1 /**< option may be specified multiple times (only applies to sections) */
83: #define CFGF_LIST 2 /**< option is a list */
84: #define CFGF_NOCASE 4 /**< configuration file is case insensitive */
85: #define CFGF_TITLE 8 /**< option has a title (only applies to sections) */
86: #define CFGF_NODEFAULT 16 /**< option has no default value */
87: #define CFGF_NO_TITLE_DUPES 32 /**< multiple section titles must be unique
88: (duplicates raises an error, only applies to
89: sections) */
90:
91: #define CFGF_RESET 64
92: #define CFGF_DEFINIT 128
93:
94: /** Return codes from cfg_parse(). */
95: #define CFG_SUCCESS 0
96: #define CFG_FILE_ERROR -1
97: #define CFG_PARSE_ERROR 1
98:
99: typedef union cfg_value_t cfg_value_t;
100: typedef struct cfg_opt_t cfg_opt_t;
101: typedef struct cfg_t cfg_t;
102: typedef struct cfg_defvalue_t cfg_defvalue_t;
103: typedef int cfg_flag_t;
104:
105: /** Function prototype used by CFGT_FUNC options.
106: *
107: * This is a callback function, registered with the CFG_FUNC
108: * initializer. Each time libConfuse finds a function, the registered
109: * callback function is called (parameters are passed as strings, any
110: * conversion to other types should be made in the callback
111: * function). libConfuse does not support any storage of the data
112: * found; these are passed as parameters to the callback, and it's the
113: * responsibility of the callback function to do whatever it should do
114: * with the data.
115: *
116: * @param cfg The configuration file context.
117: * @param opt The option.
118: * @param argc Number of arguments passed. The callback function is
119: * responsible for checking that the correct number of arguments are
120: * passed.
121: * @param argv Arguments as an array of character strings.
122: *
123: * @return On success, 0 should be returned. All other values
124: * indicates an error, and the parsing is aborted. The callback
125: * function should notify the error itself, for example by calling
126: * cfg_error().
127: *
128: * @see CFG_FUNC
129: */
130: typedef int (*cfg_func_t)(cfg_t *cfg, cfg_opt_t *opt,
131: int argc, const char **argv);
132:
133: /** Function prototype used by the cfg_print_ functions.
134: *
135: * This callback function is used to print option values. For options
136: * with a value parsing callback, this is often required, especially
137: * if a string is mapped to an integer by the callback. This print
138: * callback must then map the integer back to the appropriate string.
139: *
140: * Except for functions, the print callback function should only print
141: * the value of the option, not the name and the equal sign (that is
142: * handled by the cfg_opt_print function). For function options
143: * however, the name and the parenthesis must be printed by this
144: * function. The value to print can be accessed with the cfg_opt_get
145: * functions.
146: *
147: * @param opt The option structure (eg, as returned from cfg_getopt())
148: * @param index Index of the value to get. Zero based.
149: * @param fp File stream to print to, use stdout to print to the screen.
150: *
151: * @see cfg_print, cfg_set_print_func
152: */
153: typedef void (*cfg_print_func_t)(cfg_opt_t *opt, unsigned int index, FILE *fp);
154:
155: /** Value parsing callback prototype
156: *
157: * This is a callback function (different from the one registered with the
158: * CFG_FUNC initializer) used to parse a value. This can be used to override
159: * the internal parsing of a value.
160: *
161: * Suppose you want an integer option that only can have certain values, for
162: * example 1, 2 and 3, and these should be written in the configuration file as
163: * "yes", "no" and "maybe". The callback function would be called with the
164: * found value ("yes", "no" or "maybe") as a string, and the result should be
165: * stored in the result parameter.
166: *
167: * @param cfg The configuration file context.
168: * @param opt The option.
169: * @param value The value found in the configuration file.
170: * @param result Pointer to storage for the result, cast to a void pointer.
171: *
172: * @return On success, 0 should be returned. All other values indicates an
173: * error, and the parsing is aborted. The callback function should notify the
174: * error itself, for example by calling cfg_error().
175: */
176: typedef int (*cfg_callback_t)(cfg_t *cfg, cfg_opt_t *opt,
177: const char *value, void *result);
178:
179: /** Validating callback prototype
180: *
181: * This callback function is called after an option has been parsed and set.
182: * The function is called for both fundamental values (strings, integers etc)
183: * as well as lists and sections. This can for example be used to validate that
184: * all required options in a section has been set to sane values.
185: *
186: * @return On success, 0 should be returned. All other values indicates an
187: * error, and the parsing is aborted. The callback function should notify the
188: * error itself, for example by calling cfg_error().
189: *
190: * @see cfg_set_validate_func
191: */
192: typedef int (*cfg_validate_callback_t)(cfg_t *cfg, cfg_opt_t *opt);
193:
194: /** User-defined memory release function for CFG_PTR values
195: *
196: * This callback is used to free memory allocated in a value parsing callback
197: * function. Especially useful for CFG_PTR options, since libConfuse will not
198: * itself release such values. If the values are simply allocated with a
199: * malloc(3), one can use the standard free(3) function here.
200: *
201: */
202: typedef void (*cfg_free_func_t)(void *value);
203:
204: /** Boolean values. */
205: typedef enum {cfg_false, cfg_true} cfg_bool_t;
206:
207: /** Error reporting function. */
208: typedef void (*cfg_errfunc_t)(cfg_t *cfg, const char *fmt, va_list ap);
209:
210: /** Data structure holding information about a "section". Sections can
211: * be nested. A section has a list of options (strings, numbers,
212: * booleans or other sections) grouped together.
213: */
214: struct cfg_t {
215: cfg_flag_t flags; /**< Any flags passed to cfg_init() */
216: char *name; /**< The name of this section, the root
217: * section returned from cfg_init() is
218: * always named "root" */
219: cfg_opt_t *opts; /**< Array of options */
220: char *title; /**< Optional title for this section, only
221: * set if CFGF_TITLE flag is set */
222: char *filename; /**< Name of the file being parsed */
223: int line; /**< Line number in the config file */
224: cfg_errfunc_t errfunc; /**< This function (if set with
225: * cfg_set_error_function) is called for
226: * any error message. */
227: };
228:
229: /** Data structure holding the value of a fundamental option value.
230: */
231: union cfg_value_t {
232: long int number; /**< integer value */
233: double fpnumber; /**< floating point value */
234: cfg_bool_t boolean; /**< boolean value */
235: char *string; /**< string value */
236: cfg_t *section; /**< section value */
237: void *ptr; /**< user-defined value */
238: };
239:
240: /** Data structure holding the default value given by the
241: * initialization macros.
242: */
243: struct cfg_defvalue_t {
244: long int number; /**< default integer value */
245: double fpnumber; /**< default floating point value */
246: cfg_bool_t boolean; /**< default boolean value */
247: char *string; /**< default string value */
248: char *parsed; /**< default value that is parsed by
249: * libConfuse, used for lists and
250: * functions */
251: };
252:
253: /** Data structure holding information about an option. The value(s)
254: * are stored as an array of fundamental values (strings, numbers,
255: * etc).
256: */
257: struct cfg_opt_t {
258: char *name; /**< The name of the option */
259: cfg_type_t type; /**< Type of option */
260: unsigned int nvalues; /**< Number of values parsed */
261: cfg_value_t **values; /**< Array of found values */
262: cfg_flag_t flags; /**< Flags */
263: cfg_opt_t *subopts; /**< Suboptions (only applies to sections) */
264: cfg_defvalue_t def; /**< Default value */
265: cfg_func_t func; /**< Function callback for CFGT_FUNC options */
266: void *simple_value; /**< Pointer to user-specified variable to
267: * store simple values (created with the
268: * CFG_SIMPLE_* initializers) */
269: cfg_callback_t parsecb; /**< Value parsing callback function */
270: cfg_validate_callback_t validcb; /**< Value validating callback function */
271: cfg_print_func_t pf; /**< print callback function */
272: cfg_free_func_t freecb; /***< user-defined memory release function */
273: };
274:
275: extern const char __export confuse_copyright[];
276: extern const char __export confuse_version[];
277: extern const char __export confuse_author[];
278:
279: #define __CFG_STR(name, def, flags, svalue, cb) \
280: {name,CFGT_STR,0,0,flags,0,{0,0,cfg_false,def,0},0,svalue,cb,0,0,0}
281: #define __CFG_STR_LIST(name, def, flags, svalue, cb) \
282: {name,CFGT_STR,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,cb,0,0,0}
283:
284: /** Initialize a string option
285: */
286: #define CFG_STR(name, def, flags) \
287: __CFG_STR(name, def, flags, 0, 0)
288:
289: /** Initialize a string list option
290: */
291: #define CFG_STR_LIST(name, def, flags) \
292: __CFG_STR_LIST(name, def, flags, 0, 0)
293:
294: /** Initialize a string option with a value parsing callback
295: */
296: #define CFG_STR_CB(name, def, flags, cb) \
297: __CFG_STR(name, def, flags, 0, cb)
298:
299: /** Initialize a string list option with a value parsing callback
300: */
301: #define CFG_STR_LIST_CB(name, def, flags, cb) \
302: __CFG_STR_LIST(name, def, flags, 0, cb)
303:
304: /** Initialize a "simple" string option.
305: *
306: * "Simple" options (in lack of a better expression) does not support
307: * lists of values or multiple sections. LibConfuse will store the
308: * value of a simple option in the user-defined location specified by
309: * the value parameter in the initializer. Simple options are not
310: * stored in the cfg_t context, only a pointer. Sections can not be
311: * initialized as a "simple" option.
312: *
313: * As of version 2.2, libConfuse can now return the values of simple
314: * options with the cfg_get functions. This allows using the new
315: * cfg_print function with simple options.
316: *
317: * libConfuse doesn't support handling default values for "simple"
318: * options. They are assumed to be set by the calling application
319: * before cfg_parse is called.
320: *
321: * @param name name of the option
322: * @param svalue pointer to a character pointer (a char **). This value
323: * must be initalized either to NULL or to a malloc()'ed string. You
324: * can't use
325: * <pre>
326: * char *user = "joe";
327: * ...
328: * cfg_opt_t opts[] = {
329: * CFG_SIMPLE_STR("user", &user),
330: * ...
331: * </pre>
332: * since libConfuse will try to free the static string "joe" (which is
333: * an error) when a "user" option is found. Rather, use the following
334: * code snippet:
335: * <pre>
336: * char *user = strdup("joe");
337: * ...
338: * cfg_opt_t opts[] = {
339: * CFG_SIMPLE_STR("user", &user),
340: * ...
341: * </pre>
342: * Alternatively, the default value can be set after the opts struct
343: * is defined, as in:
344: * <pre>
345: * char *user = 0;
346: * ...
347: * cfg_opt_t opts[] = {
348: * CFG_SIMPLE_STR("user", &user),
349: * ...
350: * user = strdup("joe");
351: * cfg = cfg_init(opts, 0);
352: * cfg_parse(cfg, filename);
353: * </pre>
354: *
355: */
356: #define CFG_SIMPLE_STR(name, svalue) \
357: __CFG_STR(name, 0, CFGF_NONE, svalue, 0)
358:
359:
360: #define __CFG_INT(name, def, flags, svalue, cb) \
361: {name,CFGT_INT,0,0,flags,0,{def,0,cfg_false,0,0},0,svalue,cb,0,0,0}
362: #define __CFG_INT_LIST(name, def, flags, svalue, cb) \
363: {name,CFGT_INT,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,cb,0,0,0}
364:
365: /** Initialize an integer option
366: */
367: #define CFG_INT(name, def, flags) \
368: __CFG_INT(name, def, flags, 0, 0)
369:
370: /** Initialize an integer list option
371: */
372: #define CFG_INT_LIST(name, def, flags) \
373: __CFG_INT_LIST(name, def, flags, 0, 0)
374:
375: /** Initialize an integer option with a value parsing callback
376: */
377: #define CFG_INT_CB(name, def, flags, cb) \
378: __CFG_INT(name, def, flags, 0, cb)
379:
380: /** Initialize an integer list option with a value parsing callback
381: */
382: #define CFG_INT_LIST_CB(name, def, flags, cb) \
383: __CFG_INT_LIST(name, def, flags, 0, cb)
384:
385: /** Initialize a "simple" integer option (see documentation for
386: * CFG_SIMPLE_STR for more information).
387: */
388: #define CFG_SIMPLE_INT(name, svalue) \
389: __CFG_INT(name, 0, CFGF_NONE, svalue, 0)
390:
391:
392:
393: #define __CFG_FLOAT(name, def, flags, svalue, cb) \
394: {name,CFGT_FLOAT,0,0,flags,0,{0,def,cfg_false,0,0},0,svalue,cb,0,0,0}
395: #define __CFG_FLOAT_LIST(name, def, flags, svalue, cb) \
396: {name,CFGT_FLOAT,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,cb,0,0,0}
397:
398: /** Initialize a floating point option
399: */
400: #define CFG_FLOAT(name, def, flags) \
401: __CFG_FLOAT(name, def, flags, 0, 0)
402:
403: /** Initialize a floating point list option
404: */
405: #define CFG_FLOAT_LIST(name, def, flags) \
406: __CFG_FLOAT_LIST(name, def, flags, 0, 0)
407:
408: /** Initialize a floating point option with a value parsing callback
409: */
410: #define CFG_FLOAT_CB(name, def, flags, cb) \
411: __CFG_FLOAT(name, def, flags, 0, cb)
412:
413: /** Initialize a floating point list option with a value parsing callback
414: */
415: #define CFG_FLOAT_LIST_CB(name, def, flags, cb) \
416: __CFG_FLOAT_LIST(name, def, flags, 0, cb)
417:
418: /** Initialize a "simple" floating point option (see documentation for
419: * CFG_SIMPLE_STR for more information).
420: */
421: #define CFG_SIMPLE_FLOAT(name, svalue) \
422: __CFG_FLOAT(name, 0, CFGF_NONE, svalue, 0)
423:
424:
425:
426: #define __CFG_BOOL(name, def, flags, svalue, cb) \
427: {name,CFGT_BOOL,0,0,flags,0,{0,0,def,0,0},0,svalue,cb,0,0,0}
428: #define __CFG_BOOL_LIST(name, def, flags, svalue, cb) \
429: {name,CFGT_BOOL,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,cb,0,0,0}
430:
431: /** Initialize a boolean option
432: */
433: #define CFG_BOOL(name, def, flags) \
434: __CFG_BOOL(name, def, flags, 0, 0)
435:
436: /** Initialize a boolean list option
437: */
438: #define CFG_BOOL_LIST(name, def, flags) \
439: __CFG_BOOL_LIST(name, def, flags, 0, 0)
440:
441: /** Initialize a boolean option with a value parsing callback
442: */
443: #define CFG_BOOL_CB(name, def, flags, cb) \
444: __CFG_BOOL(name, def, flags, 0, cb)
445:
446: /** Initialize a boolean list option with a value parsing callback
447: */
448: #define CFG_BOOL_LIST_CB(name, def, flags, cb) \
449: __CFG_BOOL_LIST(name, def, flags, 0, cb)
450:
451: /** Initialize a "simple" boolean option (see documentation for
452: * CFG_SIMPLE_STR for more information).
453: */
454: #define CFG_SIMPLE_BOOL(name, svalue) \
455: __CFG_BOOL(name, cfg_false, CFGF_NONE, svalue, 0)
456:
457:
458:
459: /** Initialize a section
460: *
461: * @param name The name of the option
462: * @param opts Array of options that are valid within this section
463:
464: * @param flags Flags, specify CFGF_MULTI if it should be possible to
465: * have multiples of the same section, and CFGF_TITLE if the
466: * section(s) must have a title (which can be used in the
467: * cfg_gettsec() function)
468: *
469: */
470: #define CFG_SEC(name, opts, flags) \
471: {name,CFGT_SEC,0,0,flags,opts,{0,0,cfg_false,0,0},0,0,0,0,0,0}
472:
473:
474:
475: /** Initialize a function
476: * @param name The name of the option
477: * @param func The callback function.
478: *
479: * @see cfg_func_t
480: */
481: #define CFG_FUNC(name, func) \
482: {name,CFGT_FUNC,0,0,CFGF_NONE,0,{0,0,cfg_false,0,0},func,0,0,0,0,0}
483:
484:
485: #define __CFG_PTR(name, def, flags, svalue, parsecb, freecb) \
486: {name,CFGT_PTR,0,0,flags,0,{0,0,cfg_false,0,def},0,svalue,parsecb,0,0,freecb}
487: #define __CFG_PTR_LIST(name, def, flags, svalue, parsecb, freecb) \
488: {name,CFGT_PTR,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,parsecb,0,0,freecb}
489:
490: /** Initialize a user-defined option
491: *
492: * CFG_PTR options can only be used together with a value parsing callback.
493: *
494: * @param name The name of the option
495: * @param def Default value
496: * @param flags Flags
497: * @param parsecb Value parsing callback
498: * @param freecb Memory release function
499: *
500: * @see cfg_callback_t, cfg_free_func_t
501: */
502: #define CFG_PTR_CB(name, def, flags, parsecb, freecb) \
503: __CFG_PTR(name, def, flags, 0, parsecb, freecb)
504:
505: /** Initialize a list of user-defined options
506: */
507: #define CFG_PTR_LIST_CB(name, def, flags, parsecb, freecb) \
508: __CFG_PTR(name, def, flags | CFGF_LIST, 0, parsecb, freecb)
509:
510: /*#define CFG_SIMPLE_PTR(name, svalue, cb) \
511: __CFG_PTR(name, 0, 0, svalue, cb)*/
512:
513:
514: /** Terminate list of options. This must be the last initializer in
515: * the option list.
516: */
517: #define CFG_END() \
518: {0,CFGT_NONE,0,0,CFGF_NONE,0,{0,0,cfg_false,0,0},0,0,0,0,0,0}
519:
520:
521:
522: /** Create and initialize a cfg_t structure. This should be the first function
523: * called when setting up the parsing of a configuration file. The options
524: * passed in the first parameter is initialized using the CFG_* initializers.
525: * The last option in the option array must be CFG_END(), unless you like
526: * segmentation faults.
527: *
528: * The options must no longer be defined in the same scope as where the cfg_xxx
529: * functions are used (since version 2.3).
530: *
531: * @param opts An arrary of options
532: * @param flags One or more flags (bitwise or'ed together). Currently only
533: * CFGF_NOCASE is available. Use 0 if no flags are needed.
534: *
535: * @return A configuration context structure. This pointer is passed
536: * to almost all other functions as the first parameter.
537: */
538: DLLIMPORT cfg_t * __export cfg_init(cfg_opt_t *opts, cfg_flag_t flags);
539:
540: /** Parse a configuration file. Tilde expansion is performed on the
541: * filename before it is opened. After a configuration file has been
542: * initialized (with cfg_init()) and parsed (with cfg_parse()), the
543: * values can be read with the cfg_getXXX functions.
544: *
545: * @param cfg The configuration file context as returned from cfg_init().
546: * @param filename The name of the file to parse.
547: *
548: * @return On success, CFG_SUCCESS is returned. If the file couldn't
549: * be opened for reading, CFG_FILE_ERROR is returned. On all other
550: * errors, CFG_PARSE_ERROR is returned and cfg_error() was called with
551: * a descriptive error message.
552: */
553: DLLIMPORT int __export cfg_parse(cfg_t *cfg, const char *filename);
554:
555: /** Same as cfg_parse() above, but takes an already opened file as
556: * argument. Reading begins at the current position. After parsing,
557: * the position is not reset. The caller is responsible for closing
558: * the file.
559: *
560: * @param cfg The configuration file context as returned from cfg_init().
561: * @param fp An open file stream.
562: *
563: * @see cfg_parse()
564: */
565: DLLIMPORT int __export cfg_parse_fp(cfg_t *cfg, FILE *fp);
566:
567: /** Same as cfg_parse() above, but takes a character buffer as
568: * argument.
569: *
570: * @param cfg The configuration file context as returned from cfg_init().
571: * @param buf A zero-terminated string with configuration directives.
572: *
573: * @see cfg_parse()
574: */
575: DLLIMPORT int __export cfg_parse_buf(cfg_t *cfg, const char *buf);
576:
577: /** Free the memory allocated for the values of a given option. Only
578: * the values are freed, not the option itself (it is freed by cfg_free()).
579: *
580: * @see cfg_free()
581: */
582: DLLIMPORT void __export cfg_free_value(cfg_opt_t *opt);
583:
584: /** Free a cfg_t context. All memory allocated by the cfg_t context
585: * structure are freed, and can't be used in any further cfg_* calls.
586: */
587: DLLIMPORT void __export cfg_free(cfg_t *cfg);
588:
589: /** Install a user-defined error reporting function.
590: * @return The old error reporting function is returned.
591: */
592: DLLIMPORT cfg_errfunc_t __export cfg_set_error_function(cfg_t *cfg,
593: cfg_errfunc_t errfunc);
594:
595: /** Show a parser error. Any user-defined error reporting function is called.
596: * @see cfg_set_error_function
597: */
598: DLLIMPORT void __export cfg_error(cfg_t *cfg, const char *fmt, ...);
599:
600: /** Returns the value of an integer option, given a cfg_opt_t pointer.
601: * @param opt The option structure (eg, as returned from cfg_getopt())
602: * @param index Index of the value to get. Zero based.
603: * @see cfg_getnint
604: */
605: DLLIMPORT signed long __export cfg_opt_getnint(cfg_opt_t *opt, unsigned int index);
606:
607: /** Indexed version of cfg_getint(), used for lists.
608: * @param cfg The configuration file context.
609: * @param name The name of the option.
610: * @param index Index of the value to get. Zero based.
611: * @see cfg_getint
612: */
613: DLLIMPORT long int __export cfg_getnint(cfg_t *cfg, const char *name,
614: unsigned int index);
615:
616: /** Returns the value of an integer option. This is the same as
617: * calling cfg_getnint with index 0.
618: * @param cfg The configuration file context.
619: * @param name The name of the option.
620: * @return The requested value is returned. If the option was not set
621: * in the configuration file, the default value given in the
622: * corresponding cfg_opt_t structure is returned. It is an error to
623: * try to get an option that isn't declared.
624: */
625: DLLIMPORT long int __export cfg_getint(cfg_t *cfg, const char *name);
626:
627: /** Returns the value of a floating point option, given a cfg_opt_t pointer.
628: * @param opt The option structure (eg, as returned from cfg_getopt())
629: * @param index Index of the value to get. Zero based.
630: * @see cfg_getnfloat
631: */
632: DLLIMPORT double __export cfg_opt_getnfloat(cfg_opt_t *opt, unsigned int index);
633:
634: /** Indexed version of cfg_getfloat(), used for lists.
635: * @param cfg The configuration file context.
636: * @param name The name of the option.
637: * @param index Index of the value to get. Zero based.
638: * @see cfg_getfloat
639: */
640: DLLIMPORT double __export cfg_getnfloat(cfg_t *cfg, const char *name,
641: unsigned int index);
642:
643: /** Returns the value of a floating point option.
644: * @param cfg The configuration file context.
645: * @param name The name of the option.
646: * @return The requested value is returned. If the option was not set
647: * in the configuration file, the default value given in the
648: * corresponding cfg_opt_t structure is returned. It is an error to
649: * try to get an option that isn't declared.
650: */
651: DLLIMPORT double __export cfg_getfloat(cfg_t *cfg, const char *name);
652:
653: /** Returns the value of a string option, given a cfg_opt_t pointer.
654: * @param opt The option structure (eg, as returned from cfg_getopt())
655: * @param index Index of the value to get. Zero based.
656: * @see cfg_getnstr
657: */
658: DLLIMPORT char * __export cfg_opt_getnstr(cfg_opt_t *opt, unsigned int index);
659:
660: /** Indexed version of cfg_getstr(), used for lists.
661: * @param cfg The configuration file context.
662: * @param name The name of the option.
663: * @param index Index of the value to get. Zero based.
664: * @see cfg_getstr
665: */
666: DLLIMPORT char * __export cfg_getnstr(cfg_t *cfg, const char *name,
667: unsigned int index);
668:
669: /** Returns the value of a string option.
670: * @param cfg The configuration file context.
671: * @param name The name of the option.
672: * @return The requested value is returned. If the option was not set
673: * in the configuration file, the default value given in the
674: * corresponding cfg_opt_t structure is returned. It is an error to
675: * try to get an option that isn't declared.
676: */
677: DLLIMPORT char * __export cfg_getstr(cfg_t *cfg, const char *name);
678:
679: /** Returns the value of a boolean option, given a cfg_opt_t pointer.
680: * @param opt The option structure (eg, as returned from cfg_getopt())
681: * @param index Index of the value to get. Zero based.
682: * @see cfg_getnbool
683: */
684: DLLIMPORT cfg_bool_t __export cfg_opt_getnbool(cfg_opt_t *opt, unsigned int index);
685:
686: /** Indexed version of cfg_getbool(), used for lists.
687: *
688: * @param cfg The configuration file context.
689: * @param name The name of the option.
690: * @param index Index of the value to get. Zero based.
691: * @see cfg_getbool
692: */
693: DLLIMPORT cfg_bool_t __export cfg_getnbool(cfg_t *cfg, const char *name,
694: unsigned int index);
695:
696: /** Returns the value of a boolean option.
697: * @param cfg The configuration file context.
698: * @param name The name of the option.
699: * @return The requested value is returned. If the option was not set
700: * in the configuration file, the default value given in the
701: * corresponding cfg_opt_t structure is returned. It is an error to
702: * try to get an option that isn't declared.
703: */
704: DLLIMPORT cfg_bool_t __export cfg_getbool(cfg_t *cfg, const char *name);
705:
706:
707: DLLIMPORT void * __export cfg_opt_getnptr(cfg_opt_t *opt, unsigned int index);
708: DLLIMPORT void * __export cfg_getnptr(cfg_t *cfg, const char *name, unsigned int indx);
709:
710: /** Returns the value of a user-defined option (void pointer).
711: * @param cfg The configuration file context.
712: * @param name The name of the option.
713: * @return The requested value is returned. If the option was not set
714: * in the configuration file, the default value given in the
715: * corresponding cfg_opt_t structure is returned. It is an error to
716: * try to get an option that isn't declared.
717: */
718: DLLIMPORT void * __export cfg_getptr(cfg_t *cfg, const char *name);
719:
720:
721: /** Returns the value of a section option, given a cfg_opt_t pointer.
722: * @param opt The option structure (eg, as returned from cfg_getopt())
723: * @param index Index of the value to get. Zero based.
724: * @see cfg_getnsec
725: */
726: DLLIMPORT cfg_t * __export cfg_opt_getnsec(cfg_opt_t *opt, unsigned int index);
727:
728: /** Indexed version of cfg_getsec(), used for sections with the
729: * CFGF_MULTI flag set.
730: *
731: * @param cfg The configuration file context.
732: * @param name The name of the option.
733: * @param index Index of the section to get. Zero based.
734: * @see cfg_getsec
735: */
736: DLLIMPORT cfg_t * __export cfg_getnsec(cfg_t *cfg, const char *name,
737: unsigned int index);
738:
739: /** Returns the value of a section option, given a cfg_opt_t pointer
740: * and the title.
741: * @param opt The option structure (eg, as returned from cfg_getopt())
742: * @param title The title of this section. The CFGF_TITLE flag must
743: * have been set for this option.
744: * @see cfg_gettsec
745: */
746: DLLIMPORT cfg_t * __export cfg_opt_gettsec(cfg_opt_t *opt, const char *title);
747:
748: /** Return a section given the title, used for section with the
749: * CFGF_TITLE flag set.
750: *
751: * @param cfg The configuration file context.
752: * @param name The name of the option.
753: * @param title The title of this section. The CFGF_TITLE flag must
754: * have been set for this option.
755: * @see cfg_getsec
756: */
757: DLLIMPORT cfg_t * __export cfg_gettsec(cfg_t *cfg, const char *name,
758: const char *title);
759:
760: /** Returns the value of a section option. The returned value is
761: * another cfg_t structure that can be used in following calls to
762: * cfg_getint, cfg_getstr or other get-functions.
763: * @param cfg The configuration file context.
764: * @param name The name of the option.
765: * @return The requested section is returned. If no section is found
766: * with that name, 0 is returned. There can only be default values for
767: * section without the CFGF_MULTI flag set. It is an error to try to
768: * get a section that isn't declared.
769: */
770: DLLIMPORT cfg_t * __export cfg_getsec(cfg_t *cfg, const char *name);
771:
772: /** Return the number of values this option has. If no default value
773: * is given for the option and no value was found in the config file,
774: * 0 will be returned (ie, the option value is not set at all).
775: * @param opt The option structure (eg, as returned from cfg_getopt())
776: */
777: DLLIMPORT unsigned int __export cfg_opt_size(cfg_opt_t *opt);
778:
779: /** Return the number of values this option has. If no default value
780: * is given for the option and no value was found in the config file,
781: * 0 will be returned (ie, the option value is not set at all).
782: *
783: * Note that there is no way to *not* specify a default value for integers,
784: * floats and booleans. Ie, they always have default values (since 0 or NULL is
785: * a valid integer/float/boolean value). Only strings and lists may have no
786: * default value.
787: *
788: * @param cfg The configuration file context.
789: * @param name The name of the option.
790: */
791: DLLIMPORT unsigned int __export cfg_size(cfg_t *cfg, const char *name);
792:
793: /** Return the title of a section.
794: *
795: * @param cfg The configuration file context.
796: * @return Returns the title, or 0 if there is no title. This string
797: * should not be modified.
798: */
799: DLLIMPORT const char * __export cfg_title(cfg_t *cfg);
800:
801: /** Return the name of a section.
802: *
803: * @param cfg The configuration file context.
804: * @return Returns the title, or 0 if there is no title. This string
805: * should not be modified.
806: */
807: DLLIMPORT const char * __export cfg_name(cfg_t *cfg);
808:
809: /** Return the name of an option.
810: *
811: * @param opt The option structure (eg, as returned from cfg_getopt())
812: * @return Returns the title, or 0 if there is no title. This string
813: * should not be modified.
814: */
815: DLLIMPORT const char * __export cfg_opt_name(cfg_opt_t *opt);
816:
817: /** Predefined include-function. This function can be used in the
818: * options passed to cfg_init() to specify a function for including
819: * other configuration files in the parsing. For example:
820: * CFG_FUNC("include", &cfg_include)
821: */
822: DLLIMPORT int __export cfg_include(cfg_t *cfg, cfg_opt_t *opt, int argc,
823: const char **argv);
824:
825: /** Does tilde expansion (~ -> $HOME) on the filename.
826: * @return The expanded filename is returned. If a ~user was not
827: * found, the original filename is returned. In any case, a
828: * dynamically allocated string is returned, which should be free()'d
829: * by the caller.
830: */
831: DLLIMPORT char * __export cfg_tilde_expand(const char *filename);
832:
833: /** Parse a boolean option string. Accepted "true" values are "true",
834: * "on" and "yes", and accepted "false" values are "false", "off" and
835: * "no".
836: *
837: * @return Returns 1 or 0 (true/false) if the string was parsed
838: * correctly, or -1 if an error occurred.
839: */
840: DLLIMPORT int __export cfg_parse_boolean(const char *s);
841:
842: /** Return an option given it's name.
843: *
844: * @param cfg The configuration file context.
845: * @param name The name of the option.
846: *
847: * @return Returns a pointer to the option. If the option isn't declared,
848: * libConfuse will print an error message and return 0.
849: */
850: DLLIMPORT cfg_opt_t * __export cfg_getopt(cfg_t *cfg, const char *name);
851:
852: /** Set an option (create an instance of an option).
853: *
854: * @param cfg The configuration file context.
855: * @param opt The option definition.
856: * @param value The initial value for the option.
857: *
858: * @return Returns a pointer to the value object.
859: */
860: DLLIMPORT cfg_value_t *cfg_setopt(cfg_t *cfg, cfg_opt_t *opt, char *value);
861:
862: /** Set a value of an integer option.
863: *
864: * @param opt The option structure (eg, as returned from cfg_getopt())
865: * @param value The value to set.
866: * @param index The index in the option value array that should be
867: * modified. It is an error to set values with indices larger than 0
868: * for options without the CFGF_LIST flag set.
869: */
870: DLLIMPORT void __export cfg_opt_setnint(cfg_opt_t *opt,
871: long int value, unsigned int index);
872:
873: /** Set the value of an integer option given its name.
874: *
875: * @param cfg The configuration file context.
876: * @param name The name of the option.
877: * @param value The value to set. If the option is a list (the CFGF_LIST flag
878: * is set), only the first value (with index 0) is set.
879: */
880: DLLIMPORT void __export cfg_setint(cfg_t *cfg, const char *name,
881: long int value);
882:
883: /** Set a value of an integer option given its name and index.
884: *
885: * @param cfg The configuration file context.
886: * @param name The name of the option.
887: * @param value The value to set.
888: * @param index The index in the option value array that should be
889: * modified. It is an error to set values with indices larger than 0
890: * for options without the CFGF_LIST flag set.
891: */
892: DLLIMPORT void __export cfg_setnint(cfg_t *cfg, const char *name,
893: long int value, unsigned int index);
894:
895: /** Set a value of a floating point option.
896: *
897: * @param opt The option structure (eg, as returned from cfg_getopt())
898: * @param value The value to set.
899: * @param index The index in the option value array that should be
900: * modified. It is an error to set values with indices larger than 0
901: * for options without the CFGF_LIST flag set.
902: */
903: DLLIMPORT void __export cfg_opt_setnfloat(cfg_opt_t *opt,
904: double value, unsigned int index);
905:
906: /** Set the value of a floating point option given its name.
907: *
908: * @param cfg The configuration file context.
909: * @param name The name of the option.
910: * @param value The value to set. If the option is a list (the CFGF_LIST flag
911: * is set), only the first value (with index 0) is set.
912: */
913: DLLIMPORT void __export cfg_setfloat(cfg_t *cfg, const char *name,
914: double value);
915:
916: /** Set a value of a floating point option given its name and index.
917: *
918: * @param cfg The configuration file context.
919: * @param name The name of the option.
920: * @param value The value to set.
921: * @param index The index in the option value array that should be
922: * modified. It is an error to set values with indices larger than 0
923: * for options without the CFGF_LIST flag set.
924: */
925: DLLIMPORT void __export cfg_setnfloat(cfg_t *cfg, const char *name,
926: double value, unsigned int index);
927:
928: /** Set a value of a boolean option.
929: *
930: * @param opt The option structure (eg, as returned from cfg_getopt())
931: * @param value The value to set.
932: * @param index The index in the option value array that should be
933: * modified. It is an error to set values with indices larger than 0
934: * for options without the CFGF_LIST flag set.
935: */
936: DLLIMPORT void __export cfg_opt_setnbool(cfg_opt_t *opt,
937: cfg_bool_t value, unsigned int index);
938:
939: /** Set the value of a boolean option given its name.
940: *
941: * @param cfg The configuration file context.
942: * @param name The name of the option.
943: * @param value The value to set. If the option is a list (the CFGF_LIST flag
944: * is set), only the first value (with index 0) is set.
945: */
946: DLLIMPORT void __export cfg_setbool(cfg_t *cfg, const char *name,
947: cfg_bool_t value);
948:
949: /** Set a value of a boolean option given its name and index.
950: *
951: * @param cfg The configuration file context.
952: * @param name The name of the option.
953: * @param value The value to set.
954: * @param index The index in the option value array that should be
955: * modified. It is an error to set values with indices larger than 0
956: * for options without the CFGF_LIST flag set.
957: */
958: DLLIMPORT void __export cfg_setnbool(cfg_t *cfg, const char *name,
959: cfg_bool_t value, unsigned int index);
960:
961: /** Set a value of a string option.
962: *
963: * @param opt The option structure (eg, as returned from cfg_getopt())
964: * @param value The value to set. Memory for the string is allocated
965: * and the value is copied. Any previous string value is freed.
966: * @param index The index in the option value array that should be
967: * modified. It is an error to set values with indices larger than 0
968: * for options without the CFGF_LIST flag set.
969: */
970: DLLIMPORT void __export cfg_opt_setnstr(cfg_opt_t *opt,
971: const char *value, unsigned int index);
972:
973: /** Set the value of a string option given its name.
974: *
975: * @param cfg The configuration file context.
976: * @param name The name of the option.
977: * @param value The value to set. Memory for the string is allocated and the
978: * value is copied. Any previous string value is freed. If the option is a list
979: * (the CFGF_LIST flag is set), only the first value (with index 0) is set.
980: */
981: DLLIMPORT void __export cfg_setstr(cfg_t *cfg, const char *name,
982: const char *value);
983:
984: /** Set a value of a boolean option given its name and index.
985: *
986: * @param cfg The configuration file context.
987: * @param name The name of the option.
988: * @param value The value to set. Memory for the string is allocated
989: * and the value is copied. Any privious string value is freed.
990: * @param index The index in the option value array that should be
991: * modified. It is an error to set values with indices larger than 0
992: * for options without the CFGF_LIST flag set.
993: */
994: DLLIMPORT void __export cfg_setnstr(cfg_t *cfg, const char *name,
995: const char *value, unsigned int index);
996:
997: /** Set values for a list option. All existing values are replaced
998: * with the new ones.
999: *
1000: * @param cfg The configuration file context.
1001: * @param name The name of the option.
1002: * @param nvalues Number of values to set.
1003: * @param ... The values to set, the type must match the type of the
1004: * option and the number of values must be equal to the nvalues
1005: * parameter.
1006: */
1007: DLLIMPORT void __export cfg_setlist(cfg_t *cfg, const char *name,
1008: unsigned int nvalues, ...);
1009:
1010: DLLIMPORT int __export cfg_numopts(cfg_opt_t *opts);
1011:
1012: /** Add values for a list option. The new values are appended to any
1013: * current values in the list.
1014: *
1015: * @param cfg The configuration file context.
1016: * @param name The name of the option.
1017: * @param nvalues Number of values to add.
1018: * @param ... The values to add, the type must match the type of the
1019: * option and the number of values must be equal to the nvalues
1020: * parameter.
1021: */
1022: DLLIMPORT void __export cfg_addlist(cfg_t *cfg, const char *name,
1023: unsigned int nvalues, ...);
1024:
1025: /** Default value print function.
1026: *
1027: * Print only the value of a given option. Does not handle sections or
1028: * functions. Use cfg_opt_print to print the whole assignment ("option
1029: * = value"), or cfg_print to print the whole config file.
1030: *
1031: * @param opt The option structure (eg, as returned from cfg_getopt())
1032: * @param index The index in the option value array that should be printed
1033: * @param fp File stream to print to.
1034: *
1035: * @see cfg_print, cfg_opt_print
1036: */
1037: DLLIMPORT void __export cfg_opt_nprint_var(cfg_opt_t *opt, unsigned int index,
1038: FILE *fp);
1039:
1040: /** Print an option and its value to a file.
1041: * Same as cfg_opt_print, but with the indentation level specified.
1042: * @see cfg_opt_print
1043: */
1044: DLLIMPORT void __export cfg_opt_print_indent(cfg_opt_t *opt, FILE *fp, int indent);
1045:
1046: /** Print an option and its value to a file.
1047: *
1048: * If a print callback function is specified for the option, it is
1049: * used instead of cfg_opt_nprint_var.
1050: *
1051: * @param opt The option structure (eg, as returned from cfg_getopt())
1052: * @param fp File stream to print to.
1053: *
1054: * @see cfg_print_func_t
1055: */
1056: DLLIMPORT void __export cfg_opt_print(cfg_opt_t *opt, FILE *fp);
1057:
1058: /** Print the options and values to a file.
1059: * Same as cfg_print, but with the indentation level specified.
1060: * @see cfg_print
1061: */
1062: DLLIMPORT void __export cfg_print_indent(cfg_t *cfg, FILE *fp, int indent);
1063:
1064: /** Print the options and values to a file.
1065: *
1066: * Note that options in any included file are expanded and printed
1067: * directly to the file. Option values given with environment
1068: * variables in the parsed input are also printed expanded. This means
1069: * that if you parse a configuration file you can't expect that the
1070: * output from this function is identical to the initial file.
1071: *
1072: * @param cfg The configuration file context.
1073: * @param fp File stream to print to, use stdout to print to the screen.
1074: *
1075: * @see cfg_print_func_t, cfg_set_print_func
1076: */
1077: DLLIMPORT void __export cfg_print(cfg_t *cfg, FILE *fp);
1078:
1079: /** Set a print callback function for an option.
1080: *
1081: * @param opt The option structure (eg, as returned from cfg_getopt())
1082: * @param pf The print function callback.
1083: *
1084: * @see cfg_print_func_t
1085: */
1086: DLLIMPORT cfg_print_func_t __export cfg_opt_set_print_func(cfg_opt_t *opt,
1087: cfg_print_func_t pf);
1088:
1089: /** Set a print callback function for an option given its name.
1090: *
1091: * @param cfg The configuration file context.
1092: * @param name The name of the option.
1093: * @param pf The print callback function.
1094: *
1095: * @see cfg_print_func_t
1096: */
1097: DLLIMPORT cfg_print_func_t __export cfg_set_print_func(cfg_t *cfg, const char *name,
1098: cfg_print_func_t pf);
1099:
1100: /** Register a validating callback function for an option.
1101: *
1102: * @param cfg The configuration file context.
1103: * @param name The name of the option.
1104: * @param vf The validating callback function.
1105: *
1106: * @see cfg_validate_callback_t
1107: */
1108: DLLIMPORT cfg_validate_callback_t __export cfg_set_validate_func(cfg_t *cfg,
1109: const char *name,
1110: cfg_validate_callback_t vf);
1111:
1112: #ifdef __cplusplus
1113: }
1114: #endif
1115:
1116: #endif
1117:
1118: /** @example ftpconf.c
1119: */
1120:
1121: /** @example simple.c
1122: */
1123:
1124: /** @example reread.c
1125: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>