File: cfgopt.h

package info (click to toggle)
pcaputils 0.7-1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 284 kB
  • ctags: 511
  • sloc: ansic: 2,905; makefile: 70; sh: 43
file content (65 lines) | stat: -rw-r--r-- 1,676 bytes parent folder | download | duplicates (4)
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