2 * Insane tester of reading configuration files
4 * (c) 2006 Robert Spalek <robert@ucw.cz>
9 #include "lib/clists.h"
21 init_sec_1(void *ptr, struct cf_section *sec UNUSED)
23 struct sub_sect_1 *s = ptr;
31 commit_sec_1(void *ptr, struct cf_section *sec UNUSED)
33 struct sub_sect_1 *s = ptr;
34 if (s->confidence < 0 || s->confidence > 10)
35 return "Well, this can't be";
39 static struct cf_section cf_sec_1 = {
40 .size = sizeof(struct sub_sect_1),
42 .commit = commit_sec_1,
43 .cfg = (struct cf_item[]) {
44 #define F(x) CF_FIELD(struct sub_sect_1, x)
45 CF_STRING("name", F(name)),
46 CF_STRING("level", F(level)),
47 CF_INT("confidence", F(confidence)),
54 static int *nrs1 = DEFAULT_ARRAY(int, 5, 5, 4, 3, 2, 1);
56 static byte *str1 = "no worries";
57 static byte **str2 = DEFAULT_ARRAY(byte *, 2, "Alice", "Bob");
58 static u64 u1 = 0xCafeBeefDeadC00ll;
59 static double d1 = -1.1;
60 static struct sub_sect_1 sec_1 = { "Charlie", "WBAFC", 0 };
61 static struct cnode secs;
65 commit_top(void *ptr UNUSED, struct cf_section *sec UNUSED)
71 time_parser(uns nr_pars, byte **pars, void *sec_ptr, struct cf_section *sec, uns index)
73 if (nr_pars != 0 && nr_pars != 1)
74 return "Either now or 1 parameter!";
76 time_t t = nr_pars ? atoi(pars[0]) : time(NULL);
77 if (sec->cfg[index].name[0] == 'F')
84 static struct cf_section cf_top = {
86 .cfg = (struct cf_item []) {
88 CF_INT_AR("nrs1", &nrs1, 5),
89 CF_INT_AR("nrs2", &nrs2, -1000),
90 CF_STRING("str1", &str1),
91 CF_STRING_AR("str2", &str2, 2),
94 CF_FUNCTION("FirstTime", time_parser),
95 CF_FUNCTION("SecondTime", time_parser),
96 CF_SUB_SECTION("master", &sec_1, &cf_sec_1),
97 CF_LINK_LIST("slaves", &secs, &cf_sec_1),