2 * Insane tester of reading configuration files
4 * (c) 2006 Robert Spalek <robert@ucw.cz>
9 #include "lib/clists.h"
22 init_sec_1(struct sub_sect_1 *s)
32 commit_sec_1(struct sub_sect_1 *s)
34 if (s->confidence[0] < 0 || s->confidence[0] > 10)
35 return "Well, this can't be";
39 static struct cf_section cf_sec_1 = {
40 CF_TYPE(struct sub_sect_1),
42 CF_COMMIT(commit_sec_1),
43 #define F(x) PTR_TO(struct sub_sect_1, x)
45 CF_STRING("name", F(name)),
46 CF_STRING("level", F(level)),
47 CF_INT_ARY("confidence", F(confidence[0]), 2), // XXX: the [0] is needed for the sake of type checking
48 CF_DOUBLE_DYN("list", F(list), 100),
55 static int *nrs1 = DYN_ALLOC(int, 5, 5, 4, 3, 2, 1);
57 static byte *str1 = "no worries";
58 static byte **str2 = DYN_ALLOC(byte *, 2, "Alice", "Bob");
59 static u64 u1 = 0xCafeBeefDeadC00ll;
60 static double d1 = -1.1;
61 static struct sub_sect_1 sec1 = { "Charlie", "WBAFC", { 0, -1} };
62 static struct clist secs;
66 commit_top(void *ptr UNUSED)
69 return "Don't touch my variable!";
74 time_parser(uns number, byte **pars, time_t *ptr)
76 *ptr = number ? atoi(pars[0]) : time(NULL);
80 static struct cf_section cf_top UNUSED = {
81 CF_COMMIT(commit_top),
84 CF_INT_DYN("nrs1", &nrs1, 1000),
85 CF_INT_ARY("nrs2", nrs2, 5),
86 CF_STRING("str1", &str1),
87 CF_STRING_DYN("str2", &str2, 2),
90 CF_PARSER("FirstTime", &t1, time_parser, -1),
91 CF_PARSER("SecondTime", &t2, time_parser, 1),
92 CF_SECTION("master", &sec1, &cf_sec_1),
93 CF_LIST("slaves", &secs, &cf_sec_1),