1 /* ----------------------------------------------------------------------------
2 libconfig - A library for processing structured configuration files
3 Copyright (C) 2005-2010 Mark A Lindner
5 This file is part of libconfig.
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public License
9 as published by the Free Software Foundation; either version 2.1 of
10 the License, or (at your option) any later version.
12 This library is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
17 You should have received a copy of the GNU Library General Public
18 License along with this library; if not, see
19 <http://www.gnu.org/licenses/>.
20 ----------------------------------------------------------------------------
28 #endif /* __cplusplus */
30 #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
31 #if defined(LIBCONFIG_STATIC)
33 #elif defined(LIBCONFIG_EXPORTS)
34 #define LIBCONFIG_API __declspec(dllexport)
35 #else /* ! LIBCONFIG_EXPORTS */
36 #define LIBCONFIG_API __declspec(dllimport)
37 #endif /* LIBCONFIG_STATIC */
42 #define LIBCONFIG_VER_MAJOR 1
43 #define LIBCONFIG_VER_MINOR 4
44 #define LIBCONFIG_VER_REVISION 9
48 #define CONFIG_TYPE_NONE 0
49 #define CONFIG_TYPE_GROUP 1
50 #define CONFIG_TYPE_INT 2
51 #define CONFIG_TYPE_INT64 3
52 #define CONFIG_TYPE_FLOAT 4
53 #define CONFIG_TYPE_STRING 5
54 #define CONFIG_TYPE_BOOL 6
55 #define CONFIG_TYPE_ARRAY 7
56 #define CONFIG_TYPE_LIST 8
58 #define CONFIG_FORMAT_DEFAULT 0
59 #define CONFIG_FORMAT_HEX 1
61 #define CONFIG_OPTION_AUTOCONVERT 0x01
63 #define CONFIG_TRUE (1)
64 #define CONFIG_FALSE (0)
66 typedef union config_value_t
72 struct config_list_t *list;
75 typedef struct config_setting_t
81 struct config_setting_t *parent;
82 struct config_t *config;
91 CONFIG_ERR_FILE_IO = 1,
95 typedef struct config_list_t
98 config_setting_t **elements;
101 typedef struct config_t
103 config_setting_t *root;
104 void (*destructor)(void *);
105 unsigned short flags;
106 unsigned short tab_width;
107 short default_format;
108 const char *include_dir;
109 const char *error_text;
110 const char *error_file;
112 config_error_t error_type;
113 const char **filenames;
114 unsigned int num_filenames;
117 extern LIBCONFIG_API int config_read(config_t *config, FILE *stream);
118 extern LIBCONFIG_API void config_write(const config_t *config, FILE *stream);
120 extern LIBCONFIG_API void config_set_default_format(config_t *config,
123 extern LIBCONFIG_API void config_set_auto_convert(config_t *config, int flag);
124 extern LIBCONFIG_API int config_get_auto_convert(const config_t *config);
126 extern LIBCONFIG_API int config_read_string(config_t *config, const char *str);
128 extern LIBCONFIG_API int config_read_file(config_t *config,
129 const char *filename);
130 extern LIBCONFIG_API int config_write_file(config_t *config,
131 const char *filename);
133 extern LIBCONFIG_API void config_set_destructor(config_t *config,
134 void (*destructor)(void *));
135 extern LIBCONFIG_API void config_set_include_dir(config_t *config,
136 const char *include_dir);
138 extern LIBCONFIG_API void config_init(config_t *config);
139 extern LIBCONFIG_API void config_destroy(config_t *config);
141 extern LIBCONFIG_API int config_setting_get_int(
142 const config_setting_t *setting);
143 extern LIBCONFIG_API long long config_setting_get_int64(
144 const config_setting_t *setting);
145 extern LIBCONFIG_API double config_setting_get_float(
146 const config_setting_t *setting);
147 extern LIBCONFIG_API int config_setting_get_bool(
148 const config_setting_t *setting);
149 extern LIBCONFIG_API const char *config_setting_get_string(
150 const config_setting_t *setting);
152 extern LIBCONFIG_API int config_setting_lookup_int(
153 const config_setting_t *setting, const char *name, int *value);
154 extern LIBCONFIG_API int config_setting_lookup_int64(
155 const config_setting_t *setting, const char *name, long long *value);
156 extern LIBCONFIG_API int config_setting_lookup_float(
157 const config_setting_t *setting, const char *name, double *value);
158 extern LIBCONFIG_API int config_setting_lookup_bool(
159 const config_setting_t *setting, const char *name, int *value);
160 extern LIBCONFIG_API int config_setting_lookup_string(
161 const config_setting_t *setting, const char *name, const char **value);
163 extern LIBCONFIG_API int config_setting_set_int(config_setting_t *setting,
165 extern LIBCONFIG_API int config_setting_set_int64(config_setting_t *setting,
167 extern LIBCONFIG_API int config_setting_set_float(config_setting_t *setting,
169 extern LIBCONFIG_API int config_setting_set_bool(config_setting_t *setting,
171 extern LIBCONFIG_API int config_setting_set_string(config_setting_t *setting,
174 extern LIBCONFIG_API int config_setting_set_format(config_setting_t *setting,
176 extern LIBCONFIG_API short config_setting_get_format(
177 const config_setting_t *setting);
179 extern LIBCONFIG_API int config_setting_get_int_elem(
180 const config_setting_t *setting, int idx);
181 extern LIBCONFIG_API long long config_setting_get_int64_elem(
182 const config_setting_t *setting, int idx);
183 extern LIBCONFIG_API double config_setting_get_float_elem(
184 const config_setting_t *setting, int idx);
185 extern LIBCONFIG_API int config_setting_get_bool_elem(
186 const config_setting_t *setting, int idx);
187 extern LIBCONFIG_API const char *config_setting_get_string_elem(
188 const config_setting_t *setting, int idx);
190 extern LIBCONFIG_API config_setting_t *config_setting_set_int_elem(
191 config_setting_t *setting, int idx, int value);
192 extern LIBCONFIG_API config_setting_t *config_setting_set_int64_elem(
193 config_setting_t *setting, int idx, long long value);
194 extern LIBCONFIG_API config_setting_t *config_setting_set_float_elem(
195 config_setting_t *setting, int idx, double value);
196 extern LIBCONFIG_API config_setting_t *config_setting_set_bool_elem(
197 config_setting_t *setting, int idx, int value);
198 extern LIBCONFIG_API config_setting_t *config_setting_set_string_elem(
199 config_setting_t *setting, int idx, const char *value);
201 #define /* const char * */ config_get_include_dir(/* const config_t * */ C) \
204 #define /* int */ config_setting_type(/* const config_setting_t * */ S) \
207 #define /* int */ config_setting_is_group(/* const config_setting_t * */ S) \
208 ((S)->type == CONFIG_TYPE_GROUP)
209 #define /* int */ config_setting_is_array(/* const config_setting_t * */ S) \
210 ((S)->type == CONFIG_TYPE_ARRAY)
211 #define /* int */ config_setting_is_list(/* const config_setting_t * */ S) \
212 ((S)->type == CONFIG_TYPE_LIST)
214 #define /* int */ config_setting_is_aggregate( \
215 /* const config_setting_t * */ S) \
216 (((S)->type == CONFIG_TYPE_GROUP) || ((S)->type == CONFIG_TYPE_LIST) \
217 || ((S)->type == CONFIG_TYPE_ARRAY))
219 #define /* int */ config_setting_is_number(/* const config_setting_t * */ S) \
220 (((S)->type == CONFIG_TYPE_INT) \
221 || ((S)->type == CONFIG_TYPE_INT64) \
222 || ((S)->type == CONFIG_TYPE_FLOAT))
224 #define /* int */ config_setting_is_scalar(/* const config_setting_t * */ S) \
225 (((S)->type == CONFIG_TYPE_BOOL) || ((S)->type == CONFIG_TYPE_STRING) \
226 || config_setting_is_number(S))
228 #define /* const char * */ config_setting_name( \
229 /* const config_setting_t * */ S) \
232 #define /* config_setting_t * */ config_setting_parent( \
233 /* const config_setting_t * */ S) \
236 #define /* int */ config_setting_is_root( \
237 /* const config_setting_t * */ S) \
238 ((S)->parent ? CONFIG_FALSE : CONFIG_TRUE)
240 extern LIBCONFIG_API int config_setting_index(const config_setting_t *setting);
242 extern LIBCONFIG_API int config_setting_length(
243 const config_setting_t *setting);
244 extern LIBCONFIG_API config_setting_t *config_setting_get_elem(
245 const config_setting_t *setting, unsigned int idx);
247 extern LIBCONFIG_API config_setting_t *config_setting_get_member(
248 const config_setting_t *setting, const char *name);
250 extern LIBCONFIG_API config_setting_t *config_setting_add(
251 config_setting_t *parent, const char *name, int type);
252 extern LIBCONFIG_API int config_setting_remove(config_setting_t *parent,
254 extern LIBCONFIG_API int config_setting_remove_elem(config_setting_t *parent,
256 extern LIBCONFIG_API void config_setting_set_hook(config_setting_t *setting,
259 #define config_setting_get_hook(S) ((S)->hook)
261 extern LIBCONFIG_API config_setting_t *config_lookup(const config_t *config,
263 extern LIBCONFIG_API config_setting_t *config_lookup_from(
264 config_setting_t *setting, const char *path);
266 extern LIBCONFIG_API int config_lookup_int(const config_t *config,
267 const char *path, int *value);
268 extern LIBCONFIG_API int config_lookup_int64(const config_t *config,
271 extern LIBCONFIG_API int config_lookup_float(const config_t *config,
272 const char *path, double *value);
273 extern LIBCONFIG_API int config_lookup_bool(const config_t *config,
274 const char *path, int *value);
275 extern LIBCONFIG_API int config_lookup_string(const config_t *config,
279 #define /* config_setting_t * */ config_root_setting( \
280 /* const config_t * */ C) \
283 #define /* void */ config_set_default_format(/* config_t * */ C, \
285 (C)->default_format = (F)
287 #define /* short */ config_get_default_format(/* config_t * */ C) \
288 ((C)->default_format)
290 #define /* void */ config_set_tab_width(/* config_t * */ C, \
291 /* unsigned short */ W) \
292 (C)->tab_width = ((W) & 0x0F)
294 #define /* unsigned char */ config_get_tab_width(/* const config_t * */ C) \
297 #define /* unsigned short */ config_setting_source_line( \
298 /* const config_setting_t * */ S) \
301 #define /* const char */ config_setting_source_file( \
302 /* const config_setting_t * */ S) \
305 #define /* const char * */ config_error_text(/* const config_t * */ C) \
308 #define /* const char * */ config_error_file(/* const config_t * */ C) \
311 #define /* int */ config_error_line(/* const config_t * */ C) \
314 #define /* config_error_t */ config_error_type(/* const config_t * */ C) \
319 #endif /* __cplusplus */
321 #endif /* __libconfig_h */