Annotation of embedaddon/confuse/src/confuse.h, revision 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>