Mercurial > hg > th-libs
annotate th_config.c @ 521:77495c646208
Fix parsing and writing of strings with simple escape sequences in config files.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 26 Dec 2019 13:34:19 +0200 |
parents | 8b36f2566cf9 |
children | 3a852e9f70a6 |
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 |
511 | 4 * (C) Copyright 2004-2019 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 */ |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
176 enum |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
177 { |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
178 PM_EOF, |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
179 PM_ERROR, |
159 | 180 PM_IDLE, |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
181 PM_COMMENT, |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
182 PM_NEXT, |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
183 PM_KEYNAME, |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
184 PM_KEYSET, |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
185 PM_STRING, |
170 | 186 PM_NUMERIC, |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
187 PM_BOOL, |
16 | 188 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
|
189 PM_LIST, |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
190 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
191 PM_LAST |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
192 }; |
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 typedef struct |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
196 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
197 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
|
198 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
|
199 } 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
|
200 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
201 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
202 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
|
203 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
204 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
|
205 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
|
206 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
207 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
208 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
209 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
|
210 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
211 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
|
212 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
|
213 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
214 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
215 |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
216 #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
|
217 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
218 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
219 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
|
220 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
221 return |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
222 ch == '\r' || |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
223 ch == '\n' || |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
224 ch == ';' || |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
225 ch == '#' || |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
226 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
|
227 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
228 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
229 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
230 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
|
231 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
232 switch (type) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
233 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
234 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
|
235 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
|
236 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
|
237 |
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_INT: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
239 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
|
240 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
|
241 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
|
242 |
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_BOOL: |
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_BOOL; |
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_SECTION: |
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_SECTION; |
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_STRING_LIST: |
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_LIST; |
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 default: |
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_ERROR; |
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 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
256 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
257 |
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
|
258 static void 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
|
259 { |
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
|
260 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
|
261 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
262 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
|
263 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
264 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
|
265 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
|
266 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
267 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
268 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
|
269 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
|
270 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
271 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
272 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
|
273 { |
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
|
274 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
|
275 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
|
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 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
|
278 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
|
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 // Early exit as we set the parsemode here |
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
281 return; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
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 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
|
284 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
|
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 break; |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
287 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
288 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
|
289 *(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
|
290 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
291 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
292 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
|
293 *(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
|
294 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
295 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
296 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
|
297 *(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
|
298 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
299 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
300 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
|
301 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
|
302 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
303 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
304 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
|
305 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
|
306 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
307 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
308 |
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
|
309 th_cfg_set_parsemode(ctx, res ? PM_IDLE : PM_ERROR); |
509
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 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
312 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
313 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
|
314 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
315 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
|
316 th_cfgitem_t *item = NULL; |
110
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
317 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
|
318 size_t strPos; |
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
|
319 BOOL isEscaped, isStart, isError, fpSet; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
320 |
129 | 321 // 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
|
322 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
|
323 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
|
324 ctx.nextMode = ctx.prevMode = ctx.parseMode = PM_IDLE; |
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
325 isEscaped = fpSet = isStart = isError = FALSE; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
326 strPos = 0; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
327 |
110
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
328 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
|
329 goto out; |
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
330 |
129 | 331 // 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
|
332 while (ctx.parseMode != PM_EOF && ctx.parseMode != PM_ERROR) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
333 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
334 if (ctx.ch == -1) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
335 { |
129 | 336 // 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
|
337 switch (ctx.ch = thfgetc(fh)) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
338 { |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
339 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
|
340 if (ctx.parseMode != PM_IDLE) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
341 { |
499 | 342 th_io_error(fh, THERR_OUT_OF_DATA, "Unexpected end of file.\n"); |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
343 ctx.parseMode = PM_ERROR; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
344 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
345 else |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
346 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
|
347 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
348 |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
349 case '\n': |
499 | 350 fh->line++; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
351 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
352 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
353 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
354 switch (ctx.parseMode) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
355 { |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
356 case PM_COMMENT: |
129 | 357 // 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
|
358 if (ctx.ch == '\n') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
359 { |
129 | 360 // 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
|
361 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
|
362 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
363 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
|
364 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
365 |
159 | 366 case PM_IDLE: |
129 | 367 // 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
|
368 if (ctx.ch == '#') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
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 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
|
371 ctx.ch = -1; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
372 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
373 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
374 if (th_cfg_is_end(ctx.ch)) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
375 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
376 ctx.ch = -1; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
377 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
378 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
379 if (ctx.ch == '}') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
380 { |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
381 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
|
382 { |
129 | 383 // Check for validation errors |
110
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
384 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
|
385 } |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
386 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
387 { |
499 | 388 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
|
389 "Invalid nesting sequence encountered.\n"); |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
390 ctx.parseMode = PM_ERROR; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
391 } |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
392 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
393 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
394 if (th_isalpha(ctx.ch)) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
395 { |
129 | 396 // 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
|
397 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
|
398 strPos = 0; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
399 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
400 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
401 { |
129 | 402 // Error! Invalid character found |
499 | 403 th_io_error(fh, 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
|
404 "Unexpected character '%c'.\n", ctx.ch); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
405 ctx.parseMode = PM_ERROR; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
406 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
407 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
408 |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
409 case PM_KEYNAME: |
129 | 410 // 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
|
411 if (ctx.ch == '#') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
412 { |
129 | 413 // 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
|
414 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
|
415 ctx.ch = -1; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
416 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
417 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
418 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
|
419 { |
129 | 420 // 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
|
421 th_cfg_set_next_parsemode(&ctx, PM_KEYSET); |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
422 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
423 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
424 if (th_isalnum(ctx.ch) || ctx.ch == '_' || ctx.ch == '-') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
425 { |
129 | 426 // 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
|
427 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
|
428 else |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
429 { |
129 | 430 // Error! Key name string too long! |
499 | 431 th_io_error(fh, THERR_INVALID_DATA, "Config key name too long!"); |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
432 ctx.parseMode = PM_ERROR; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
433 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
434 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
|
435 tmpStr[strPos] = 0; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
436 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
437 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
438 { |
129 | 439 // 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
|
440 tmpStr[strPos] = 0; |
499 | 441 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
|
442 "Unexpected character '%c' in key name '%s'.\n", |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
443 ctx.ch, tmpStr); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
444 ctx.parseMode = PM_ERROR; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
445 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
446 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
447 |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
448 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
|
449 if (ctx.ch == '=') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
450 { |
129 | 451 // 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
|
452 BOOL found; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
453 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
|
454 |
520
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
455 for (item = sect, found = FALSE; item != NULL && !found; ) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
456 { |
520
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
457 if (item->type != ITEM_COMMENT && |
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
458 item->name != NULL && |
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
459 strcmp(item->name, tmpStr) == 0) |
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
460 found = TRUE; |
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
461 else |
8b36f2566cf9
Fix item key search .. managed to break that previously.
Matti Hamalainen <ccr@tnsp.org>
parents:
518
diff
changeset
|
462 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
|
463 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
464 |
129 | 465 // 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
|
466 if (found) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
467 { |
129 | 468 // 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
|
469 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
|
470 isStart = TRUE; |
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
471 fpSet = FALSE; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
472 strPos = 0; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
473 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
474 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
475 { |
129 | 476 // Error! No configuration key by this name found |
499 | 477 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
|
478 "No such configuration setting ('%s')\n", |
a0e1b29be35d
Refactor configuration file handling module rather thoroughly. The API is
Matti Hamalainen <ccr@tnsp.org>
parents:
66
diff
changeset
|
479 tmpStr); |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
480 ctx.parseMode = PM_ERROR; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
481 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
482 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
483 ctx.ch = -1; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
484 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
485 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
486 { |
129 | 487 // Error! '=' expected! |
499 | 488 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
|
489 "Unexpected character '%c', assignation '=' was expected.\n", |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
490 ctx.ch); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
491 ctx.parseMode = PM_ERROR; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
492 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
493 break; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
494 |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
495 case PM_NEXT: |
129 | 496 // 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
|
497 if (ctx.ch == '#') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
498 { |
129 | 499 // 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
|
500 th_cfg_set_parsemode(&ctx, PM_COMMENT); |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
501 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
502 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
503 if (th_isspace(ctx.ch) || th_iscrlf(ctx.ch)) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
504 { |
129 | 505 // 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
|
506 ctx.ch = -1; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
507 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
508 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
509 { |
129 | 510 // 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
|
511 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
|
512 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
513 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
514 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
515 case PM_LIST: |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
516 if (isStart) |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
517 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
518 th_cfg_set_parsemode(&ctx, PM_STRING); |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
519 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
520 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
521 if (ctx.ch == ',') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
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 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
|
524 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
|
525 isStart = TRUE; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
526 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
527 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
528 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
529 th_cfg_set_parsemode(&ctx, PM_IDLE); |
16 | 530 } |
531 break; | |
532 | |
533 case PM_SECTION: | |
129 | 534 // 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
|
535 if (ctx.ch != '{') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
536 { |
129 | 537 // Error! Section start '{' expected! |
499 | 538 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
|
539 "Unexpected character '%c', section start '{' was expected.\n", |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
540 ctx.ch); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
541 ctx.parseMode = PM_ERROR; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
542 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
543 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
544 { |
499 | 545 int res = th_cfg_read_sect(fh, item->v.section, nesting + 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
|
546 if (res == THERR_OK) |
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
547 th_cfg_set_parsemode(&ctx, PM_IDLE); |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
548 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
549 ctx.parseMode = PM_ERROR; |
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
|
550 |
db3fc3d4969e
Return proper THERR_* error codes from th_config functions, at least for some parts.
Matti Hamalainen <ccr@tnsp.org>
parents:
511
diff
changeset
|
551 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
|
552 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
553 break; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
554 |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
555 case PM_STRING: |
129 | 556 // String parsing mode |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
557 if (isStart) |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
558 { |
129 | 559 // 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
|
560 ctx.strDelim = ctx.ch; |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
561 isStart = FALSE; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
562 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
|
563 isEscaped = FALSE; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
564 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
565 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
566 if (!isEscaped && ctx.ch == ctx.strDelim) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
567 { |
129 | 568 // 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
|
569 tmpStr[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
|
570 th_cfg_set_item(&ctx, item, tmpStr); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
571 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
572 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
573 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
|
574 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
575 // Escape sequence |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
576 isEscaped = TRUE; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
577 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
578 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
579 { |
129 | 580 // 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
|
581 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
|
582 else |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
583 { |
129 | 584 // Error! String too long! |
499 | 585 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
|
586 "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
|
587 SET_MAX_BUF); |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
588 ctx.parseMode = PM_ERROR; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
589 } |
521
77495c646208
Fix parsing and writing of strings with simple escape sequences in config files.
Matti Hamalainen <ccr@tnsp.org>
parents:
520
diff
changeset
|
590 isEscaped = FALSE; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
591 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
592 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
593 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
|
594 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
595 |
170 | 596 case PM_NUMERIC: |
129 | 597 // 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
|
598 if (isStart && item->type == ITEM_UINT && ctx.ch == '-') |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
599 { |
129 | 600 // Error! Negative values not allowed for unsigned ints |
499 | 601 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
|
602 "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
|
603 item->name); |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
604 ctx.parseMode = PM_ERROR; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
605 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
606 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
607 if (isStart && (ctx.ch == '-' || ctx.ch == '+')) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
608 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
609 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
|
610 else |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
611 isError = TRUE; |
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 && item->type == ITEM_FLOAT && ctx.ch == '.') |
172
eb2c073d93b3
Adding floating point configuration item support.
Matti Hamalainen <ccr@tnsp.org>
parents:
170
diff
changeset
|
615 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
616 fpSet = TRUE; |
172
eb2c073d93b3
Adding floating point configuration item support.
Matti Hamalainen <ccr@tnsp.org>
parents:
170
diff
changeset
|
617 VADDCH('0') |
eb2c073d93b3
Adding floating point configuration item support.
Matti Hamalainen <ccr@tnsp.org>
parents:
170
diff
changeset
|
618 else |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
619 isError = TRUE; |
172
eb2c073d93b3
Adding floating point configuration item support.
Matti Hamalainen <ccr@tnsp.org>
parents:
170
diff
changeset
|
620 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
621 VADDCH(ctx.ch) |
172
eb2c073d93b3
Adding floating point configuration item support.
Matti Hamalainen <ccr@tnsp.org>
parents:
170
diff
changeset
|
622 else |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
623 isError = TRUE; |
172
eb2c073d93b3
Adding floating point configuration item support.
Matti Hamalainen <ccr@tnsp.org>
parents:
170
diff
changeset
|
624 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
625 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
626 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
|
627 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
628 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
|
629 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
|
630 else |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
631 isError = TRUE; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
632 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
633 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
634 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
|
635 { |
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) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
637 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
638 isError = TRUE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
639 } |
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_cfg_is_end(ctx.ch)) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
642 { |
129 | 643 // 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
|
644 tmpStr[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
|
645 th_cfg_set_item(&ctx, item, tmpStr); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
646 th_cfg_set_parsemode(&ctx, PM_IDLE); |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
647 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
648 else |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
649 { |
129 | 650 // Error! Unexpected character. |
499 | 651 th_io_error(fh, THERR_INVALID_DATA, |
170 | 652 "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
|
653 ctx.ch, item->name); |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
654 ctx.parseMode = PM_ERROR; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
655 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
656 |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
657 if (isError) |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
658 { |
129 | 659 // Error! String too long! |
499 | 660 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
|
661 "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
|
662 SET_MAX_BUF); |
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.parseMode = PM_ERROR; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
664 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
665 |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
666 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
|
667 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
|
668 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
669 |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
670 case PM_BOOL: |
129 | 671 // Boolean parsing mode |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
672 if (isStart) |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
673 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
674 isStart = FALSE; |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
675 strPos = 0; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
676 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
677 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
678 if (th_isalnum(ctx.ch)) |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
679 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
680 VADDCH(ctx.ch) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
681 else |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
682 isError = TRUE; |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
683 } |
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
684 else |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
685 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
|
686 { |
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
687 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
|
688 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
|
689 } |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
690 |
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
|
691 if (isError || ctx.parseMode == PM_ERROR) |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
692 { |
499 | 693 th_io_error(fh, THERR_INVALID_DATA, |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
694 "Invalid boolean value for '%s'.\n", |
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
695 item->name); |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
696 ctx.parseMode = PM_ERROR; |
168
a2cd862315c5
Use th_get_boolean() in configuration parser.
Matti Hamalainen <ccr@tnsp.org>
parents:
160
diff
changeset
|
697 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
698 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
|
699 break; |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
700 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
701 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
702 |
110
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
703 out: |
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
704 th_free(tmpStr); |
d739df7efba7
Use dynamic allocation for one buffer.
Matti Hamalainen <ccr@tnsp.org>
parents:
83
diff
changeset
|
705 |
129 | 706 // Return result |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
707 if (ctx.parseMode == PM_ERROR) |
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
|
708 return fh->status; |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
709 else |
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
|
710 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
|
711 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
712 |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
713 |
499 | 714 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
|
715 { |
499 | 716 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
|
717 return THERR_NULLPTR; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
718 |
499 | 719 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
|
720 } |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
721 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
722 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
723 /* Write a configuration into file |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
724 */ |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
725 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
|
726 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
727 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
|
728 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
729 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
|
730 return FALSE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
731 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
732 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
733 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
|
734 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
735 |
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 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
|
738 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
739 BOOL ret; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
740 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
|
741 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
|
742 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
|
743 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
|
744 return ret; |
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 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
748 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
|
749 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
750 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
|
751 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
752 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
|
753 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
|
754 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
755 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
|
756 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
|
757 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
758 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
|
759 return TRUE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
760 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
761 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
|
762 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
|
763 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
|
764 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
|
765 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
|
766 return TRUE; |
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 default: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
769 return FALSE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
770 } |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
771 } |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
772 |
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
773 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
774 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
|
775 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
776 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
|
777 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
778 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
|
779 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
780 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
|
781 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
|
782 return FALSE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
783 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
784 else |
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 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
|
787 return FALSE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
788 } |
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 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
791 return TRUE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
792 } |
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 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
795 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
|
796 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
797 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
|
798 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
799 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
|
800 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
|
801 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
|
802 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
|
803 return 1; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
804 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
805 return -1; |
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 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
|
808 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
|
809 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
810 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
|
811 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
|
812 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
813 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
|
814 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
|
815 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
816 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
|
817 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
|
818 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
819 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
|
820 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
|
821 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
822 default: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
823 return -1; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
824 } |
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 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
827 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
828 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
|
829 { |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
830 while (item != NULL) |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
831 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
832 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
|
833 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
|
834 |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
835 if (item->type == ITEM_COMMENT) |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
836 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
837 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
|
838 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
839 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
|
840 switch (*ptr) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
841 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
842 case '\r': |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
843 case '\n': |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
844 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
|
845 break; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
846 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
847 default: |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
848 if (lineFeed) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
849 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
850 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
|
851 lineFeed = FALSE; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
852 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
853 if (lineStart) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
854 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
855 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
|
856 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
|
857 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
858 lineStart = FALSE; |
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 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
861 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
|
862 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
|
863 } |
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 (!lineFeed) |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
866 thfprintf(fh, "\n"); |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
867 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
868 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
869 if (item->type == ITEM_SECTION) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
870 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
871 int res; |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
872 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
873 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
|
874 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
|
875 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
876 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
|
877 return res; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
878 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
879 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
|
880 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
|
881 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
882 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
883 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
|
884 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
885 if (!th_cfg_is_item_valid(item)) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
886 { |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
887 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
|
888 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
|
889 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
890 else |
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 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
|
893 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
|
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_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
|
896 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
|
897 |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
898 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
|
899 if (node->data != NULL) |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
900 { |
521
77495c646208
Fix parsing and writing of strings with simple escape sequences in config files.
Matti Hamalainen <ccr@tnsp.org>
parents:
520
diff
changeset
|
901 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
|
902 !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
|
903 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
|
904 return THERR_FWRITE; |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
905 } |
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
906 |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
907 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
|
908 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
|
909 } |
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
910 } |
509
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
911 else |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
912 { |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
913 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
|
914 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
|
915 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
|
916 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
|
917 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
|
918 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
|
919 } |
b506bff0a7ab
Some cleanup work and refactoring on the configuration file parser and writer.
Matti Hamalainen <ccr@tnsp.org>
parents:
504
diff
changeset
|
920 |
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
|
921 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
|
922 } |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
923 |
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 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
|
925 } |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
926 |
13
adcbcac66125
Import improved config code from chat client fork of th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents:
7
diff
changeset
|
927 |
499 | 928 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
|
929 { |
499 | 930 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
|
931 return THERR_NULLPTR; |
0
bd61a80a6c54
Initial import into Mercurial repository. Discarding old cvs/svn history
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
932 |
499 | 933 thfprintf(fh, "# Configuration written by %s %s\n\n", |
62 | 934 th_prog_desc, th_prog_version); |
42
7851f704d499
Reindent and cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
34
diff
changeset
|
935 |
499 | 936 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
|
937 } |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
938 |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
939 |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
940 /* 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
|
941 * The first matching item will be returned. |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
942 */ |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
943 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
|
944 { |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
945 while (item != NULL) |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
946 { |
457
85fa3d333556
Actually, revert the boolean changes .. meh.
Matti Hamalainen <ccr@tnsp.org>
parents:
453
diff
changeset
|
947 BOOL match = TRUE; |
441
2991e6b52d95
Get rid of trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
205
diff
changeset
|
948 |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
949 // 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
|
950 if (type != -1 && item->type != type) |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
951 match = FALSE; |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
952 |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
953 // Check item name |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
954 if (name != NULL && item->name != NULL && |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
955 strcmp(name, item->name) != 0) |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
956 match = FALSE; |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
957 |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
958 // Recurse to section |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
959 if (!match && item->type == ITEM_SECTION) |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
960 { |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
961 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
|
962 if (tmp != NULL) |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
963 return tmp; |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
964 } |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
965 |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
966 // Do we have a match? |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
967 if (match) |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
968 return item; |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
969 |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
970 item = (th_cfgitem_t *) item->node.next; |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
971 } |
441
2991e6b52d95
Get rid of trailing whitespace.
Matti Hamalainen <ccr@tnsp.org>
parents:
205
diff
changeset
|
972 |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
973 return NULL; |
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 |
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
977 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
|
978 { |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
979 th_cfgitem_t *node; |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
980 |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
981 if (section != NULL) |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
982 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
|
983 else |
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
984 node = cfg; |
83
50006067bcd1
Add new function, th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
70
diff
changeset
|
985 |
504
3a0864eb358f
Fix the functionality of th_cfg_find().
Matti Hamalainen <ccr@tnsp.org>
parents:
499
diff
changeset
|
986 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
|
987 } |