1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#ifndef CFGOPT_H
#define CFGOPT_H
#include <stdbool.h>
#include "util.h"
/* declarations */
enum CFGOPT_TYPE {
CONFIG_STR,
CONFIG_DEC,
CONFIG_OCT,
CONFIG_BOOL,
CONFIG_IP,
CONFIG_IP6,
CONFIG_MAC,
CONFIG_NONOPT,
CONFIG_END
};
typedef struct cfgopt {
char cmd;
char *key;
enum CFGOPT_TYPE type;
union {
char *str;
long *num;
bool *boolean;
char *ip;
char *ip6;
char *mac;
char *nonopt;
} val;
char *default_value;
char *help;
} cfgopt_t;
#define cfgopt_cfgfile { 'C', "configfile", CONFIG_STR, {}, NULL, "config file" }
#define cfgopt_help { 'h', "help", CONFIG_BOOL, {}, "0", "show help" }
#define cfgopt_verbose { 'V', "verbose", CONFIG_BOOL, { .boolean = &util_flag_verbose }, "0", "verbose output" }
#define cfgopt_nonopt { '\0', "", CONFIG_NONOPT, {}, "", "" }
#define cfgopt_end { '\0', "", CONFIG_END, {}, "", "" }
/* functions */
extern bool cfgopt_load(cfgopt_t *, char *fname);
extern size_t cfgopt_len(cfgopt_t *);
extern void cfgopt_free(cfgopt_t *);
extern void cfgopt_parse_args(cfgopt_t *, int argc, char **argv);
extern void cfgopt_print(cfgopt_t *);
extern void cfgopt_usage(cfgopt_t *);
extern bool cfgopt_get_bool(cfgopt_t *, char *key);
extern bool cfgopt_is_present(cfgopt_t *, char *key);
extern cfgopt_t *cfgopt_get(cfgopt_t *, char *key);
extern char *cfgopt_get_ip(cfgopt_t *, char *key);
extern char *cfgopt_get_ip6(cfgopt_t *, char *key);
extern char *cfgopt_get_mac(cfgopt_t *, char *key);
extern char *cfgopt_get_nonopt(cfgopt_t *);
extern char *cfgopt_get_str(cfgopt_t *, char *key);
extern char *cfgopt_get_str_dup(cfgopt_t *, char *key);
extern long cfgopt_get_num(cfgopt_t *, char *key);
#endif
|