confuse  3.3
confuse.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2002-2017 Martin Hedenfalk <martin@bzero.se>
3  *
4  * Permission to use, copy, modify, and/or 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 
36 #ifndef CONFUSE_H_
37 #define CONFUSE_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_STATIC
55 # define DLLIMPORT
56 # else /* ! BUILDING_STATIC */
57 # ifdef BUILDING_DLL
58 # define DLLIMPORT __declspec (dllexport)
59 # else /* ! BUILDING_DLL */
60 # define DLLIMPORT __declspec (dllimport)
61 # endif /* BUILDING_DLL */
62 # endif /* BUILDING_STATIC */
63 #else /* ! _WIN32 || __GNUC__ */
64 # define DLLIMPORT
65 #endif /* _WIN32 */
66 
67 #ifndef __BORLANDC__
68 # define __export
69 #endif
70 
72 enum cfg_type_t {
73  CFGT_NONE,
82 };
83 typedef enum cfg_type_t cfg_type_t;
84 
86 #define CFGF_NONE (0)
87 #define CFGF_MULTI (1 << 0)
88 #define CFGF_LIST (1 << 1)
89 #define CFGF_NOCASE (1 << 2)
90 #define CFGF_TITLE (1 << 3)
91 #define CFGF_NODEFAULT (1 << 4)
92 #define CFGF_NO_TITLE_DUPES (1 << 5)
95 #define CFGF_RESET (1 << 6)
96 #define CFGF_DEFINIT (1 << 7)
97 #define CFGF_IGNORE_UNKNOWN (1 << 8)
98 #define CFGF_DEPRECATED (1 << 9)
99 #define CFGF_DROP (1 << 10)
100 #define CFGF_COMMENTS (1 << 11)
101 #define CFGF_MODIFIED (1 << 12)
102 #define CFGF_KEYSTRVAL (1 << 13)
105 #define CFG_SUCCESS 0
106 #define CFG_FAIL -1
107 #define CFG_FILE_ERROR -1
108 #define CFG_PARSE_ERROR 1
109 
110 typedef union cfg_value_t cfg_value_t;
111 typedef union cfg_simple_t cfg_simple_t;
112 typedef struct cfg_opt_t cfg_opt_t;
113 typedef struct cfg_t cfg_t;
114 typedef struct cfg_defvalue_t cfg_defvalue_t;
115 typedef int cfg_flag_t;
116 typedef struct cfg_searchpath_t cfg_searchpath_t;
117 
143 typedef int (*cfg_func_t)(cfg_t *cfg, cfg_opt_t *opt, int argc, const char **argv);
144 
165 typedef void (*cfg_print_func_t)(cfg_opt_t *opt, unsigned int index, FILE *fp);
166 
188 typedef int (*cfg_callback_t)(cfg_t *cfg, cfg_opt_t *opt, const char *value, void *result);
189 
203 typedef int (*cfg_validate_callback_t)(cfg_t *cfg, cfg_opt_t *opt);
204 
219 typedef int (*cfg_validate_callback2_t)(cfg_t *cfg, cfg_opt_t *opt, void *value);
220 
229 typedef void (*cfg_free_func_t)(void *value);
230 
232 typedef enum { cfg_false, cfg_true } cfg_bool_t;
233 
235 typedef void (*cfg_errfunc_t)(cfg_t *cfg, const char *fmt, va_list ap);
236 
246 typedef int (*cfg_print_filter_func_t)(cfg_t *cfg, cfg_opt_t *opt);
247 
252 struct cfg_t {
253  cfg_flag_t flags;
254  char *name;
257  char *comment;
259  char *title;
261  char *filename;
262  int line;
266  cfg_searchpath_t *path;
268 };
269 
272 union cfg_value_t {
273  long int number;
274  double fpnumber;
276  char *string;
278  void *ptr;
279 };
280 
285  long int *number;
286  double *fpnumber;
287  cfg_bool_t *boolean;
288  char **string;
289  void **ptr;
290 };
291 
296  long int number;
297  double fpnumber;
299  const char *string;
300  char *parsed;
303 };
304 
309 struct cfg_opt_t {
310  const char *name;
311  char *comment;
313  unsigned int nvalues;
315  cfg_flag_t flags;
326  cfg_free_func_t freecb; /***< user-defined memory release function */
327 };
328 
329 extern const char __export confuse_copyright[];
330 extern const char __export confuse_version[];
331 extern const char __export confuse_author[];
332 
333 #define __CFG_STR(name, def, flags, svalue, cb) \
334  {name,0,CFGT_STR,0,0,flags,0,{0,0,cfg_false,def,0},0,{.string=svalue},cb,0,0,0,0}
335 #define __CFG_STR_LIST(name, def, flags, svalue, cb) \
336  {name,0,CFGT_STR,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,{.string=svalue},cb,0,0,0,0}
337 
340 #define CFG_STR(name, def, flags) \
341  __CFG_STR(name, def, flags, 0, 0)
342 
345 #define CFG_STR_LIST(name, def, flags) \
346  __CFG_STR_LIST(name, def, flags, 0, 0)
347 
350 #define CFG_STR_CB(name, def, flags, cb) \
351  __CFG_STR(name, def, flags, 0, cb)
352 
355 #define CFG_STR_LIST_CB(name, def, flags, cb) \
356  __CFG_STR_LIST(name, def, flags, 0, cb)
357 
410 #define CFG_SIMPLE_STR(name, svalue) \
411  __CFG_STR(name, 0, CFGF_NONE, svalue, 0)
412 
413 
414 #define __CFG_INT(name, def, flags, svalue, cb) \
415  {name,0,CFGT_INT,0,0,flags,0,{def,0,cfg_false,0,0},0,{.number=svalue},cb,0,0,0,0}
416 #define __CFG_INT_LIST(name, def, flags, svalue, cb) \
417  {name,0,CFGT_INT,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,{.number=svalue},cb,0,0,0,0}
418 
421 #define CFG_INT(name, def, flags) \
422  __CFG_INT(name, def, flags, 0, 0)
423 
426 #define CFG_INT_LIST(name, def, flags) \
427  __CFG_INT_LIST(name, def, flags, 0, 0)
428 
431 #define CFG_INT_CB(name, def, flags, cb) \
432  __CFG_INT(name, def, flags, 0, cb)
433 
436 #define CFG_INT_LIST_CB(name, def, flags, cb) \
437  __CFG_INT_LIST(name, def, flags, 0, cb)
438 
445 #define CFG_SIMPLE_INT(name, svalue) \
446  __CFG_INT(name, 0, CFGF_NONE, svalue, 0)
447 
448 
449 
450 #define __CFG_FLOAT(name, def, flags, svalue, cb) \
451  {name,0,CFGT_FLOAT,0,0,flags,0,{0,def,cfg_false,0,0},0,{.fpnumber=svalue},cb,0,0,0,0}
452 #define __CFG_FLOAT_LIST(name, def, flags, svalue, cb) \
453  {name,0,CFGT_FLOAT,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,{.fpnumber=svalue},cb,0,0,0,0}
454 
457 #define CFG_FLOAT(name, def, flags) \
458  __CFG_FLOAT(name, def, flags, 0, 0)
459 
462 #define CFG_FLOAT_LIST(name, def, flags) \
463  __CFG_FLOAT_LIST(name, def, flags, 0, 0)
464 
467 #define CFG_FLOAT_CB(name, def, flags, cb) \
468  __CFG_FLOAT(name, def, flags, 0, cb)
469 
472 #define CFG_FLOAT_LIST_CB(name, def, flags, cb) \
473  __CFG_FLOAT_LIST(name, def, flags, 0, cb)
474 
478 #define CFG_SIMPLE_FLOAT(name, svalue) \
479  __CFG_FLOAT(name, 0, CFGF_NONE, svalue, 0)
480 
481 
482 
483 #define __CFG_BOOL(name, def, flags, svalue, cb) \
484  {name,0,CFGT_BOOL,0,0,flags,0,{0,0,def,0,0},0,{.boolean=svalue},cb,0,0,0,0}
485 #define __CFG_BOOL_LIST(name, def, flags, svalue, cb) \
486  {name,0,CFGT_BOOL,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,{.boolean=svalue},cb,0,0,0,0}
487 
490 #define CFG_BOOL(name, def, flags) \
491  __CFG_BOOL(name, def, flags, 0, 0)
492 
495 #define CFG_BOOL_LIST(name, def, flags) \
496  __CFG_BOOL_LIST(name, def, flags, 0, 0)
497 
500 #define CFG_BOOL_CB(name, def, flags, cb) \
501  __CFG_BOOL(name, def, flags, 0, cb)
502 
505 #define CFG_BOOL_LIST_CB(name, def, flags, cb) \
506  __CFG_BOOL_LIST(name, def, flags, 0, cb)
507 
511 #define CFG_SIMPLE_BOOL(name, svalue) \
512  __CFG_BOOL(name, cfg_false, CFGF_NONE, svalue, 0)
513 
514 
515 
527 #define CFG_SEC(name, opts, flags) \
528  {name,0,CFGT_SEC,0,0,flags,opts,{0,0,cfg_false,0,0},0,{0},0,0,0,0,0}
529 
530 
531 
538 #define CFG_FUNC(name, func) \
539  {name,0,CFGT_FUNC,0,0,CFGF_NONE,0,{0,0,cfg_false,0,0},func,{0},0,0,0,0,0}
540 
541 
542 #define __CFG_PTR(name, def, flags, svalue, parsecb, freecb) \
543  {name,0,CFGT_PTR,0,0,flags,0,{0,0,cfg_false,0,def},0,{.ptr=svalue},parsecb,0,0,0,freecb}
544 #define __CFG_PTR_LIST(name, def, flags, svalue, parsecb, freecb) \
545  {name,0,CFGT_PTR,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,{.ptr=svalue},parsecb,0,0,0,freecb}
546 
559 #define CFG_PTR_CB(name, def, flags, parsecb, freecb) \
560  __CFG_PTR(name, def, flags, 0, parsecb, freecb)
561 
564 #define CFG_PTR_LIST_CB(name, def, flags, parsecb, freecb) \
565  __CFG_PTR(name, def, flags | CFGF_LIST, 0, parsecb, freecb)
566 
567 /*#define CFG_SIMPLE_PTR(name, svalue, cb) \
568  __CFG_PTR(name, 0, 0, svalue, cb)*/
569 
570 
574 #define CFG_END() \
575  {0,0,CFGT_NONE,0,0,CFGF_NONE,0,{0,0,cfg_false,0,0},0,{0},0,0,0,0,0}
576 
577 
578 
606 DLLIMPORT cfg_t *__export cfg_init(cfg_opt_t *opts, cfg_flag_t flags);
607 
624 DLLIMPORT int __export cfg_add_searchpath(cfg_t *cfg, const char *dir);
625 
637 DLLIMPORT char *__export cfg_searchpath(cfg_searchpath_t *path, const char *file);
638 
652 DLLIMPORT int __export cfg_parse(cfg_t *cfg, const char *filename);
653 
666 DLLIMPORT int __export cfg_parse_fp(cfg_t *cfg, FILE *fp);
667 
678 DLLIMPORT int __export cfg_parse_buf(cfg_t *cfg, const char *buf);
679 
687 DLLIMPORT int __export cfg_free_value(cfg_opt_t *opt);
688 
694 DLLIMPORT int __export cfg_free(cfg_t *cfg);
695 
699 DLLIMPORT cfg_errfunc_t __export cfg_set_error_function(cfg_t *cfg, cfg_errfunc_t errfunc);
700 
704 DLLIMPORT void __export cfg_error(cfg_t *cfg, const char *fmt, ...);
705 
710 DLLIMPORT char * __export cfg_opt_getcomment(cfg_opt_t *opt);
711 
722 DLLIMPORT char * __export cfg_getcomment(cfg_t *cfg, const char *name);
723 
729 DLLIMPORT signed long __export cfg_opt_getnint(cfg_opt_t *opt, unsigned int index);
730 
737 DLLIMPORT long int __export cfg_getnint(cfg_t *cfg, const char *name, unsigned int index);
738 
748 DLLIMPORT long int __export cfg_getint(cfg_t *cfg, const char *name);
749 
755 DLLIMPORT double __export cfg_opt_getnfloat(cfg_opt_t *opt, unsigned int index);
756 
763 DLLIMPORT double __export cfg_getnfloat(cfg_t *cfg, const char *name, unsigned int index);
764 
773 DLLIMPORT double __export cfg_getfloat(cfg_t *cfg, const char *name);
774 
780 DLLIMPORT char *__export cfg_opt_getnstr(cfg_opt_t *opt, unsigned int index);
781 
788 DLLIMPORT char *__export cfg_getnstr(cfg_t *cfg, const char *name, unsigned int index);
789 
798 DLLIMPORT char *__export cfg_getstr(cfg_t *cfg, const char *name);
799 
805 DLLIMPORT cfg_bool_t __export cfg_opt_getnbool(cfg_opt_t *opt, unsigned int index);
806 
814 DLLIMPORT cfg_bool_t __export cfg_getnbool(cfg_t *cfg, const char *name, unsigned int index);
815 
824 DLLIMPORT cfg_bool_t __export cfg_getbool(cfg_t *cfg, const char *name);
825 
826 
827 DLLIMPORT void *__export cfg_opt_getnptr(cfg_opt_t *opt, unsigned int index);
828 DLLIMPORT void *__export cfg_getnptr(cfg_t *cfg, const char *name, unsigned int indx);
829 
838 DLLIMPORT void *__export cfg_getptr(cfg_t *cfg, const char *name);
839 
840 
846 DLLIMPORT cfg_t *__export cfg_opt_getnsec(cfg_opt_t *opt, unsigned int index);
847 
856 DLLIMPORT cfg_t *__export cfg_getnsec(cfg_t *cfg, const char *name, unsigned int index);
857 
865 DLLIMPORT cfg_t *__export cfg_opt_gettsec(cfg_opt_t *opt, const char *title);
866 
876 DLLIMPORT cfg_t *__export cfg_gettsec(cfg_t *cfg, const char *name, const char *title);
877 
888 DLLIMPORT cfg_t *__export cfg_getsec(cfg_t *cfg, const char *name);
889 
895 DLLIMPORT unsigned int __export cfg_opt_size(cfg_opt_t *opt);
896 
909 DLLIMPORT unsigned int __export cfg_size(cfg_t *cfg, const char *name);
910 
917 DLLIMPORT const char *__export cfg_title(cfg_t *cfg);
918 
925 DLLIMPORT const char *__export cfg_name(cfg_t *cfg);
926 
933 DLLIMPORT const char *__export cfg_opt_name(cfg_opt_t *opt);
934 
942 DLLIMPORT const char *cfg_opt_getstr(cfg_opt_t *opt);
943 
949 DLLIMPORT int __export cfg_include(cfg_t *cfg, cfg_opt_t *opt, int argc, const char **argv);
950 
957 DLLIMPORT char *__export cfg_tilde_expand(const char *filename);
958 
966 DLLIMPORT int __export cfg_parse_boolean(const char *s);
967 
974 DLLIMPORT cfg_opt_t *cfg_getnopt(cfg_t *cfg, unsigned int index);
975 
984 DLLIMPORT cfg_opt_t *__export cfg_getopt(cfg_t *cfg, const char *name);
985 
994 DLLIMPORT cfg_value_t *cfg_setopt(cfg_t *cfg, cfg_opt_t *opt, const char *value);
995 
1002 DLLIMPORT int __export cfg_opt_setcomment(cfg_opt_t *opt, char *comment);
1003 
1022 DLLIMPORT int __export cfg_setcomment(cfg_t *cfg, const char *name, char *comment);
1023 
1034 DLLIMPORT int __export cfg_opt_setnint(cfg_opt_t *opt, long int value, unsigned int index);
1035 
1045 DLLIMPORT int __export cfg_setint(cfg_t *cfg, const char *name, long int value);
1046 
1058 DLLIMPORT int __export cfg_setnint(cfg_t *cfg, const char *name, long int value, unsigned int index);
1059 
1070 DLLIMPORT int __export cfg_opt_setnfloat(cfg_opt_t *opt, double value, unsigned int index);
1071 
1081 DLLIMPORT int __export cfg_setfloat(cfg_t *cfg, const char *name, double value);
1082 
1094 DLLIMPORT int __export cfg_setnfloat(cfg_t *cfg, const char *name, double value, unsigned int index);
1095 
1106 DLLIMPORT int __export cfg_opt_setnbool(cfg_opt_t *opt, cfg_bool_t value, unsigned int index);
1107 
1117 DLLIMPORT int __export cfg_setbool(cfg_t *cfg, const char *name, cfg_bool_t value);
1118 
1130 DLLIMPORT int __export cfg_setnbool(cfg_t *cfg, const char *name, cfg_bool_t value, unsigned int index);
1131 
1143 DLLIMPORT int __export cfg_opt_setnstr(cfg_opt_t *opt, const char *value, unsigned int index);
1144 
1155 DLLIMPORT int __export cfg_setstr(cfg_t *cfg, const char *name, const char *value);
1156 
1169 DLLIMPORT int __export cfg_setnstr(cfg_t *cfg, const char *name, const char *value, unsigned int index);
1170 
1183 DLLIMPORT int __export cfg_setlist(cfg_t *cfg, const char *name, unsigned int nvalues, ...);
1184 
1185 DLLIMPORT int __export cfg_numopts(cfg_opt_t *opts);
1186 
1196 DLLIMPORT unsigned int __export cfg_num(cfg_t *cfg);
1197 
1210 DLLIMPORT int __export cfg_addlist(cfg_t *cfg, const char *name, unsigned int nvalues, ...);
1211 
1221 DLLIMPORT int cfg_opt_setmulti(cfg_t *cfg, cfg_opt_t *opt, unsigned int nvalues, char **values);
1222 
1232 DLLIMPORT int cfg_setmulti(cfg_t *cfg, const char *name, unsigned int nvalues, char **values);
1233 
1244 DLLIMPORT cfg_t *cfg_addtsec(cfg_t *cfg, const char *name, const char *title);
1245 
1253 DLLIMPORT int __export cfg_opt_rmnsec(cfg_opt_t *opt, unsigned int index);
1254 
1263 DLLIMPORT int __export cfg_rmnsec(cfg_t *cfg, const char *name, unsigned int index);
1264 
1272 DLLIMPORT int __export cfg_rmsec(cfg_t *cfg, const char *name);
1273 
1283 DLLIMPORT int __export cfg_opt_rmtsec(cfg_opt_t *opt, const char *title);
1284 
1296 DLLIMPORT int __export cfg_rmtsec(cfg_t *cfg, const char *name, const char *title);
1297 
1312 DLLIMPORT int __export cfg_opt_nprint_var(cfg_opt_t *opt, unsigned int index, FILE *fp);
1313 
1320 DLLIMPORT int __export cfg_opt_print_indent(cfg_opt_t *opt, FILE *fp, int indent);
1321 
1334 DLLIMPORT int __export cfg_opt_print(cfg_opt_t *opt, FILE *fp);
1335 
1342 DLLIMPORT int __export cfg_print_indent(cfg_t *cfg, FILE *fp, int indent);
1343 
1359 DLLIMPORT int __export cfg_print(cfg_t *cfg, FILE *fp);
1360 
1369 
1378 DLLIMPORT cfg_print_func_t __export cfg_set_print_func(cfg_t *cfg, const char *name, cfg_print_func_t pf);
1379 
1394 
1403 DLLIMPORT cfg_validate_callback_t __export cfg_set_validate_func(cfg_t *cfg, const char *name, cfg_validate_callback_t vf);
1404 
1418 DLLIMPORT cfg_validate_callback2_t __export cfg_set_validate_func2(cfg_t *cfg, const char *name, cfg_validate_callback2_t vf);
1419 
1420 #ifdef __cplusplus
1421 }
1422 #endif
1423 #endif /* CONFUSE_H_ */
1424 
CFGF_NOCASE
#define CFGF_NOCASE
configuration file is case insensitive
Definition: confuse.h:89
cfg_opt_setnint
DLLIMPORT int __export cfg_opt_setnint(cfg_opt_t *opt, long int value, unsigned int index)
Set a value of an integer option.
Definition: confuse.c:2068
cfg_opt_getstr
const DLLIMPORT char * cfg_opt_getstr(cfg_opt_t *opt)
Return the string value of a key=value pair.
Definition: confuse.c:394
cfg_defvalue_t::number
long int number
default integer value
Definition: confuse.h:296
cfg_rmsec
DLLIMPORT int __export cfg_rmsec(cfg_t *cfg, const char *name)
Removes and frees a config section.
Definition: confuse.c:2344
cfg_opt_t::type
cfg_type_t type
Type of option.
Definition: confuse.h:312
cfg_defvalue_t::boolean
cfg_bool_t boolean
default boolean value
Definition: confuse.h:298
cfg_init
DLLIMPORT cfg_t *__export cfg_init(cfg_opt_t *opts, cfg_flag_t flags)
Create and initialize a cfg_t structure.
Definition: confuse.c:1816
CFGF_LIST
#define CFGF_LIST
option is a list
Definition: confuse.h:88
cfg_value_t
Data structure holding the value of a fundamental option value.
Definition: confuse.h:272
cfg_opt_print
DLLIMPORT int __export cfg_opt_print(cfg_opt_t *opt, FILE *fp)
Print an option and its value to a file.
Definition: confuse.c:2523
CFGF_NODEFAULT
#define CFGF_NODEFAULT
option has no default value
Definition: confuse.h:91
cfg_setnfloat
DLLIMPORT int __export cfg_setnfloat(cfg_t *cfg, const char *name, double value, unsigned int index)
Set a value of a floating point option given its name and index.
Definition: confuse.c:2122
cfg_validate_callback_t
int(* cfg_validate_callback_t)(cfg_t *cfg, cfg_opt_t *opt)
Validating callback prototype.
Definition: confuse.h:203
cfg_include
DLLIMPORT int __export cfg_include(cfg_t *cfg, cfg_opt_t *opt, int argc, const char **argv)
Predefined include-function.
Definition: confuse.c:1997
cfg_print_filter_func_t
int(* cfg_print_filter_func_t)(cfg_t *cfg, cfg_opt_t *opt)
Print filter function.
Definition: confuse.h:246
cfg_setnbool
DLLIMPORT int __export cfg_setnbool(cfg_t *cfg, const char *name, cfg_bool_t value, unsigned int index)
Set a value of a boolean option given its name and index.
Definition: confuse.c:2157
cfg_t::filename
char * filename
Name of the file being parsed.
Definition: confuse.h:261
cfg_validate_callback2_t
int(* cfg_validate_callback2_t)(cfg_t *cfg, cfg_opt_t *opt, void *value)
Validating callback2 prototype.
Definition: confuse.h:219
cfg_type_t
cfg_type_t
Fundamental option types.
Definition: confuse.h:72
cfg_opt_nprint_var
DLLIMPORT int __export cfg_opt_nprint_var(cfg_opt_t *opt, unsigned int index, FILE *fp)
Default value print function.
Definition: confuse.c:2391
cfg_defvalue_t
Data structure holding the default value given by the initialization macros.
Definition: confuse.h:295
cfg_addlist
DLLIMPORT int __export cfg_addlist(cfg_t *cfg, const char *name, unsigned int nvalues,...)
Add values for a list option.
Definition: confuse.c:2268
cfg_size
DLLIMPORT unsigned int __export cfg_size(cfg_t *cfg, const char *name)
Return the number of values this option has.
Definition: confuse.c:406
cfg_parse_boolean
DLLIMPORT int __export cfg_parse_boolean(const char *s)
Parse a boolean option string.
Definition: confuse.c:721
cfg_setstr
DLLIMPORT int __export cfg_setstr(cfg_t *cfg, const char *name, const char *value)
Set the value of a string option given its name.
Definition: confuse.c:2211
cfg_setnint
DLLIMPORT int __export cfg_setnint(cfg_t *cfg, const char *name, long int value, unsigned int index)
Set a value of an integer option given its name and index.
Definition: confuse.c:2087
CFG_STR
#define CFG_STR(name, def, flags)
Initialize a string option.
Definition: confuse.h:340
cfg_print_indent
DLLIMPORT int __export cfg_print_indent(cfg_t *cfg, FILE *fp, int indent)
Print the options and values to a file.
Definition: confuse.c:2543
cfg_setint
DLLIMPORT int __export cfg_setint(cfg_t *cfg, const char *name, long int value)
Set the value of an integer option given its name.
Definition: confuse.c:2098
cfg_opt_t::def
cfg_defvalue_t def
Default value.
Definition: confuse.h:317
CFGF_COMMENTS
#define CFGF_COMMENTS
Enable option annotation/comments support.
Definition: confuse.h:100
cfg_free_func_t
void(* cfg_free_func_t)(void *value)
User-defined memory release function for CFG_PTR values.
Definition: confuse.h:229
confuse.h
A configuration file parser library.
cfg_num
DLLIMPORT unsigned int __export cfg_num(cfg_t *cfg)
Return number of options in a file or section.
Definition: confuse.c:656
CFGT_BOOL
@ CFGT_BOOL
boolean value
Definition: confuse.h:77
cfg_opt_size
DLLIMPORT unsigned int __export cfg_opt_size(cfg_opt_t *opt)
Return the number of values this option has.
Definition: confuse.c:399
CFGF_TITLE
#define CFGF_TITLE
option has a title (only applies to sections)
Definition: confuse.h:90
cfg_opt_t::parsecb
cfg_callback_t parsecb
Value parsing callback function.
Definition: confuse.h:322
cfg_setmulti
DLLIMPORT int cfg_setmulti(cfg_t *cfg, const char *name, unsigned int nvalues, char **values)
Set an option (create an instance of an option).
Definition: confuse.c:1127
cfg_setbool
DLLIMPORT int __export cfg_setbool(cfg_t *cfg, const char *name, cfg_bool_t value)
Set the value of a boolean option given its name.
Definition: confuse.c:2162
cfg_opt_gettsec
DLLIMPORT cfg_t *__export cfg_opt_gettsec(cfg_opt_t *opt, const char *title)
Returns the value of a section option, given a cfg_opt_t pointer and the title.
Definition: confuse.c:568
cfg_opt_t::name
const char * name
The name of the option.
Definition: confuse.h:310
cfg_opt_t::validcb2
cfg_validate_callback2_t validcb2
Value validating set callback function.
Definition: confuse.h:324
cfg_rmnsec
DLLIMPORT int __export cfg_rmnsec(cfg_t *cfg, const char *name, unsigned int index)
Indexed version of cfg_rmsec(), used for CFGF_MULTI sections.
Definition: confuse.c:2339
cfg_rmtsec
DLLIMPORT int __export cfg_rmtsec(cfg_t *cfg, const char *name, const char *title)
Removes and frees a section given the title, used for section with the CFGF_TITLE flag set.
Definition: confuse.c:2386
cfg_getnopt
DLLIMPORT cfg_opt_t * cfg_getnopt(cfg_t *cfg, unsigned int index)
Return the nth option in a file or section.
Definition: confuse.c:353
CFGT_PTR
@ CFGT_PTR
pointer to user-defined value
Definition: confuse.h:80
cfg_t::flags
cfg_flag_t flags
Any flags passed to cfg_init()
Definition: confuse.h:253
cfg_parse_buf
DLLIMPORT int __export cfg_parse_buf(cfg_t *cfg, const char *buf)
Same as cfg_parse() above, but takes a character buffer as argument.
Definition: confuse.c:1777
cfg_opt_getnint
DLLIMPORT signed long __export cfg_opt_getnint(cfg_opt_t *opt, unsigned int index)
Returns the value of an integer option, given a cfg_opt_t pointer.
Definition: confuse.c:424
cfg_t::title
char * title
Optional title for this section, only set if CFGF_TITLE flag is set.
Definition: confuse.h:259
cfg_getnfloat
DLLIMPORT double __export cfg_getnfloat(cfg_t *cfg, const char *name, unsigned int index)
Indexed version of cfg_getfloat(), used for lists.
Definition: confuse.c:464
cfg_defvalue_t::fpnumber
double fpnumber
default floating point value
Definition: confuse.h:297
cfg_t::opts
cfg_opt_t * opts
Array of options.
Definition: confuse.h:258
cfg_opt_rmtsec
DLLIMPORT int __export cfg_opt_rmtsec(cfg_opt_t *opt, const char *title)
Removes and frees a config section, given a cfg_opt_t pointer and the title.
Definition: confuse.c:2353
CFGF_DEPRECATED
#define CFGF_DEPRECATED
option is deprecated and should be ignored.
Definition: confuse.h:98
cfg_value_t::ptr
void * ptr
user-defined value
Definition: confuse.h:278
cfg_defvalue_t::string
const char * string
default string value
Definition: confuse.h:299
cfg_opt_getcomment
DLLIMPORT char *__export cfg_opt_getcomment(cfg_opt_t *opt)
Returns the option comment.
Definition: confuse.c:411
cfg_opt_getnstr
DLLIMPORT char *__export cfg_opt_getnstr(cfg_opt_t *opt, unsigned int index)
Returns the value of a string option, given a cfg_opt_t pointer.
Definition: confuse.c:499
cfg_setlist
DLLIMPORT int __export cfg_setlist(cfg_t *cfg, const char *name, unsigned int nvalues,...)
Set values for a list option.
Definition: confuse.c:2250
cfg_title
const DLLIMPORT char *__export cfg_title(cfg_t *cfg)
Return the title of a section.
Definition: confuse.c:373
cfg_opt_t::nvalues
unsigned int nvalues
Number of values parsed.
Definition: confuse.h:313
cfg_opt_getnsec
DLLIMPORT cfg_t *__export cfg_opt_getnsec(cfg_opt_t *opt, unsigned int index)
Returns the value of a section option, given a cfg_opt_t pointer.
Definition: confuse.c:549
cfg_setopt
DLLIMPORT cfg_value_t * cfg_setopt(cfg_t *cfg, cfg_opt_t *opt, const char *value)
Set an option (create an instance of an option).
Definition: confuse.c:867
cfg_getnint
DLLIMPORT long int __export cfg_getnint(cfg_t *cfg, const char *name, unsigned int index)
Indexed version of cfg_getint(), used for lists.
Definition: confuse.c:439
cfg_addtsec
DLLIMPORT cfg_t * cfg_addtsec(cfg_t *cfg, const char *name, const char *title)
Create a new titled config section.
Definition: confuse.c:2285
cfg_free_value
DLLIMPORT int __export cfg_free_value(cfg_opt_t *opt)
Free the memory allocated for the values of a given option.
Definition: confuse.c:1898
cfg_errfunc_t
void(* cfg_errfunc_t)(cfg_t *cfg, const char *fmt, va_list ap)
Error reporting function.
Definition: confuse.h:235
cfg_getfloat
DLLIMPORT double __export cfg_getfloat(cfg_t *cfg, const char *name)
Returns the value of a floating point option.
Definition: confuse.c:469
cfg_set_print_func
DLLIMPORT cfg_print_func_t __export cfg_set_print_func(cfg_t *cfg, const char *name, cfg_print_func_t pf)
Set a print callback function for an option given its name.
Definition: confuse.c:2568
CFGT_COMMENT
@ CFGT_COMMENT
comment/annotation
Definition: confuse.h:81
CFGF_IGNORE_UNKNOWN
#define CFGF_IGNORE_UNKNOWN
ignore unknown options in configuration files
Definition: confuse.h:97
cfg_set_validate_func
DLLIMPORT cfg_validate_callback_t __export cfg_set_validate_func(cfg_t *cfg, const char *name, cfg_validate_callback_t vf)
Register a validating callback function for an option.
Definition: confuse.c:2637
cfg_getnbool
DLLIMPORT cfg_bool_t __export cfg_getnbool(cfg_t *cfg, const char *name, unsigned int index)
Indexed version of cfg_getbool(), used for lists.
Definition: confuse.c:489
cfg_getnsec
DLLIMPORT cfg_t *__export cfg_getnsec(cfg_t *cfg, const char *name, unsigned int index)
Indexed version of cfg_getsec(), used for sections with the CFGF_MULTI flag set.
Definition: confuse.c:563
cfg_setcomment
DLLIMPORT int __export cfg_setcomment(cfg_t *cfg, const char *name, char *comment)
Annotate an option given its name.
Definition: confuse.c:2063
cfg_getnstr
DLLIMPORT char *__export cfg_getnstr(cfg_t *cfg, const char *name, unsigned int index)
Indexed version of cfg_getstr(), used for lists.
Definition: confuse.c:514
cfg_add_searchpath
DLLIMPORT int __export cfg_add_searchpath(cfg_t *cfg, const char *dir)
Add a searchpath directory to the configuration context, the const char* argument will be duplicated ...
Definition: confuse.c:1154
cfg_getcomment
DLLIMPORT char *__export cfg_getcomment(cfg_t *cfg, const char *name)
Returns the option comment.
Definition: confuse.c:419
cfg_getopt
DLLIMPORT cfg_opt_t *__export cfg_getopt(cfg_t *cfg, const char *name)
Return an option given it's name.
Definition: confuse.c:368
cfg_value_t::number
long int number
integer value
Definition: confuse.h:273
cfg_opt_t::validcb
cfg_validate_callback_t validcb
Value validating parsing callback function.
Definition: confuse.h:323
cfg_opt_t::subopts
cfg_opt_t * subopts
Suboptions (only applies to sections)
Definition: confuse.h:316
cfg_opt_t::flags
cfg_flag_t flags
Flags.
Definition: confuse.h:315
CFGF_KEYSTRVAL
#define CFGF_KEYSTRVAL
section has free-form key=value string options created when parsing file
Definition: confuse.h:102
CFGT_STR
@ CFGT_STR
string
Definition: confuse.h:76
cfg_print
DLLIMPORT int __export cfg_print(cfg_t *cfg, FILE *fp)
Print the options and values to a file.
Definition: confuse.c:2548
CFGF_MODIFIED
#define CFGF_MODIFIED
option has been changed from its default value
Definition: confuse.h:101
cfg_value_t::section
cfg_t * section
section value
Definition: confuse.h:277
cfg_parse
DLLIMPORT int __export cfg_parse(cfg_t *cfg, const char *filename)
Parse a configuration file.
Definition: confuse.c:1746
cfg_opt_rmnsec
DLLIMPORT int __export cfg_opt_rmnsec(cfg_opt_t *opt, unsigned int index)
Removes and frees a config section, given a cfg_opt_t pointer.
Definition: confuse.c:2309
cfg_getbool
DLLIMPORT cfg_bool_t __export cfg_getbool(cfg_t *cfg, const char *name)
Returns the value of a boolean option.
Definition: confuse.c:494
cfg_opt_t
Data structure holding information about an option.
Definition: confuse.h:309
cfg_searchpath
DLLIMPORT char *__export cfg_searchpath(cfg_searchpath_t *path, const char *file)
Search the linked-list of cfg_searchpath_t for the specified file.
Definition: confuse.c:1715
cfg_t::pff
cfg_print_filter_func_t pff
Printing filter function.
Definition: confuse.h:267
cfg_opt_getnbool
DLLIMPORT cfg_bool_t __export cfg_opt_getnbool(cfg_opt_t *opt, unsigned int index)
Returns the value of a boolean option, given a cfg_opt_t pointer.
Definition: confuse.c:474
cfg_callback_t
int(* cfg_callback_t)(cfg_t *cfg, cfg_opt_t *opt, const char *value, void *result)
Value parsing callback prototype.
Definition: confuse.h:188
cfg_func_t
int(* cfg_func_t)(cfg_t *cfg, cfg_opt_t *opt, int argc, const char **argv)
Function prototype used by CFGT_FUNC options.
Definition: confuse.h:143
CFGF_DROP
#define CFGF_DROP
option should be dropped after parsing
Definition: confuse.h:99
CFGT_FUNC
@ CFGT_FUNC
function
Definition: confuse.h:79
cfg_t::line
int line
Line number in the config file.
Definition: confuse.h:262
cfg_defvalue_t::parsed
char * parsed
default value that is parsed by libConfuse, used for lists and functions
Definition: confuse.h:300
cfg_opt_print_indent
DLLIMPORT int __export cfg_opt_print_indent(cfg_opt_t *opt, FILE *fp, int indent)
Print an option and its value to a file.
Definition: confuse.c:2518
cfg_value_t::boolean
cfg_bool_t boolean
boolean value
Definition: confuse.h:275
cfg_set_print_filter_func
DLLIMPORT cfg_print_filter_func_t __export cfg_set_print_filter_func(cfg_t *cfg, cfg_print_filter_func_t pff)
Install a user-defined print filter function.
Definition: confuse.c:1196
cfg_opt_set_print_func
DLLIMPORT cfg_print_func_t __export cfg_opt_set_print_func(cfg_opt_t *opt, cfg_print_func_t pf)
Set a print callback function for an option.
Definition: confuse.c:2553
cfg_getptr
DLLIMPORT void *__export cfg_getptr(cfg_t *cfg, const char *name)
Returns the value of a user-defined option (void pointer).
Definition: confuse.c:544
cfg_opt_name
const DLLIMPORT char *__export cfg_opt_name(cfg_opt_t *opt)
Return the name of an option.
Definition: confuse.c:387
cfg_t::comment
char * comment
Optional annotation/comment.
Definition: confuse.h:257
cfg_value_t::fpnumber
double fpnumber
floating point value
Definition: confuse.h:274
cfg_opt_t::values
cfg_value_t ** values
Array of found values.
Definition: confuse.h:314
cfg_print_func_t
void(* cfg_print_func_t)(cfg_opt_t *opt, unsigned int index, FILE *fp)
Function prototype used by the cfg_print_ functions.
Definition: confuse.h:165
cfg_simple_t
Data structure holding the pointer to a user provided variable defined with CFG_SIMPLE_*.
Definition: confuse.h:284
cfg_name
const DLLIMPORT char *__export cfg_name(cfg_t *cfg)
Return the name of a section.
Definition: confuse.c:380
cfg_set_error_function
DLLIMPORT cfg_errfunc_t __export cfg_set_error_function(cfg_t *cfg, cfg_errfunc_t errfunc)
Install a user-defined error reporting function.
Definition: confuse.c:1181
cfg_t::path
cfg_searchpath_t * path
Linked list of directories to search.
Definition: confuse.h:266
CFGF_MULTI
#define CFGF_MULTI
option may be specified multiple times (only applies to sections)
Definition: confuse.h:87
cfg_opt_t::func
cfg_func_t func
Function callback for CFGT_FUNC options.
Definition: confuse.h:318
CFGF_NO_TITLE_DUPES
#define CFGF_NO_TITLE_DUPES
multiple section titles must be unique (duplicates raises an error, only applies to sections)
Definition: confuse.h:92
cfg_opt_setnbool
DLLIMPORT int __export cfg_opt_setnbool(cfg_opt_t *opt, cfg_bool_t value, unsigned int index)
Set a value of a boolean option.
Definition: confuse.c:2138
cfg_t
Data structure holding information about a "section".
Definition: confuse.h:252
cfg_opt_setnfloat
DLLIMPORT int __export cfg_opt_setnfloat(cfg_opt_t *opt, double value, unsigned int index)
Set a value of a floating point option.
Definition: confuse.c:2103
cfg_getint
DLLIMPORT long int __export cfg_getint(cfg_t *cfg, const char *name)
Returns the value of an integer option.
Definition: confuse.c:444
cfg_t::name
char * name
The name of this section, the root section returned from cfg_init() is always named "root".
Definition: confuse.h:254
cfg_t::errfunc
cfg_errfunc_t errfunc
This function (if set with cfg_set_error_function) is called for any error message.
Definition: confuse.h:263
cfg_set_validate_func2
DLLIMPORT cfg_validate_callback2_t __export cfg_set_validate_func2(cfg_t *cfg, const char *name, cfg_validate_callback2_t vf)
Register a validating callback function for an option.
Definition: confuse.c:2652
cfg_free
DLLIMPORT int __export cfg_free(cfg_t *cfg)
Free a cfg_t context.
Definition: confuse.c:1962
CFG_SUCCESS
#define CFG_SUCCESS
Return codes from cfg_parse(), cfg_parse_boolean(), and cfg_set*() functions.
Definition: confuse.h:105
cfg_setnstr
DLLIMPORT int __export cfg_setnstr(cfg_t *cfg, const char *name, const char *value, unsigned int index)
Set a value of a boolean option given its name and index.
Definition: confuse.c:2200
cfg_getstr
DLLIMPORT char *__export cfg_getstr(cfg_t *cfg, const char *name)
Returns the value of a string option.
Definition: confuse.c:519
cfg_opt_setcomment
DLLIMPORT int __export cfg_opt_setcomment(cfg_opt_t *opt, char *comment)
Annotate an option.
Definition: confuse.c:2040
cfg_value_t::string
char * string
string value
Definition: confuse.h:276
CFGT_SEC
@ CFGT_SEC
section
Definition: confuse.h:78
cfg_tilde_expand
DLLIMPORT char *__export cfg_tilde_expand(const char *filename)
Does tilde expansion (~ -> $HOME) on the filename.
Definition: confuse.c:1851
cfg_opt_t::comment
char * comment
Optional comment/annotation.
Definition: confuse.h:311
cfg_opt_t::pf
cfg_print_func_t pf
print callback function
Definition: confuse.h:325
CFGT_INT
@ CFGT_INT
integer
Definition: confuse.h:74
cfg_setfloat
DLLIMPORT int __export cfg_setfloat(cfg_t *cfg, const char *name, double value)
Set the value of a floating point option given its name.
Definition: confuse.c:2133
cfg_opt_getnfloat
DLLIMPORT double __export cfg_opt_getnfloat(cfg_opt_t *opt, unsigned int index)
Returns the value of a floating point option, given a cfg_opt_t pointer.
Definition: confuse.c:449
cfg_opt_t::simple_value
cfg_simple_t simple_value
Pointer to user-specified variable to store simple values (created with the CFG_SIMPLE_* initializers...
Definition: confuse.h:319
cfg_gettsec
DLLIMPORT cfg_t *__export cfg_gettsec(cfg_t *cfg, const char *name, const char *title)
Return a section given the title, used for section with the CFGF_TITLE flag set.
Definition: confuse.c:590
cfg_opt_setmulti
DLLIMPORT int cfg_opt_setmulti(cfg_t *cfg, cfg_opt_t *opt, unsigned int nvalues, char **values)
Set an option (create an instance of an option).
Definition: confuse.c:1093
cfg_getsec
DLLIMPORT cfg_t *__export cfg_getsec(cfg_t *cfg, const char *name)
Returns the value of a section option.
Definition: confuse.c:595
cfg_parse_fp
DLLIMPORT int __export cfg_parse_fp(cfg_t *cfg, FILE *fp)
Same as cfg_parse() above, but takes an already opened file as argument.
Definition: confuse.c:1662
cfg_bool_t
cfg_bool_t
Boolean values.
Definition: confuse.h:232
cfg_opt_setnstr
DLLIMPORT int __export cfg_opt_setnstr(cfg_opt_t *opt, const char *value, unsigned int index)
Set a value of a string option.
Definition: confuse.c:2167
cfg_error
DLLIMPORT void __export cfg_error(cfg_t *cfg, const char *fmt,...)
Show a parser error.
Definition: confuse.c:1211
CFGT_FLOAT
@ CFGT_FLOAT
floating point number
Definition: confuse.h:75