X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=inline;f=ucw%2Fgetopt.h;h=9ea498ce7d6d6b9daab6ae72455d37050cc759d9;hb=564be9c0adf9f5796b60f2727cecc9c7274f86ff;hp=531d2582e2607063df98e3b426fa4886fc37c53b;hpb=031256ad2e123eec58521f8e3eb9496c197641d2;p=libucw.git diff --git a/ucw/getopt.h b/ucw/getopt.h index 531d2582..9ea498ce 100644 --- a/ucw/getopt.h +++ b/ucw/getopt.h @@ -2,7 +2,7 @@ * UCW Library -- Parsing of configuration and command-line options * * (c) 2001--2006 Robert Spalek - * (c) 2003--2006 Martin Mares + * (c) 2003--2012 Martin Mares * * This software may be freely distributed and used according to the terms * of the GNU Lesser General Public License. @@ -11,74 +11,63 @@ #ifndef _UCW_GETOPT_H #define _UCW_GETOPT_H -#ifdef CONFIG_OWN_GETOPT -#include "ucw/getopt/getopt-sh.h" +#ifdef CONFIG_UCW_CLEAN_ABI +#define cf_def_file ucw_cf_def_file +#define cf_env_file ucw_cf_env_file +#define cf_getopt ucw_cf_getopt +#define reset_getopt ucw_reset_getopt +#endif + +#ifdef CONFIG_UCW_OWN_GETOPT +#include #else #include #endif -void reset_getopt(void); - -/* Safe loading and reloading of configuration files: conf-input.c */ - -extern char *cf_def_file; /* DEFAULT_CONFIG; NULL if already loaded */ -extern char *cf_env_file; /* ENV_VAR_CONFIG */ -int cf_reload(const char *file); -int cf_load(const char *file); -int cf_set(const char *string); - -/* Direct access to configuration items: conf-intr.c */ - -#define CF_OPERATIONS T(CLOSE) T(SET) T(CLEAR) T(ALL) \ - T(APPEND) T(PREPEND) T(REMOVE) T(EDIT) T(AFTER) T(BEFORE) T(COPY) - /* Closing brace finishes previous block. - * Basic attributes (static, dynamic, parsed) can be used with SET. - * Dynamic arrays can be used with SET, APPEND, PREPEND. - * Sections can be used with SET. - * Lists can be used with everything. */ -#define T(x) OP_##x, -enum cf_operation { CF_OPERATIONS }; -#undef T - -struct cf_item; -char *cf_find_item(const char *name, struct cf_item *item); -char *cf_write_item(struct cf_item *item, enum cf_operation op, int number, char **pars); - -/* Debug dumping: conf-dump.c */ - -struct fastbuf; -void cf_dump_sections(struct fastbuf *fb); - -/* Journaling control: conf-journal.c */ +/*** + * [[conf_getopt]] + * Loading by @cf_getopt() + * ~~~~~~~~~~~~~~~~~~~~~~~ + ***/ -struct cf_journal_item; -struct cf_journal_item *cf_journal_new_transaction(uns new_pool); -void cf_journal_commit_transaction(uns new_pool, struct cf_journal_item *oldj); -void cf_journal_rollback_transaction(uns new_pool, struct cf_journal_item *oldj); - -/* - * cf_getopt() takes care of parsing the command-line arguments, loading the - * default configuration file (cf_def_file) and processing configuration options. - * The calling convention is the same as with GNU getopt_long(), but you must prefix - * your own short/long options by the CF_(SHORT|LONG)_OPTS or pass CF_NO_LONG_OPTS - * of there are no long options. - * - * The default configuration file can be overriden by the --config options, - * which must come first. During parsing of all other options, the configuration - * is already available. +/** + * The default config (as set by `CONFIG_UCW_DEFAULT_CONFIG`) or NULL if already loaded. + * You can set it to something else manually. */ - +extern char *cf_def_file; +/** + * Name of environment variable that can override what configuration is loaded. + * Defaults to `CONFIG_UCW_ENV_VAR_CONFIG`. + **/ +extern char *cf_env_file; +/** + * Short options for loading configuration by @cf_getopt(). + * Prepend to your own options. + **/ #define CF_SHORT_OPTS "C:S:" +/** + * Long options for loading configuration by @cf_getopt(). + * Prepend to your own options. + **/ #define CF_LONG_OPTS {"config", 1, 0, 'C'}, {"set", 1, 0, 'S'}, CF_LONG_OPTS_DEBUG +/** + * Use this constant as @long_opts parameter of @cf_getopt() if you do + * not have any long options in your program. + **/ #define CF_NO_LONG_OPTS (const struct option []) { CF_LONG_OPTS { NULL, 0, 0, 0 } } #ifndef CF_USAGE_TAB #define CF_USAGE_TAB "" #endif +/** + * This macro provides text describing usage of the configuration + * loading options. Concatenate with description of your options and + * write to the user, if he/she provides invalid options. + **/ #define CF_USAGE \ "-C, --config filename\t" CF_USAGE_TAB "Override the default configuration file\n\ -S, --set sec.item=val\t" CF_USAGE_TAB "Manual setting of a configuration item\n" CF_USAGE_DEBUG -#ifdef CONFIG_DEBUG +#ifdef CONFIG_UCW_DEBUG #define CF_LONG_OPTS_DEBUG { "dumpconfig", 0, 0, 0x64436667 } , #define CF_USAGE_DEBUG " --dumpconfig\t" CF_USAGE_TAB "Dump program configuration\n" #else @@ -86,7 +75,20 @@ void cf_journal_rollback_transaction(uns new_pool, struct cf_journal_item *oldj) #define CF_USAGE_DEBUG #endif -// conf-input.c +/** + * Takes care of parsing the command-line arguments, loading the + * default configuration file (<>) and processing + * configuration options. The calling convention is the same as with GNU getopt_long(), + * but you must prefix your own short/long options by the + * <> or <> or + * pass <> if there are no long options. + * + * The default configuration file can be overwritten by the --config options, + * which must come first. During parsing of all other options, the configuration + * is already available. + **/ int cf_getopt(int argc, char * const argv[], const char *short_opts, const struct option *long_opts, int *long_index); +void reset_getopt(void); /** If you want to start parsing of the arguments from the first one again. **/ + #endif