]> mj.ucw.cz Git - libucw.git/blob - lib/conf2-test.c
interface simplified and a few bugs removed
[libucw.git] / lib / conf2-test.c
1 /*
2  *      Insane tester of reading configuration files
3  *
4  *      (c) 2006 Robert Spalek <robert@ucw.cz>
5  */
6
7 #include "lib/lib.h"
8 #include "lib/conf2.h"
9 #include "lib/clists.h"
10
11 #include <stdlib.h>
12 #include <time.h>
13
14 struct sub_sect_1 {
15   byte *name;
16   byte *level;
17   int confidence;
18 };
19
20 static byte *
21 init_sec_1(void *ptr)
22 {
23   struct sub_sect_1 *s = ptr;
24   s->name = "unknown";
25   s->level = "default";
26   s->confidence = 5;
27   return NULL;
28 }
29
30 static byte *
31 commit_sec_1(void *ptr)
32 {
33   struct sub_sect_1 *s = ptr;
34   if (s->confidence < 0 || s->confidence > 10)
35     return "Well, this can't be";
36   return NULL;
37 }
38
39 static struct cf_section cf_sec_1 = {
40   .size = sizeof(struct sub_sect_1),
41   .init = init_sec_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)),
48     CF_END
49 #undef F
50   }
51 };
52
53 static int nr1 = 15;
54 static int *nrs1 = ARRAY_ALLOC(int, 5, 5, 4, 3, 2, 1);
55 static int *nrs2;
56 static byte *str1 = "no worries";
57 static byte **str2 = ARRAY_ALLOC(byte *, 2, "Alice", "Bob");
58 static u64 u1 = 0xCafeBeefDeadC00ll;
59 static double d1 = -1.1;
60 static struct sub_sect_1 sec1 = { "Charlie", "WBAFC", 0 };
61 static struct clist secs;
62 static time_t t1, t2;
63
64 static byte *
65 commit_top(void *ptr UNUSED)
66 {
67   if (nr1 != 15)
68     return "Don't touch my variable!";
69   return NULL;
70 }
71
72 static byte *
73 time_parser(byte *name UNUSED, uns number, byte **pars, void *ptr)
74 {
75   * (time_t*) ptr = number ? atoi(pars[0]) : time(NULL);
76   return NULL;
77 }
78
79 static struct cf_section cf_top = {
80   .commit = commit_top,
81   .cfg = (struct cf_item []) {
82     CF_INT("nr1", &nr1),
83     CF_INT_AR("nrs1", &nrs1, 5),
84     CF_INT_AR("nrs2", &nrs2, -1000),
85     CF_STRING("str1", &str1),
86     CF_STRING_AR("str2", &str2, 2),
87     CF_U64("u1", &u1),
88     CF_DOUBLE("d1", &d1),
89     CF_PARSER("FirstTime", &t1, time_parser, -1),
90     CF_PARSER("SecondTime", &t2, time_parser, 1),
91     CF_SUB_SECTION("master", &sec1, &cf_sec_1),
92     CF_LINK_LIST("slaves", &secs, &cf_sec_1),
93     CF_END
94   }
95 };
96
97 int
98 main(void)
99 {
100   return 0;
101 }