Mercurial > hg > th-libs
annotate th_config.c @ 682:527a4d29d384
Typofix :S
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 04 Mar 2020 20:17:39 +0200 |
parents | ae601363fdad |
children | a34715d51ea4 |
rev | line source |
---|---|
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 /* |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
2 * Very simple configuration handling functions |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
3 * Programmed and designed by Matti 'ccr' Hamalainen |
553 | 4 * (C) Copyright 2004-2020 Tecnic Software productions (TNSP) |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
5 * |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
6 * Please read file 'COPYING' for information on license and distribution. |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
7 */ |
49
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
8 #include "th_util.h" |
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
9 #include "th_config.h" |
598609fb49b0
Change how "config.h" is included, etc.
Matti Hamalainen <ccr@tnsp.org>
parents:
42
diff
changeset
|
10 #include "th_string.h" |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
11 #include <stdio.h> |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
12 #include <stdarg.h> |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
13 |
499 | 14 |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
15 #define SET_MAX_BUF (8192) |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
16 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
17 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
18 /* Free a given configuration (the values are not free'd) |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
19 */ |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
20 void th_cfg_free(th_cfgitem_t *cfg) |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
21 { |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
22 th_cfgitem_t *node = cfg; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
23 |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
24 while (node != NULL) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
25 { |
155
23a79bd6c9d6
Use th_llist for th_config module as well instead of duped linked list
Matti Hamalainen <ccr@tnsp.org>
parents:
152
diff
changeset
|
26 th_cfgitem_t *next = (th_cfgitem_t *) node->node.next; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
27 |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
28 if (node->type == ITEM_SECTION) |
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
29 th_cfg_free((th_cfgitem_t *) node->v.data); |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
30 |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
31 th_free(node->name); |
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
32 th_free(node); |
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
33 node = next; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
34 } |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
35 } |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
36 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
37 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
38 /* Allocate and add new item to configuration |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
39 */ |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
40 static th_cfgitem_t *th_cfg_add(th_cfgitem_t **cfg, const char *name, |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
41 const int type, void *data) |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
42 { |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
43 th_cfgitem_t *node; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
44 |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
45 if (cfg == NULL) |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
46 return NULL; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
47 |
129 | 48 // Allocate new item |
518 | 49 if ((node = (th_cfgitem_t *) th_malloc0(sizeof(th_cfgitem_t))) == NULL) |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
50 return NULL; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
51 |
129 | 52 // Set values |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
53 node->type = type; |
22
1ac2449c4df7
ISO C99 compatibility fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
20
diff
changeset
|
54 node->v.data = data; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
55 node->name = th_strdup(name); |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
56 |
129 | 57 // Insert into linked list |
155
23a79bd6c9d6
Use th_llist for th_config module as well instead of duped linked list
Matti Hamalainen <ccr@tnsp.org>
parents:
152
diff
changeset
|
58 th_llist_append_node((th_llist_t **) cfg, (th_llist_t *) node); |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
59 |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
60 return node; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
61 } |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
62 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
63 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
64 /* Add integer type setting into give configuration |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
65 */ |
170 | 66 int th_cfg_add_int(th_cfgitem_t **cfg, const char *name, int *itemData, int defValue) |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
67 { |
518 | 68 th_cfgitem_t *node = th_cfg_add(cfg, name, ITEM_INT, (void *) itemData); |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
69 if (node == NULL) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
70 return THERR_MALLOC; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
71 |
170 | 72 *itemData = defValue; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
73 |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
74 return THERR_OK; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
75 } |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
76 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
77 |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
78 int th_cfg_add_hexvalue(th_cfgitem_t **cfg, const char *name, |
498
1dbd9259c3b8
Change hexvalue type to unsigned.
Matti Hamalainen <ccr@tnsp.org>
parents:
497
diff
changeset
|
79 unsigned int *itemData, unsigned int defValue) |
15 | 80 { |
518 | 81 th_cfgitem_t *node = th_cfg_add(cfg, name, ITEM_HEX_TRIPLET, (void *) itemData); |
15 | 82 if (node == NULL) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
83 return THERR_MALLOC; |
15 | 84 |
170 | 85 *itemData = defValue; |
15 | 86 |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
87 return THERR_OK; |
15 | 88 } |
89 | |
90 | |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
91 /* Add unsigned integer type setting into give configuration |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
92 */ |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
93 int th_cfg_add_uint(th_cfgitem_t **cfg, const char *name, |
170 | 94 unsigned int *itemData, unsigned int defValue) |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
95 { |
518 | 96 th_cfgitem_t *node = th_cfg_add(cfg, name, ITEM_UINT, (void *) itemData); |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
97 if (node == NULL) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
98 return THERR_MALLOC; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
99 |
170 | 100 *itemData = defValue; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
101 |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
102 return THERR_OK; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
103 } |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
104 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
105 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
106 /* Add strint type setting into given configuration |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
107 */ |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
108 int th_cfg_add_string(th_cfgitem_t **cfg, const char *name, |
170 | 109 char **itemData, char *defValue) |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
110 { |
518 | 111 th_cfgitem_t *node = th_cfg_add(cfg, name, ITEM_STRING, (void *) itemData); |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
112 if (node == NULL) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
113 return THERR_MALLOC; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
114 |
170 | 115 *itemData = th_strdup(defValue); |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
116 |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
117 return THERR_OK; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
118 } |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
119 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
120 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
121 /* Add boolean type setting into given configuration |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
122 */ |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
123 int th_cfg_add_bool(th_cfgitem_t **cfg, const char *name, |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
124 BOOL *itemData, BOOL defValue) |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
125 { |
518 | 126 th_cfgitem_t *node = th_cfg_add(cfg, name, ITEM_BOOL, (void *) itemData); |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
127 if (node == NULL) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
128 return THERR_MALLOC; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
129 |
170 | 130 *itemData = defValue; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
131 |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
132 return THERR_OK; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
133 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
134 |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
135 |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
136 /* Add implicit comment |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
137 */ |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
138 int th_cfg_add_comment(th_cfgitem_t **cfg, const char *comment) |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
139 { |
518 | 140 th_cfgitem_t *node = th_cfg_add(cfg, comment, ITEM_COMMENT, NULL); |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
141 if (node == NULL) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
142 return THERR_MALLOC; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
143 |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
144 return THERR_OK; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
145 } |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
146 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
147 |
16 | 148 /* Add new section |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
149 */ |
499 | 150 int th_cfg_add_section(th_cfgitem_t **cfg, const char *name, th_cfgitem_t *sect) |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
151 { |
518 | 152 th_cfgitem_t *node = th_cfg_add(cfg, name, ITEM_SECTION, (void *) sect); |
16 | 153 if (node == NULL) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
154 return THERR_MALLOC; |
16 | 155 |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
156 return THERR_OK; |
16 | 157 } |
158 | |
159 | |
152
b4e1b15a64e1
Rename qlist_t doubly linked list structure to th_llist_t.
Matti Hamalainen <ccr@tnsp.org>
parents:
151
diff
changeset
|
160 int th_cfg_add_string_list(th_cfgitem_t **cfg, const char *name, th_llist_t **data) |
16 | 161 { |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
162 th_cfgitem_t *node; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
163 |
16 | 164 if (data == NULL) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
165 return THERR_NULLPTR; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
166 |
518 | 167 if ((node = th_cfg_add(cfg, name, ITEM_STRING_LIST, (void *) data)) == NULL) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
168 return THERR_MALLOC; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
169 |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
170 return THERR_OK; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
171 } |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
172 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
173 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
174 /* Read a given file into configuration structure and variables |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
175 */ |
655 | 176 /// @cond |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
177 enum |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
178 { |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
179 PM_EOF, |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
180 PM_ERROR, |
159 | 181 PM_IDLE, |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
182 PM_COMMENT, |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
183 PM_NEXT, |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
184 PM_KEYNAME, |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
185 PM_KEYSET, |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
186 PM_STRING, |
170 | 187 PM_NUMERIC, |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
188 PM_BOOL, |
16 | 189 PM_SECTION, |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
190 PM_LIST, |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
191 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
192 PM_LAST |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
193 }; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
194 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
195 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
196 typedef struct |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
197 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
198 int ch, strDelim, |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
199 prevMode, nextMode, parseMode; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
200 } th_cfgparserctx_t; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
201 |
655 | 202 /// @endcond |
203 | |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
204 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
205 static void th_cfg_set_parsemode(th_cfgparserctx_t *ctx, const int mode) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
206 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
207 ctx->prevMode = ctx->parseMode; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
208 ctx->parseMode = mode; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
209 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
210 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
211 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
212 static void th_cfg_set_next_parsemode(th_cfgparserctx_t *ctx, const int mode) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
213 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
214 th_cfg_set_parsemode(ctx, PM_NEXT); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
215 ctx->nextMode = mode; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
216 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
217 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
218 |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
219 #define VADDCH(ch) if (strPos < SET_MAX_BUF) { tmpStr[strPos++] = ch; } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
220 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
221 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
222 static BOOL th_cfg_is_end(const int ch) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
223 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
224 return |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
225 ch == '\r' || |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
226 ch == '\n' || |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
227 ch == ';' || |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
228 ch == '#' || |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
229 th_isspace(ch); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
230 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
231 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
232 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
233 static int th_cfg_get_parsemode(const int type) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
234 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
235 switch (type) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
236 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
237 case ITEM_HEX_TRIPLET: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
238 case ITEM_STRING: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
239 return PM_STRING; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
240 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
241 case ITEM_INT: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
242 case ITEM_UINT: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
243 case ITEM_FLOAT: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
244 return PM_NUMERIC; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
245 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
246 case ITEM_BOOL: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
247 return PM_BOOL; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
248 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
249 case ITEM_SECTION: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
250 return PM_SECTION; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
251 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
252 case ITEM_STRING_LIST: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
253 return PM_LIST; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
254 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
255 default: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
256 return PM_ERROR; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
257 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
258 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
259 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
260 |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
261 static int th_cfg_set_item(th_cfgparserctx_t *ctx, th_cfgitem_t *item, const char *str) |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
262 { |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
263 BOOL res = TRUE; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
264 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
265 switch (item->type) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
266 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
267 case ITEM_HEX_TRIPLET: |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
268 res = th_get_hex_triplet(str, item->v.val_uint); |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
269 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
270 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
271 case ITEM_STRING: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
272 th_pstr_cpy(item->v.val_str, str); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
273 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
274 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
275 case ITEM_STRING_LIST: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
276 { |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
277 char *tmp; |
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
278 if ((tmp = th_strdup(str)) != NULL) |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
279 { |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
280 th_llist_append(item->v.list, tmp); |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
281 th_cfg_set_next_parsemode(ctx, PM_LIST); |
520
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
282 |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
283 // Early exit as we set the parsemode here |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
284 return THERR_OK; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
285 } |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
286 else |
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
287 res = FALSE; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
288 } |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
289 break; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
290 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
291 case ITEM_INT: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
292 *(item->v.val_int) = atoi(str); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
293 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
294 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
295 case ITEM_UINT: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
296 *(item->v.val_uint) = atol(str); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
297 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
298 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
299 case ITEM_FLOAT: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
300 *(item->v.val_float) = atof(str); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
301 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
302 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
303 case ITEM_BOOL: |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
304 res = th_get_boolean(str, item->v.val_bool); |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
305 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
306 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
307 default: |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
308 res = FALSE; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
309 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
310 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
311 |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
312 th_cfg_set_parsemode(ctx, PM_IDLE); |
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
313 |
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
314 return res ? THERR_OK : THERR_INVALID_DATA; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
315 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
316 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
317 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
318 static int th_cfg_read_sect(th_ioctx *fh, th_cfgitem_t *sect, int nesting) |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
319 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
320 th_cfgparserctx_t ctx; |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
321 th_cfgitem_t *item = NULL; |
110
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
322 char *tmpStr = NULL; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
323 size_t strPos; |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
324 BOOL isEscaped, isStart, fpSet; |
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
325 int ret = THERR_OK; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
326 |
129 | 327 // Initialize values |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
328 memset(&ctx, 0, sizeof(ctx)); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
329 ctx.ch = -1; |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
330 ctx.nextMode = ctx.prevMode = ctx.parseMode = PM_IDLE; |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
331 isEscaped = fpSet = isStart = FALSE; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
332 strPos = 0; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
333 |
110
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
334 if ((tmpStr = th_malloc(SET_MAX_BUF + 1)) == NULL) |
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
335 goto out; |
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
336 |
129 | 337 // Parse the configuration |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
338 while (ctx.parseMode != PM_EOF && ctx.parseMode != PM_ERROR) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
339 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
340 if (ctx.ch == -1) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
341 { |
129 | 342 // Get next character |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
343 switch (ctx.ch = thfgetc(fh)) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
344 { |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
345 case EOF: |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
346 if (ctx.parseMode != PM_IDLE) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
347 { |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
348 ret = th_io_error(fh, THERR_OUT_OF_DATA, |
561
7dce38c022d7
Be consistent about not using \n at end of th_io_error() messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
555
diff
changeset
|
349 "Unexpected end of file."); |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
350 goto out; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
351 } |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
352 |
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
353 ctx.parseMode = PM_EOF; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
354 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
355 |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
356 case '\n': |
499 | 357 fh->line++; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
358 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
359 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
360 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
361 switch (ctx.parseMode) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
362 { |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
363 case PM_COMMENT: |
129 | 364 // Comment parsing mode |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
365 if (ctx.ch == '\n') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
366 { |
129 | 367 // End of line, end of comment |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
368 th_cfg_set_parsemode(&ctx, ctx.prevMode); |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
369 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
370 ctx.ch = -1; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
371 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
372 |
159 | 373 case PM_IDLE: |
129 | 374 // Normal parsing mode |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
375 if (ctx.ch == '#') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
376 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
377 th_cfg_set_parsemode(&ctx, PM_COMMENT); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
378 ctx.ch = -1; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
379 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
380 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
381 if (th_cfg_is_end(ctx.ch)) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
382 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
383 ctx.ch = -1; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
384 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
385 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
386 if (ctx.ch == '}') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
387 { |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
388 if (nesting > 0) |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
389 { |
129 | 390 // Check for validation errors |
110
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
391 goto out; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
392 } |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
393 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
394 { |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
395 ret = th_io_error(fh, THERR_INVALID_DATA, |
561
7dce38c022d7
Be consistent about not using \n at end of th_io_error() messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
555
diff
changeset
|
396 "Invalid nesting sequence encountered."); |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
397 goto out; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
398 } |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
399 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
400 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
401 if (th_isalpha(ctx.ch)) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
402 { |
129 | 403 // Start of key name found |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
404 th_cfg_set_parsemode(&ctx, PM_KEYNAME); |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
405 strPos = 0; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
406 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
407 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
408 { |
129 | 409 // Error! Invalid character found |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
410 ret = th_io_error(fh, THERR_INVALID_DATA, |
561
7dce38c022d7
Be consistent about not using \n at end of th_io_error() messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
555
diff
changeset
|
411 "Unexpected character '%c'.", ctx.ch); |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
412 goto out; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
413 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
414 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
415 |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
416 case PM_KEYNAME: |
129 | 417 // Configuration KEY name parsing mode |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
418 if (ctx.ch == '#') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
419 { |
129 | 420 // Start of comment |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
421 th_cfg_set_parsemode(&ctx, PM_COMMENT); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
422 ctx.ch = -1; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
423 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
424 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
425 if (th_iscrlf(ctx.ch) || th_isspace(ctx.ch) || ctx.ch == '=') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
426 { |
129 | 427 // End of key name |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
428 th_cfg_set_next_parsemode(&ctx, PM_KEYSET); |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
429 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
430 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
431 if (th_isalnum(ctx.ch) || ctx.ch == '_' || ctx.ch == '-') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
432 { |
129 | 433 // Add to key name string |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
434 VADDCH(ctx.ch) |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
435 else |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
436 { |
129 | 437 // Error! Key name string too long! |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
438 ret = th_io_error(fh, THERR_INVALID_DATA, |
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
439 "Config key name too long!"); |
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
440 goto out; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
441 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
442 ctx.ch = -1; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
443 tmpStr[strPos] = 0; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
444 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
445 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
446 { |
129 | 447 // Error! Invalid character found |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
448 tmpStr[strPos] = 0; |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
449 ret = th_io_error(fh, THERR_INVALID_DATA, |
561
7dce38c022d7
Be consistent about not using \n at end of th_io_error() messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
555
diff
changeset
|
450 "Unexpected character '%c' in key name '%s'.", |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
451 ctx.ch, tmpStr); |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
452 goto out; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
453 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
454 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
455 |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
456 case PM_KEYSET: |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
457 if (ctx.ch == '=') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
458 { |
129 | 459 // Find key from configuration |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
460 BOOL found; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
461 tmpStr[strPos] = 0; |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
462 |
520
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
463 for (item = sect, found = FALSE; item != NULL && !found; ) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
464 { |
520
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
465 if (item->type != ITEM_COMMENT && |
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
466 item->name != NULL && |
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
467 strcmp(item->name, tmpStr) == 0) |
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
468 found = TRUE; |
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
469 else |
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
470 item = (th_cfgitem_t *) item->node.next; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
471 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
472 |
129 | 473 // Check if key was found |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
474 if (found) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
475 { |
129 | 476 // Okay, set next mode |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
477 th_cfg_set_next_parsemode(&ctx, th_cfg_get_parsemode(item->type)); |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
478 isStart = TRUE; |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
479 fpSet = FALSE; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
480 strPos = 0; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
481 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
482 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
483 { |
129 | 484 // Error! No configuration key by this name found |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
485 ret = th_io_error(fh, THERR_INVALID_DATA, |
561
7dce38c022d7
Be consistent about not using \n at end of th_io_error() messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
555
diff
changeset
|
486 "No such configuration setting: '%s'.", |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
487 tmpStr); |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
488 goto out; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
489 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
490 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
491 ctx.ch = -1; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
492 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
493 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
494 { |
129 | 495 // Error! '=' expected! |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
496 ret = th_io_error(fh, THERR_INVALID_DATA, |
561
7dce38c022d7
Be consistent about not using \n at end of th_io_error() messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
555
diff
changeset
|
497 "Unexpected character '%c', assignation '=' was expected.", |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
498 ctx.ch); |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
499 goto out; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
500 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
501 break; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
502 |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
503 case PM_NEXT: |
129 | 504 // Search next item parsing mode |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
505 if (ctx.ch == '#') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
506 { |
129 | 507 // Start of comment |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
508 th_cfg_set_parsemode(&ctx, PM_COMMENT); |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
509 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
510 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
511 if (th_isspace(ctx.ch) || th_iscrlf(ctx.ch)) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
512 { |
129 | 513 // Ignore whitespaces and linechanges |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
514 ctx.ch = -1; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
515 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
516 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
517 { |
129 | 518 // Next item found |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
519 th_cfg_set_parsemode(&ctx, ctx.nextMode); |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
520 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
521 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
522 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
523 case PM_LIST: |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
524 if (isStart) |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
525 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
526 th_cfg_set_parsemode(&ctx, PM_STRING); |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
527 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
528 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
529 if (ctx.ch == ',') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
530 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
531 th_cfg_set_next_parsemode(&ctx, PM_STRING); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
532 ctx.ch = -1; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
533 isStart = TRUE; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
534 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
535 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
536 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
537 th_cfg_set_parsemode(&ctx, PM_IDLE); |
16 | 538 } |
539 break; | |
540 | |
541 case PM_SECTION: | |
129 | 542 // Section parsing mode |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
543 if (ctx.ch != '{') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
544 { |
129 | 545 // Error! Section start '{' expected! |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
546 ret = th_io_error(fh, THERR_INVALID_DATA, |
561
7dce38c022d7
Be consistent about not using \n at end of th_io_error() messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
555
diff
changeset
|
547 "Unexpected character '%c', section start '{' was expected.", |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
548 ctx.ch); |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
549 goto out; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
550 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
551 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
552 { |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
553 if ((ret = th_cfg_read_sect(fh, item->v.section, nesting + 1)) != THERR_OK) |
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
554 goto out; |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
555 |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
556 th_cfg_set_parsemode(&ctx, PM_IDLE); |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
557 ctx.ch = -1; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
558 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
559 break; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
560 |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
561 case PM_STRING: |
129 | 562 // String parsing mode |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
563 if (isStart) |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
564 { |
129 | 565 // Start of string, get delimiter |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
566 ctx.strDelim = ctx.ch; |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
567 isStart = FALSE; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
568 strPos = 0; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
569 isEscaped = FALSE; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
570 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
571 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
572 if (!isEscaped && ctx.ch == ctx.strDelim) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
573 { |
129 | 574 // End of string, set the value |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
575 tmpStr[strPos] = 0; |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
576 if ((ret = th_cfg_set_item(&ctx, item, tmpStr)) != THERR_OK) |
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
577 goto out; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
578 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
579 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
580 if (!isEscaped && ctx.ch == '\\') |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
581 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
582 // Escape sequence |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
583 isEscaped = TRUE; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
584 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
585 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
586 { |
129 | 587 // Add character to string |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
588 VADDCH(ctx.ch) |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
589 else |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
590 { |
129 | 591 // Error! String too long! |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
592 ret = th_io_error(fh, THERR_INVALID_DATA, |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
593 "String too long! Maximum is %d characters.", |
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
594 SET_MAX_BUF); |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
595 goto out; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
596 } |
521
77495c646208
Fix parsing and writing of strings with simple escape sequences in config files.
Matti Hamalainen <ccr@tnsp.org>
parents:
520
diff
changeset
|
597 isEscaped = FALSE; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
598 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
599 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
600 ctx.ch = -1; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
601 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
602 |
170 | 603 case PM_NUMERIC: |
129 | 604 // Integer parsing mode |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
605 if (isStart && item->type == ITEM_UINT && ctx.ch == '-') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
606 { |
129 | 607 // Error! Negative values not allowed for unsigned ints |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
608 ret = th_io_error(fh, THERR_INVALID_DATA, |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
609 "Negative value specified for %s, unsigned value expected.", |
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
610 item->name); |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
611 goto out; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
612 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
613 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
614 if (isStart && (ctx.ch == '-' || ctx.ch == '+')) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
615 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
616 VADDCH(ctx.ch) |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
617 else |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
618 ret = THERR_INVALID_DATA; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
619 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
620 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
621 if (isStart && item->type == ITEM_FLOAT && ctx.ch == '.') |
172
eb2c073d93b3
Adding floating point configuration item support.
Matti Hamalainen <ccr@tnsp.org>
parents:
170
diff
changeset
|
622 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
623 fpSet = TRUE; |
172
eb2c073d93b3
Adding floating point configuration item support.
Matti Hamalainen <ccr@tnsp.org>
parents:
170
diff
changeset
|
624 VADDCH('0') |
eb2c073d93b3
Adding floating point configuration item support.
Matti Hamalainen <ccr@tnsp.org>
parents:
170
diff
changeset
|
625 else |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
626 ret = THERR_INVALID_DATA; |
172
eb2c073d93b3
Adding floating point configuration item support.
Matti Hamalainen <ccr@tnsp.org>
parents:
170
diff
changeset
|
627 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
628 VADDCH(ctx.ch) |
172
eb2c073d93b3
Adding floating point configuration item support.
Matti Hamalainen <ccr@tnsp.org>
parents:
170
diff
changeset
|
629 else |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
630 ret = THERR_INVALID_DATA; |
172
eb2c073d93b3
Adding floating point configuration item support.
Matti Hamalainen <ccr@tnsp.org>
parents:
170
diff
changeset
|
631 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
632 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
633 if (item->type == ITEM_FLOAT && ctx.ch == '.' && !fpSet) |
172
eb2c073d93b3
Adding floating point configuration item support.
Matti Hamalainen <ccr@tnsp.org>
parents:
170
diff
changeset
|
634 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
635 fpSet = TRUE; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
636 VADDCH(ctx.ch) |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
637 else |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
638 ret = THERR_INVALID_DATA; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
639 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
640 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
641 if (th_isdigit(ctx.ch)) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
642 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
643 VADDCH(ctx.ch) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
644 else |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
645 ret = THERR_INVALID_DATA; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
646 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
647 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
648 if (th_cfg_is_end(ctx.ch)) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
649 { |
129 | 650 // End of integer parsing mode |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
651 tmpStr[strPos] = 0; |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
652 |
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
653 if ((ret = th_cfg_set_item(&ctx, item, tmpStr)) != THERR_OK) |
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
654 goto out; |
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
655 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
656 th_cfg_set_parsemode(&ctx, PM_IDLE); |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
657 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
658 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
659 { |
129 | 660 // Error! Unexpected character. |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
661 ret = th_io_error(fh, THERR_INVALID_DATA, |
170 | 662 "Unexpected character '%c' for numeric setting '%s'.", |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
663 ctx.ch, item->name); |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
664 goto out; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
665 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
666 |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
667 if (ret != THERR_OK) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
668 { |
129 | 669 // Error! String too long! |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
670 ret = th_io_error(fh, ret, |
70
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
671 "String too long! Maximum is %d characters.", |
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
672 SET_MAX_BUF); |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
673 goto out; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
674 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
675 |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
676 isStart = FALSE; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
677 ctx.ch = -1; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
678 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
679 |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
680 case PM_BOOL: |
129 | 681 // Boolean parsing mode |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
682 if (isStart) |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
683 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
684 isStart = FALSE; |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
685 strPos = 0; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
686 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
687 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
688 if (th_isalnum(ctx.ch)) |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
689 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
690 VADDCH(ctx.ch) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
691 else |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
692 ret = THERR_INVALID_DATA; |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
693 } |
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
694 else |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
695 if (th_cfg_is_end(ctx.ch)) |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
696 { |
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
697 tmpStr[strPos] = 0; |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
698 ret = th_cfg_set_item(&ctx, item, tmpStr); |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
699 } |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
700 |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
701 if (ret != THERR_OK) |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
702 { |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
703 ret = th_io_error(fh, ret, |
561
7dce38c022d7
Be consistent about not using \n at end of th_io_error() messages.
Matti Hamalainen <ccr@tnsp.org>
parents:
555
diff
changeset
|
704 "Invalid boolean value for '%s'.", |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
705 item->name); |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
706 goto out; |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
707 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
708 ctx.ch = -1; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
709 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
710 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
711 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
712 |
110
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
713 out: |
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
714 th_free(tmpStr); |
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
715 |
129 | 716 // Return result |
555
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
717 if (ret == THERR_OK && ctx.parseMode == PM_ERROR) |
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
718 ret = THERR_INVALID_DATA; |
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
719 |
36423638841a
Clean up the parser a bit. Also return valid error value when an error
Matti Hamalainen <ccr@tnsp.org>
parents:
553
diff
changeset
|
720 return ret; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
721 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
722 |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
723 |
499 | 724 int th_cfg_read(th_ioctx *fh, th_cfgitem_t *cfg) |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
725 { |
499 | 726 if (fh == NULL || cfg == NULL) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
727 return THERR_NULLPTR; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
728 |
499 | 729 return th_cfg_read_sect(fh, cfg, 0); |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
730 } |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
731 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
732 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
733 /* Write a configuration into file |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
734 */ |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
735 static BOOL th_print_indent_a(th_ioctx *fh, const int nesting, const char *fmt, va_list ap) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
736 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
737 for (int i = 0; i < nesting * 4; i++) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
738 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
739 if (thfputc(' ', fh) == EOF) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
740 return FALSE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
741 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
742 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
743 return thvfprintf(fh, fmt, ap) >= 0; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
744 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
745 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
746 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
747 static BOOL th_print_indent(th_ioctx *fh, const int nesting, const char *fmt, ...) |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
748 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
749 BOOL ret; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
750 va_list ap; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
751 va_start(ap, fmt); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
752 ret = th_print_indent_a(fh, nesting, fmt, ap); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
753 va_end(ap); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
754 return ret; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
755 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
756 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
757 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
758 static BOOL th_cfg_is_item_valid(const th_cfgitem_t *item) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
759 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
760 switch (item->type) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
761 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
762 case ITEM_STRING: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
763 return (*(item->v.val_str) != NULL); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
764 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
765 case ITEM_STRING_LIST: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
766 return (*(item->v.list) != NULL); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
767 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
768 case ITEM_SECTION: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
769 return TRUE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
770 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
771 case ITEM_INT: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
772 case ITEM_UINT: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
773 case ITEM_FLOAT: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
774 case ITEM_BOOL: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
775 case ITEM_HEX_TRIPLET: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
776 return TRUE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
777 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
778 default: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
779 return FALSE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
780 } |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
781 } |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
782 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
783 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
784 static BOOL th_cfg_write_string_escaped(th_ioctx *fh, const char *str, const char delim) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
785 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
786 for (const char *ptr = str; *ptr; ptr++) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
787 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
788 if (*ptr == delim) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
789 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
790 if (thfputc('\\', fh) == EOF || |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
791 thfputc(*ptr, fh) == EOF) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
792 return FALSE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
793 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
794 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
795 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
796 if (thfputc(*ptr, fh) == EOF) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
797 return FALSE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
798 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
799 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
800 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
801 return TRUE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
802 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
803 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
804 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
805 static int th_cfg_write_item(th_ioctx *fh, const th_cfgitem_t *item) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
806 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
807 switch (item->type) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
808 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
809 case ITEM_STRING: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
810 if (thfputc('"', fh) != EOF && |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
811 th_cfg_write_string_escaped(fh, *(item->v.val_str), '"') && |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
812 thfputc('"', fh) != EOF) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
813 return 1; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
814 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
815 return -1; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
816 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
817 case ITEM_INT: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
818 return thfprintf(fh, "%d", *(item->v.val_int)); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
819 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
820 case ITEM_UINT: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
821 return thfprintf(fh, "%u", *(item->v.val_uint)); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
822 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
823 case ITEM_FLOAT: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
824 return thfprintf(fh, "%1.5f", *(item->v.val_float)); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
825 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
826 case ITEM_BOOL: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
827 return thfprintf(fh, "%s", *(item->v.val_bool) ? "yes" : "no"); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
828 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
829 case ITEM_HEX_TRIPLET: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
830 return thfprintf(fh, "\"%06x\"", *(item->v.val_int)); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
831 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
832 default: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
833 return -1; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
834 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
835 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
836 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
837 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
838 static int th_cfg_write_sect(th_ioctx *fh, const th_cfgitem_t *item, const int nesting) |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
839 { |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
840 while (item != NULL) |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
841 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
842 if (item->name == NULL) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
843 return THERR_NULLPTR; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
844 |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
845 if (item->type == ITEM_COMMENT) |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
846 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
847 BOOL lineStart = TRUE, lineFeed = FALSE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
848 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
849 for (const char *ptr = item->name; *ptr; ptr++) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
850 switch (*ptr) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
851 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
852 case '\r': |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
853 case '\n': |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
854 lineStart = lineFeed = TRUE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
855 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
856 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
857 default: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
858 if (lineFeed) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
859 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
860 thfprintf(fh, "\n"); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
861 lineFeed = FALSE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
862 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
863 if (lineStart) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
864 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
865 if (!th_print_indent(fh, nesting, "# ")) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
866 return THERR_FWRITE; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
867 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
868 lineStart = FALSE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
869 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
870 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
871 if (thfputc(*ptr, fh) == EOF) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
872 return THERR_FWRITE; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
873 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
874 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
875 if (!lineFeed) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
876 thfprintf(fh, "\n"); |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
877 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
878 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
879 if (item->type == ITEM_SECTION) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
880 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
881 int res; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
882 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
883 if (!th_print_indent(fh, nesting, "%s = {\n", item->name)) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
884 return THERR_FWRITE; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
885 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
886 if ((res = th_cfg_write_sect(fh, item->v.section, nesting + 1)) != 0) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
887 return res; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
888 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
889 if (!th_print_indent(fh, nesting, "}\n\n")) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
890 return THERR_FWRITE; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
891 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
892 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
893 if (item->type == ITEM_STRING_LIST) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
894 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
895 if (!th_cfg_is_item_valid(item)) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
896 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
897 if (!th_print_indent(fh, nesting, "#%s = \"\", \"\"", item->name)) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
898 return THERR_FWRITE; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
899 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
900 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
901 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
902 th_llist_t *node = *(item->v.list); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
903 size_t n = th_llist_length(node); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
904 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
905 if (!th_print_indent(fh, nesting, "%s = \n", item->name)) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
906 return THERR_FWRITE; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
907 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
908 for (; node != NULL; node = node->next) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
909 if (node->data != NULL) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
910 { |
521
77495c646208
Fix parsing and writing of strings with simple escape sequences in config files.
Matti Hamalainen <ccr@tnsp.org>
parents:
520
diff
changeset
|
911 if (!th_print_indent(fh, nesting, "\"") || |
77495c646208
Fix parsing and writing of strings with simple escape sequences in config files.
Matti Hamalainen <ccr@tnsp.org>
parents:
520
diff
changeset
|
912 !th_cfg_write_string_escaped(fh, (char *) node->data, '"') || |
77495c646208
Fix parsing and writing of strings with simple escape sequences in config files.
Matti Hamalainen <ccr@tnsp.org>
parents:
520
diff
changeset
|
913 thfprintf(fh, "\"%s\n", (--n > 0) ? "," : "") < 0) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
914 return THERR_FWRITE; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
915 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
916 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
917 if (!th_print_indent(fh, nesting, "\n")) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
918 return THERR_FWRITE; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
919 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
920 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
921 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
922 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
923 if (!th_print_indent(fh, nesting, "%s%s = ", |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
924 th_cfg_is_item_valid(item) ? "" : "#", |
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
925 item->name) || |
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
926 th_cfg_write_item(fh, item) < 0 || |
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
927 thfprintf(fh, "\n") < 0) |
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
928 return THERR_FWRITE; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
929 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
930 |
155
23a79bd6c9d6
Use th_llist for th_config module as well instead of duped linked list
Matti Hamalainen <ccr@tnsp.org>
parents:
152
diff
changeset
|
931 item = (th_cfgitem_t *) item->node.next; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
932 } |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
933 |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
934 return THERR_OK; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
935 } |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
936 |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
937 |
499 | 938 int th_cfg_write(th_ioctx *fh, const th_cfgitem_t *cfg) |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
939 { |
499 | 940 if (fh == NULL || cfg == NULL) |
514
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
941 return THERR_NULLPTR; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
942 |
499 | 943 thfprintf(fh, "# Configuration written by %s %s\n\n", |
62 | 944 th_prog_desc, th_prog_version); |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
945 |
499 | 946 return th_cfg_write_sect(fh, cfg, 0); |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
947 } |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
948 |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
949 |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
950 /* Find a configuration item based on section and/or name (and/or) type. |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
951 * The first matching item will be returned. |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
952 */ |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
953 static th_cfgitem_t *th_cfg_find_do(th_cfgitem_t *item, const char *name, const int type) |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
954 { |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
955 while (item != NULL) |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
956 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
957 BOOL match = TRUE; |
441
2991e6b52d95
Get rid of trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
205
diff
changeset
|
958 |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
959 // Has type check been set, and does it match? |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
960 if (type != -1 && item->type != type) |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
961 match = FALSE; |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
962 |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
963 // Check item name |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
964 if (name != NULL && item->name != NULL && |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
965 strcmp(name, item->name) != 0) |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
966 match = FALSE; |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
967 |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
968 // Recurse to section |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
969 if (!match && item->type == ITEM_SECTION) |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
970 { |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
971 th_cfgitem_t *tmp = th_cfg_find_do(item->v.section, name, type); |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
972 if (tmp != NULL) |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
973 return tmp; |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
974 } |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
975 |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
976 // Do we have a match? |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
977 if (match) |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
978 return item; |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
979 |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
980 item = (th_cfgitem_t *) item->node.next; |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
981 } |
441
2991e6b52d95
Get rid of trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
205
diff
changeset
|
982 |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
983 return NULL; |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
984 } |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
985 |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
986 |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
987 th_cfgitem_t *th_cfg_find(th_cfgitem_t *cfg, const char *section, const char *name, const int type) |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
988 { |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
989 th_cfgitem_t *node; |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
990 |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
991 if (section != NULL) |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
992 node = th_cfg_find_do(cfg, section, ITEM_SECTION); |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
993 else |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
994 node = cfg; |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
995 |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
996 return th_cfg_find_do(node, name, type); |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
997 } |