Annotation of embedaddon/confuse/tests/modified_flag.c, revision 1.1.1.1
1.1 misho 1: #include "check_confuse.h"
2: #include <stdlib.h>
3: #include <string.h>
4:
5: static int parse_ptr(cfg_t *cfg, cfg_opt_t *opt,
6: const char *value, void *result)
7: {
8: char *ptr = strdup(value);
9: if (!ptr)
10: return -1;
11:
12: *(void **)result = ptr;
13: return 0;
14: }
15:
16: static int is_set(cfg_t *cfg, const char *name, int flags)
17: {
18: cfg_opt_t *opt = cfg_getopt(cfg, name);
19: if (!opt)
20: return -1;
21: return !!(opt->flags & flags);
22: }
23:
24: int main(void)
25: {
26: cfg_opt_t sub[] = {
27: CFG_INT_LIST("int", "{0,1,2}", CFGF_NONE),
28: CFG_INT_LIST("nodef", NULL, CFGF_NONE),
29: CFG_FLOAT("float", 42.17, CFGF_NONE),
30: CFG_BOOL("bool", cfg_true, CFGF_NONE),
31: CFG_STR("str", "hello", CFGF_NODEFAULT),
32: CFG_PTR_CB("ptr", "dummy", CFGF_NONE, parse_ptr, free),
33: CFG_END()
34: };
35: cfg_opt_t opts[] = {
36: CFG_INT_LIST("int", "{0,1,2}", CFGF_NONE),
37: CFG_INT_LIST("nodef", NULL, CFGF_NONE),
38: CFG_FLOAT("float", 17.42, CFGF_NONE),
39: CFG_BOOL("bool", cfg_true, CFGF_NONE),
40: CFG_STR("str", "hello", CFGF_NONE),
41: CFG_SEC("sub", sub, CFGF_NONE),
42: CFG_PTR_CB("ptr", "dummy", CFGF_NONE, parse_ptr, free),
43: CFG_END()
44: };
45:
46: cfg_t *cfg = cfg_init(opts, 0);
47:
48: fail_unless(is_set(cfg, "int", CFGF_MODIFIED) == 0);
49: fail_unless(is_set(cfg, "nodef", CFGF_MODIFIED) == 0);
50: fail_unless(is_set(cfg, "float", CFGF_MODIFIED) == 0);
51: fail_unless(is_set(cfg, "bool", CFGF_MODIFIED) == 0);
52: fail_unless(is_set(cfg, "str", CFGF_MODIFIED) == 0);
53: fail_unless(is_set(cfg, "ptr", CFGF_MODIFIED) == 0);
54: fail_unless(is_set(cfg, "sub|int", CFGF_MODIFIED) == 0);
55: fail_unless(is_set(cfg, "sub|nodef", CFGF_MODIFIED) == 0);
56: fail_unless(is_set(cfg, "sub|float", CFGF_MODIFIED) == 0);
57: fail_unless(is_set(cfg, "sub|bool", CFGF_MODIFIED) == 0);
58: fail_unless(is_set(cfg, "sub|str", CFGF_MODIFIED) == 0);
59: fail_unless(is_set(cfg, "sub|ptr", CFGF_MODIFIED) == 0);
60:
61: fail_unless(cfg_parse_buf(cfg, "") == CFG_SUCCESS);
62:
63: fail_unless(is_set(cfg, "int", CFGF_MODIFIED) == 0);
64: fail_unless(is_set(cfg, "nodef", CFGF_MODIFIED) == 0);
65: fail_unless(is_set(cfg, "float", CFGF_MODIFIED) == 0);
66: fail_unless(is_set(cfg, "bool", CFGF_MODIFIED) == 0);
67: fail_unless(is_set(cfg, "str", CFGF_MODIFIED) == 0);
68: fail_unless(is_set(cfg, "ptr", CFGF_MODIFIED) == 0);
69: fail_unless(is_set(cfg, "sub|int", CFGF_MODIFIED) == 0);
70: fail_unless(is_set(cfg, "sub|nodef", CFGF_MODIFIED) == 0);
71: fail_unless(is_set(cfg, "sub|float", CFGF_MODIFIED) == 0);
72: fail_unless(is_set(cfg, "sub|bool", CFGF_MODIFIED) == 0);
73: fail_unless(is_set(cfg, "sub|str", CFGF_MODIFIED) == 0);
74: fail_unless(is_set(cfg, "sub|ptr", CFGF_MODIFIED) == 0);
75:
76: fail_unless(cfg_parse_buf(cfg, "int = {3,4}") == CFG_SUCCESS);
77:
78: fail_unless(is_set(cfg, "int", CFGF_MODIFIED) == 1);
79: fail_unless(is_set(cfg, "nodef", CFGF_MODIFIED) == 0);
80: fail_unless(is_set(cfg, "float", CFGF_MODIFIED) == 0);
81: fail_unless(is_set(cfg, "bool", CFGF_MODIFIED) == 0);
82: fail_unless(is_set(cfg, "str", CFGF_MODIFIED) == 0);
83: fail_unless(is_set(cfg, "ptr", CFGF_MODIFIED) == 0);
84: fail_unless(is_set(cfg, "sub|int", CFGF_MODIFIED) == 0);
85: fail_unless(is_set(cfg, "sub|nodef", CFGF_MODIFIED) == 0);
86: fail_unless(is_set(cfg, "sub|float", CFGF_MODIFIED) == 0);
87: fail_unless(is_set(cfg, "sub|bool", CFGF_MODIFIED) == 0);
88: fail_unless(is_set(cfg, "sub|str", CFGF_MODIFIED) == 0);
89: fail_unless(is_set(cfg, "sub|ptr", CFGF_MODIFIED) == 0);
90:
91: fail_unless(cfg_parse_buf(cfg, "nodef = {}") == CFG_SUCCESS);
92:
93: fail_unless(is_set(cfg, "int", CFGF_MODIFIED) == 1);
94: fail_unless(is_set(cfg, "nodef", CFGF_MODIFIED) == 1);
95: fail_unless(is_set(cfg, "float", CFGF_MODIFIED) == 0);
96: fail_unless(is_set(cfg, "bool", CFGF_MODIFIED) == 0);
97: fail_unless(is_set(cfg, "str", CFGF_MODIFIED) == 0);
98: fail_unless(is_set(cfg, "ptr", CFGF_MODIFIED) == 0);
99: fail_unless(is_set(cfg, "sub|int", CFGF_MODIFIED) == 0);
100: fail_unless(is_set(cfg, "sub|nodef", CFGF_MODIFIED) == 0);
101: fail_unless(is_set(cfg, "sub|float", CFGF_MODIFIED) == 0);
102: fail_unless(is_set(cfg, "sub|bool", CFGF_MODIFIED) == 0);
103: fail_unless(is_set(cfg, "sub|str", CFGF_MODIFIED) == 0);
104: fail_unless(is_set(cfg, "sub|ptr", CFGF_MODIFIED) == 0);
105:
106: fail_unless(cfg_parse_buf(cfg, "float = 3.14") == CFG_SUCCESS);
107:
108: fail_unless(is_set(cfg, "int", CFGF_MODIFIED) == 1);
109: fail_unless(is_set(cfg, "nodef", CFGF_MODIFIED) == 1);
110: fail_unless(is_set(cfg, "float", CFGF_MODIFIED) == 1);
111: fail_unless(is_set(cfg, "bool", CFGF_MODIFIED) == 0);
112: fail_unless(is_set(cfg, "str", CFGF_MODIFIED) == 0);
113: fail_unless(is_set(cfg, "ptr", CFGF_MODIFIED) == 0);
114: fail_unless(is_set(cfg, "sub|int", CFGF_MODIFIED) == 0);
115: fail_unless(is_set(cfg, "sub|nodef", CFGF_MODIFIED) == 0);
116: fail_unless(is_set(cfg, "sub|float", CFGF_MODIFIED) == 0);
117: fail_unless(is_set(cfg, "sub|bool", CFGF_MODIFIED) == 0);
118: fail_unless(is_set(cfg, "sub|str", CFGF_MODIFIED) == 0);
119: fail_unless(is_set(cfg, "sub|ptr", CFGF_MODIFIED) == 0);
120:
121: cfg_free(cfg);
122: cfg = cfg_init(opts, 0);
123: fail_unless(cfg_setnint(cfg, "nodef", 1, 1) == CFG_SUCCESS);
124:
125: fail_unless(is_set(cfg, "int", CFGF_MODIFIED) == 0);
126: fail_unless(is_set(cfg, "nodef", CFGF_MODIFIED) == 1);
127: fail_unless(is_set(cfg, "float", CFGF_MODIFIED) == 0);
128: fail_unless(is_set(cfg, "bool", CFGF_MODIFIED) == 0);
129: fail_unless(is_set(cfg, "str", CFGF_MODIFIED) == 0);
130: fail_unless(is_set(cfg, "ptr", CFGF_MODIFIED) == 0);
131: fail_unless(is_set(cfg, "sub|int", CFGF_MODIFIED) == 0);
132: fail_unless(is_set(cfg, "sub|nodef", CFGF_MODIFIED) == 0);
133: fail_unless(is_set(cfg, "sub|float", CFGF_MODIFIED) == 0);
134: fail_unless(is_set(cfg, "sub|bool", CFGF_MODIFIED) == 0);
135: fail_unless(is_set(cfg, "sub|str", CFGF_MODIFIED) == 0);
136: fail_unless(is_set(cfg, "sub|ptr", CFGF_MODIFIED) == 0);
137:
138: fail_unless(cfg_setbool(cfg, "bool", cfg_true) == CFG_SUCCESS);
139:
140: fail_unless(is_set(cfg, "int", CFGF_MODIFIED) == 0);
141: fail_unless(is_set(cfg, "nodef", CFGF_MODIFIED) == 1);
142: fail_unless(is_set(cfg, "float", CFGF_MODIFIED) == 0);
143: fail_unless(is_set(cfg, "bool", CFGF_MODIFIED) == 1);
144: fail_unless(is_set(cfg, "str", CFGF_MODIFIED) == 0);
145: fail_unless(is_set(cfg, "ptr", CFGF_MODIFIED) == 0);
146: fail_unless(is_set(cfg, "sub|int", CFGF_MODIFIED) == 0);
147: fail_unless(is_set(cfg, "sub|nodef", CFGF_MODIFIED) == 0);
148: fail_unless(is_set(cfg, "sub|float", CFGF_MODIFIED) == 0);
149: fail_unless(is_set(cfg, "sub|bool", CFGF_MODIFIED) == 0);
150: fail_unless(is_set(cfg, "sub|str", CFGF_MODIFIED) == 0);
151: fail_unless(is_set(cfg, "sub|ptr", CFGF_MODIFIED) == 0);
152:
153: fail_unless(cfg_setfloat(cfg, "sub|float", 2.718) == CFG_SUCCESS);
154:
155: fail_unless(is_set(cfg, "int", CFGF_MODIFIED) == 0);
156: fail_unless(is_set(cfg, "nodef", CFGF_MODIFIED) == 1);
157: fail_unless(is_set(cfg, "float", CFGF_MODIFIED) == 0);
158: fail_unless(is_set(cfg, "bool", CFGF_MODIFIED) == 1);
159: fail_unless(is_set(cfg, "str", CFGF_MODIFIED) == 0);
160: fail_unless(is_set(cfg, "ptr", CFGF_MODIFIED) == 0);
161: fail_unless(is_set(cfg, "sub|int", CFGF_MODIFIED) == 0);
162: fail_unless(is_set(cfg, "sub|nodef", CFGF_MODIFIED) == 0);
163: fail_unless(is_set(cfg, "sub|float", CFGF_MODIFIED) == 1);
164: fail_unless(is_set(cfg, "sub|bool", CFGF_MODIFIED) == 0);
165: fail_unless(is_set(cfg, "sub|str", CFGF_MODIFIED) == 0);
166: fail_unless(is_set(cfg, "sub|ptr", CFGF_MODIFIED) == 0);
167:
168: fail_unless(cfg_setbool(cfg, "sub|bool", cfg_true) == CFG_SUCCESS);
169:
170: fail_unless(is_set(cfg, "int", CFGF_MODIFIED) == 0);
171: fail_unless(is_set(cfg, "nodef", CFGF_MODIFIED) == 1);
172: fail_unless(is_set(cfg, "float", CFGF_MODIFIED) == 0);
173: fail_unless(is_set(cfg, "bool", CFGF_MODIFIED) == 1);
174: fail_unless(is_set(cfg, "str", CFGF_MODIFIED) == 0);
175: fail_unless(is_set(cfg, "ptr", CFGF_MODIFIED) == 0);
176: fail_unless(is_set(cfg, "sub|int", CFGF_MODIFIED) == 0);
177: fail_unless(is_set(cfg, "sub|nodef", CFGF_MODIFIED) == 0);
178: fail_unless(is_set(cfg, "sub|float", CFGF_MODIFIED) == 1);
179: fail_unless(is_set(cfg, "sub|bool", CFGF_MODIFIED) == 1);
180: fail_unless(is_set(cfg, "sub|str", CFGF_MODIFIED) == 0);
181: fail_unless(is_set(cfg, "sub|ptr", CFGF_MODIFIED) == 0);
182:
183: cfg_free(cfg);
184: cfg = cfg_init(opts, 0);
185: fail_unless(cfg_parse_buf(cfg, "sub { bool = true }") == CFG_SUCCESS);
186:
187: fail_unless(is_set(cfg, "int", CFGF_MODIFIED) == 0);
188: fail_unless(is_set(cfg, "nodef", CFGF_MODIFIED) == 0);
189: fail_unless(is_set(cfg, "float", CFGF_MODIFIED) == 0);
190: fail_unless(is_set(cfg, "bool", CFGF_MODIFIED) == 0);
191: fail_unless(is_set(cfg, "str", CFGF_MODIFIED) == 0);
192: fail_unless(is_set(cfg, "ptr", CFGF_MODIFIED) == 0);
193: fail_unless(is_set(cfg, "sub|int", CFGF_MODIFIED) == 0);
194: fail_unless(is_set(cfg, "sub|nodef", CFGF_MODIFIED) == 0);
195: fail_unless(is_set(cfg, "sub|float", CFGF_MODIFIED) == 0);
196: fail_unless(is_set(cfg, "sub|bool", CFGF_MODIFIED) == 1);
197: fail_unless(is_set(cfg, "sub|str", CFGF_MODIFIED) == 0);
198: fail_unless(is_set(cfg, "sub|ptr", CFGF_MODIFIED) == 0);
199:
200: fail_unless(cfg_parse_buf(cfg, "sub { str = hello }") == CFG_SUCCESS);
201:
202: fail_unless(is_set(cfg, "int", CFGF_MODIFIED) == 0);
203: fail_unless(is_set(cfg, "nodef", CFGF_MODIFIED) == 0);
204: fail_unless(is_set(cfg, "float", CFGF_MODIFIED) == 0);
205: fail_unless(is_set(cfg, "bool", CFGF_MODIFIED) == 0);
206: fail_unless(is_set(cfg, "str", CFGF_MODIFIED) == 0);
207: fail_unless(is_set(cfg, "ptr", CFGF_MODIFIED) == 0);
208: fail_unless(is_set(cfg, "sub|int", CFGF_MODIFIED) == 0);
209: fail_unless(is_set(cfg, "sub|nodef", CFGF_MODIFIED) == 0);
210: fail_unless(is_set(cfg, "sub|float", CFGF_MODIFIED) == 0);
211: fail_unless(is_set(cfg, "sub|bool", CFGF_MODIFIED) == 1);
212: fail_unless(is_set(cfg, "sub|str", CFGF_MODIFIED) == 1);
213: fail_unless(is_set(cfg, "sub|ptr", CFGF_MODIFIED) == 0);
214:
215: char *bad_ints[] = { "1", "a" };
216: fail_unless(cfg_setmulti(cfg, "int", 2, bad_ints) == CFG_FAIL);
217:
218: fail_unless(is_set(cfg, "int", CFGF_MODIFIED) == 0);
219: fail_unless(is_set(cfg, "nodef", CFGF_MODIFIED) == 0);
220: fail_unless(is_set(cfg, "float", CFGF_MODIFIED) == 0);
221: fail_unless(is_set(cfg, "bool", CFGF_MODIFIED) == 0);
222: fail_unless(is_set(cfg, "str", CFGF_MODIFIED) == 0);
223: fail_unless(is_set(cfg, "ptr", CFGF_MODIFIED) == 0);
224: fail_unless(is_set(cfg, "sub|int", CFGF_MODIFIED) == 0);
225: fail_unless(is_set(cfg, "sub|nodef", CFGF_MODIFIED) == 0);
226: fail_unless(is_set(cfg, "sub|float", CFGF_MODIFIED) == 0);
227: fail_unless(is_set(cfg, "sub|bool", CFGF_MODIFIED) == 1);
228: fail_unless(is_set(cfg, "sub|str", CFGF_MODIFIED) == 1);
229: fail_unless(is_set(cfg, "sub|ptr", CFGF_MODIFIED) == 0);
230:
231: char *good_ints[] = { "1", "2" };
232: fail_unless(cfg_setmulti(cfg, "int", 2, good_ints) == CFG_SUCCESS);
233:
234: fail_unless(is_set(cfg, "int", CFGF_MODIFIED) == 1);
235: fail_unless(is_set(cfg, "nodef", CFGF_MODIFIED) == 0);
236: fail_unless(is_set(cfg, "float", CFGF_MODIFIED) == 0);
237: fail_unless(is_set(cfg, "bool", CFGF_MODIFIED) == 0);
238: fail_unless(is_set(cfg, "str", CFGF_MODIFIED) == 0);
239: fail_unless(is_set(cfg, "ptr", CFGF_MODIFIED) == 0);
240: fail_unless(is_set(cfg, "sub|int", CFGF_MODIFIED) == 0);
241: fail_unless(is_set(cfg, "sub|nodef", CFGF_MODIFIED) == 0);
242: fail_unless(is_set(cfg, "sub|float", CFGF_MODIFIED) == 0);
243: fail_unless(is_set(cfg, "sub|bool", CFGF_MODIFIED) == 1);
244: fail_unless(is_set(cfg, "sub|str", CFGF_MODIFIED) == 1);
245: fail_unless(is_set(cfg, "sub|ptr", CFGF_MODIFIED) == 0);
246:
247: fail_unless(cfg_setmulti(cfg, "sub|ptr", 1, good_ints) == CFG_SUCCESS);
248:
249: fail_unless(is_set(cfg, "int", CFGF_MODIFIED) == 1);
250: fail_unless(is_set(cfg, "nodef", CFGF_MODIFIED) == 0);
251: fail_unless(is_set(cfg, "float", CFGF_MODIFIED) == 0);
252: fail_unless(is_set(cfg, "bool", CFGF_MODIFIED) == 0);
253: fail_unless(is_set(cfg, "str", CFGF_MODIFIED) == 0);
254: fail_unless(is_set(cfg, "ptr", CFGF_MODIFIED) == 0);
255: fail_unless(is_set(cfg, "sub|int", CFGF_MODIFIED) == 0);
256: fail_unless(is_set(cfg, "sub|nodef", CFGF_MODIFIED) == 0);
257: fail_unless(is_set(cfg, "sub|float", CFGF_MODIFIED) == 0);
258: fail_unless(is_set(cfg, "sub|bool", CFGF_MODIFIED) == 1);
259: fail_unless(is_set(cfg, "sub|str", CFGF_MODIFIED) == 1);
260: fail_unless(is_set(cfg, "sub|ptr", CFGF_MODIFIED) == 1);
261:
262: cfg_free(cfg);
263:
264: return 0;
265: }
266:
267: /**
268: * Local Variables:
269: * indent-tabs-mode: t
270: * c-file-style: "linux"
271: * End:
272: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>