xref: /aosp_15_r20/external/libconfig/lib/libconfig.h (revision 2e9d491483b805f09ea864149eadd5680efcc72a)
1*2e9d4914SAndroid Build Coastguard Worker /* ----------------------------------------------------------------------------
2*2e9d4914SAndroid Build Coastguard Worker    libconfig - A library for processing structured configuration files
3*2e9d4914SAndroid Build Coastguard Worker    Copyright (C) 2005-2018  Mark A Lindner
4*2e9d4914SAndroid Build Coastguard Worker 
5*2e9d4914SAndroid Build Coastguard Worker    This file is part of libconfig.
6*2e9d4914SAndroid Build Coastguard Worker 
7*2e9d4914SAndroid Build Coastguard Worker    This library is free software; you can redistribute it and/or
8*2e9d4914SAndroid Build Coastguard Worker    modify it under the terms of the GNU Lesser General Public License
9*2e9d4914SAndroid Build Coastguard Worker    as published by the Free Software Foundation; either version 2.1 of
10*2e9d4914SAndroid Build Coastguard Worker    the License, or (at your option) any later version.
11*2e9d4914SAndroid Build Coastguard Worker 
12*2e9d4914SAndroid Build Coastguard Worker    This library is distributed in the hope that it will be useful, but
13*2e9d4914SAndroid Build Coastguard Worker    WITHOUT ANY WARRANTY; without even the implied warranty of
14*2e9d4914SAndroid Build Coastguard Worker    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15*2e9d4914SAndroid Build Coastguard Worker    Lesser General Public License for more details.
16*2e9d4914SAndroid Build Coastguard Worker 
17*2e9d4914SAndroid Build Coastguard Worker    You should have received a copy of the GNU Library General Public
18*2e9d4914SAndroid Build Coastguard Worker    License along with this library; if not, see
19*2e9d4914SAndroid Build Coastguard Worker    <http://www.gnu.org/licenses/>.
20*2e9d4914SAndroid Build Coastguard Worker    ----------------------------------------------------------------------------
21*2e9d4914SAndroid Build Coastguard Worker */
22*2e9d4914SAndroid Build Coastguard Worker 
23*2e9d4914SAndroid Build Coastguard Worker #ifndef __libconfig_h
24*2e9d4914SAndroid Build Coastguard Worker #define __libconfig_h
25*2e9d4914SAndroid Build Coastguard Worker 
26*2e9d4914SAndroid Build Coastguard Worker #ifdef __cplusplus
27*2e9d4914SAndroid Build Coastguard Worker extern "C" {
28*2e9d4914SAndroid Build Coastguard Worker #endif /* __cplusplus */
29*2e9d4914SAndroid Build Coastguard Worker 
30*2e9d4914SAndroid Build Coastguard Worker #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
31*2e9d4914SAndroid Build Coastguard Worker #if defined(LIBCONFIG_STATIC)
32*2e9d4914SAndroid Build Coastguard Worker #define LIBCONFIG_API
33*2e9d4914SAndroid Build Coastguard Worker #elif defined(LIBCONFIG_EXPORTS)
34*2e9d4914SAndroid Build Coastguard Worker #define LIBCONFIG_API __declspec(dllexport)
35*2e9d4914SAndroid Build Coastguard Worker #else /* ! LIBCONFIG_EXPORTS */
36*2e9d4914SAndroid Build Coastguard Worker #define LIBCONFIG_API __declspec(dllimport)
37*2e9d4914SAndroid Build Coastguard Worker #endif /* LIBCONFIG_STATIC */
38*2e9d4914SAndroid Build Coastguard Worker #else /* ! WIN32 */
39*2e9d4914SAndroid Build Coastguard Worker #define LIBCONFIG_API
40*2e9d4914SAndroid Build Coastguard Worker #endif /* WIN32 */
41*2e9d4914SAndroid Build Coastguard Worker 
42*2e9d4914SAndroid Build Coastguard Worker #define LIBCONFIG_VER_MAJOR    1
43*2e9d4914SAndroid Build Coastguard Worker #define LIBCONFIG_VER_MINOR    7
44*2e9d4914SAndroid Build Coastguard Worker #define LIBCONFIG_VER_REVISION 0
45*2e9d4914SAndroid Build Coastguard Worker 
46*2e9d4914SAndroid Build Coastguard Worker #include <stdio.h>
47*2e9d4914SAndroid Build Coastguard Worker 
48*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_TYPE_NONE    0
49*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_TYPE_GROUP   1
50*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_TYPE_INT     2
51*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_TYPE_INT64   3
52*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_TYPE_FLOAT   4
53*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_TYPE_STRING  5
54*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_TYPE_BOOL    6
55*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_TYPE_ARRAY   7
56*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_TYPE_LIST    8
57*2e9d4914SAndroid Build Coastguard Worker 
58*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_FORMAT_DEFAULT  0
59*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_FORMAT_HEX      1
60*2e9d4914SAndroid Build Coastguard Worker 
61*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_OPTION_AUTOCONVERT                     0x01
62*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_OPTION_SEMICOLON_SEPARATORS            0x02
63*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_OPTION_COLON_ASSIGNMENT_FOR_GROUPS     0x04
64*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_OPTION_COLON_ASSIGNMENT_FOR_NON_GROUPS 0x08
65*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_OPTION_OPEN_BRACE_ON_SEPARATE_LINE     0x10
66*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_OPTION_ALLOW_SCIENTIFIC_NOTATION       0x20
67*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_OPTION_FSYNC                           0x40
68*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_OPTION_ALLOW_OVERRIDES                 0x80
69*2e9d4914SAndroid Build Coastguard Worker 
70*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_TRUE  (1)
71*2e9d4914SAndroid Build Coastguard Worker #define CONFIG_FALSE (0)
72*2e9d4914SAndroid Build Coastguard Worker 
73*2e9d4914SAndroid Build Coastguard Worker typedef union config_value_t
74*2e9d4914SAndroid Build Coastguard Worker {
75*2e9d4914SAndroid Build Coastguard Worker   int ival;
76*2e9d4914SAndroid Build Coastguard Worker   long long llval;
77*2e9d4914SAndroid Build Coastguard Worker   double fval;
78*2e9d4914SAndroid Build Coastguard Worker   char *sval;
79*2e9d4914SAndroid Build Coastguard Worker   struct config_list_t *list;
80*2e9d4914SAndroid Build Coastguard Worker } config_value_t;
81*2e9d4914SAndroid Build Coastguard Worker 
82*2e9d4914SAndroid Build Coastguard Worker typedef struct config_setting_t
83*2e9d4914SAndroid Build Coastguard Worker {
84*2e9d4914SAndroid Build Coastguard Worker   char *name;
85*2e9d4914SAndroid Build Coastguard Worker   short type;
86*2e9d4914SAndroid Build Coastguard Worker   short format;
87*2e9d4914SAndroid Build Coastguard Worker   config_value_t value;
88*2e9d4914SAndroid Build Coastguard Worker   struct config_setting_t *parent;
89*2e9d4914SAndroid Build Coastguard Worker   struct config_t *config;
90*2e9d4914SAndroid Build Coastguard Worker   void *hook;
91*2e9d4914SAndroid Build Coastguard Worker   unsigned int line;
92*2e9d4914SAndroid Build Coastguard Worker   const char *file;
93*2e9d4914SAndroid Build Coastguard Worker } config_setting_t;
94*2e9d4914SAndroid Build Coastguard Worker 
95*2e9d4914SAndroid Build Coastguard Worker typedef enum
96*2e9d4914SAndroid Build Coastguard Worker {
97*2e9d4914SAndroid Build Coastguard Worker   CONFIG_ERR_NONE = 0,
98*2e9d4914SAndroid Build Coastguard Worker   CONFIG_ERR_FILE_IO = 1,
99*2e9d4914SAndroid Build Coastguard Worker   CONFIG_ERR_PARSE = 2
100*2e9d4914SAndroid Build Coastguard Worker } config_error_t;
101*2e9d4914SAndroid Build Coastguard Worker 
102*2e9d4914SAndroid Build Coastguard Worker typedef struct config_list_t
103*2e9d4914SAndroid Build Coastguard Worker {
104*2e9d4914SAndroid Build Coastguard Worker   unsigned int length;
105*2e9d4914SAndroid Build Coastguard Worker   config_setting_t **elements;
106*2e9d4914SAndroid Build Coastguard Worker } config_list_t;
107*2e9d4914SAndroid Build Coastguard Worker 
108*2e9d4914SAndroid Build Coastguard Worker typedef const char ** (*config_include_fn_t)(struct config_t *,
109*2e9d4914SAndroid Build Coastguard Worker                                              const char *,
110*2e9d4914SAndroid Build Coastguard Worker                                              const char *,
111*2e9d4914SAndroid Build Coastguard Worker                                              const char **);
112*2e9d4914SAndroid Build Coastguard Worker 
113*2e9d4914SAndroid Build Coastguard Worker typedef struct config_t
114*2e9d4914SAndroid Build Coastguard Worker {
115*2e9d4914SAndroid Build Coastguard Worker   config_setting_t *root;
116*2e9d4914SAndroid Build Coastguard Worker   void (*destructor)(void *);
117*2e9d4914SAndroid Build Coastguard Worker   int options;
118*2e9d4914SAndroid Build Coastguard Worker   unsigned short tab_width;
119*2e9d4914SAndroid Build Coastguard Worker   unsigned short float_precision;
120*2e9d4914SAndroid Build Coastguard Worker   unsigned short default_format;
121*2e9d4914SAndroid Build Coastguard Worker   const char *include_dir;
122*2e9d4914SAndroid Build Coastguard Worker   config_include_fn_t include_fn;
123*2e9d4914SAndroid Build Coastguard Worker   const char *error_text;
124*2e9d4914SAndroid Build Coastguard Worker   const char *error_file;
125*2e9d4914SAndroid Build Coastguard Worker   int error_line;
126*2e9d4914SAndroid Build Coastguard Worker   config_error_t error_type;
127*2e9d4914SAndroid Build Coastguard Worker   const char **filenames;
128*2e9d4914SAndroid Build Coastguard Worker   void *hook;
129*2e9d4914SAndroid Build Coastguard Worker } config_t;
130*2e9d4914SAndroid Build Coastguard Worker 
131*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_read(config_t *config, FILE *stream);
132*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API void config_write(const config_t *config, FILE *stream);
133*2e9d4914SAndroid Build Coastguard Worker 
134*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API void config_set_default_format(config_t *config,
135*2e9d4914SAndroid Build Coastguard Worker                                                     short format);
136*2e9d4914SAndroid Build Coastguard Worker 
137*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API void config_set_options(config_t *config, int options);
138*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_get_options(const config_t *config);
139*2e9d4914SAndroid Build Coastguard Worker 
140*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API void config_set_option(config_t *config, int option,
141*2e9d4914SAndroid Build Coastguard Worker                                             int flag);
142*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_get_option(const config_t *config, int option);
143*2e9d4914SAndroid Build Coastguard Worker 
144*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_read_string(config_t *config, const char *str);
145*2e9d4914SAndroid Build Coastguard Worker 
146*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_read_file(config_t *config,
147*2e9d4914SAndroid Build Coastguard Worker                                           const char *filename);
148*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_write_file(config_t *config,
149*2e9d4914SAndroid Build Coastguard Worker                                            const char *filename);
150*2e9d4914SAndroid Build Coastguard Worker 
151*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API void config_set_destructor(config_t *config,
152*2e9d4914SAndroid Build Coastguard Worker                                                 void (*destructor)(void *));
153*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API void config_set_include_dir(config_t *config,
154*2e9d4914SAndroid Build Coastguard Worker                                                  const char *include_dir);
155*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API void config_set_include_func(config_t *config,
156*2e9d4914SAndroid Build Coastguard Worker                                                   config_include_fn_t func);
157*2e9d4914SAndroid Build Coastguard Worker 
158*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API void config_set_float_precision(config_t *config,
159*2e9d4914SAndroid Build Coastguard Worker                                                      unsigned short digits);
160*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API unsigned short config_get_float_precision(
161*2e9d4914SAndroid Build Coastguard Worker   const config_t *config);
162*2e9d4914SAndroid Build Coastguard Worker 
163*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API void config_set_tab_width(config_t *config,
164*2e9d4914SAndroid Build Coastguard Worker                                                unsigned short width);
165*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API unsigned short config_get_tab_width(
166*2e9d4914SAndroid Build Coastguard Worker   const config_t *config);
167*2e9d4914SAndroid Build Coastguard Worker 
168*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API void config_set_hook(config_t *config, void *hook);
169*2e9d4914SAndroid Build Coastguard Worker 
170*2e9d4914SAndroid Build Coastguard Worker #define config_get_hook(C) ((C)->hook)
171*2e9d4914SAndroid Build Coastguard Worker 
172*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API void config_init(config_t *config);
173*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API void config_destroy(config_t *config);
174*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API void config_clear(config_t *config);
175*2e9d4914SAndroid Build Coastguard Worker 
176*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_get_int(
177*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting);
178*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API long long config_setting_get_int64(
179*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting);
180*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API double config_setting_get_float(
181*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting);
182*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_get_bool(
183*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting);
184*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API const char *config_setting_get_string(
185*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting);
186*2e9d4914SAndroid Build Coastguard Worker 
187*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_lookup_int(
188*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting, const char *name, int *value);
189*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_lookup_int64(
190*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting, const char *name, long long *value);
191*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_lookup_float(
192*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting, const char *name, double *value);
193*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_lookup_bool(
194*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting, const char *name, int *value);
195*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_lookup_string(
196*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting, const char *name, const char **value);
197*2e9d4914SAndroid Build Coastguard Worker 
198*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_set_int(config_setting_t *setting,
199*2e9d4914SAndroid Build Coastguard Worker                                                 int value);
200*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_set_int64(config_setting_t *setting,
201*2e9d4914SAndroid Build Coastguard Worker                                                   long long value);
202*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_set_float(config_setting_t *setting,
203*2e9d4914SAndroid Build Coastguard Worker                                                   double value);
204*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_set_bool(config_setting_t *setting,
205*2e9d4914SAndroid Build Coastguard Worker                                                  int value);
206*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_set_string(config_setting_t *setting,
207*2e9d4914SAndroid Build Coastguard Worker                                                    const char *value);
208*2e9d4914SAndroid Build Coastguard Worker 
209*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_set_format(config_setting_t *setting,
210*2e9d4914SAndroid Build Coastguard Worker                                                    short format);
211*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API short config_setting_get_format(
212*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting);
213*2e9d4914SAndroid Build Coastguard Worker 
214*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_get_int_elem(
215*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting, int idx);
216*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API long long config_setting_get_int64_elem(
217*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting, int idx);
218*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API double config_setting_get_float_elem(
219*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting, int idx);
220*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_get_bool_elem(
221*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting, int idx);
222*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API const char *config_setting_get_string_elem(
223*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting, int idx);
224*2e9d4914SAndroid Build Coastguard Worker 
225*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API config_setting_t *config_setting_set_int_elem(
226*2e9d4914SAndroid Build Coastguard Worker   config_setting_t *setting, int idx, int value);
227*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API config_setting_t *config_setting_set_int64_elem(
228*2e9d4914SAndroid Build Coastguard Worker   config_setting_t *setting, int idx, long long value);
229*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API config_setting_t *config_setting_set_float_elem(
230*2e9d4914SAndroid Build Coastguard Worker   config_setting_t *setting, int idx, double value);
231*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API config_setting_t *config_setting_set_bool_elem(
232*2e9d4914SAndroid Build Coastguard Worker   config_setting_t *setting, int idx, int value);
233*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API config_setting_t *config_setting_set_string_elem(
234*2e9d4914SAndroid Build Coastguard Worker   config_setting_t *setting, int idx, const char *value);
235*2e9d4914SAndroid Build Coastguard Worker 
236*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API const char **config_default_include_func(
237*2e9d4914SAndroid Build Coastguard Worker     config_t *config, const char *include_dir, const char *path,
238*2e9d4914SAndroid Build Coastguard Worker     const char **error);
239*2e9d4914SAndroid Build Coastguard Worker 
240*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_is_scalar(
241*2e9d4914SAndroid Build Coastguard Worker     const config_setting_t *setting);
242*2e9d4914SAndroid Build Coastguard Worker 
243*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_is_aggregate(
244*2e9d4914SAndroid Build Coastguard Worker     const config_setting_t *setting);
245*2e9d4914SAndroid Build Coastguard Worker 
246*2e9d4914SAndroid Build Coastguard Worker #define /* const char * */ config_get_include_dir(/* const config_t * */ C) \
247*2e9d4914SAndroid Build Coastguard Worker   ((C)->include_dir)
248*2e9d4914SAndroid Build Coastguard Worker 
249*2e9d4914SAndroid Build Coastguard Worker #define /* void */ config_set_auto_convert(/* config_t * */ C, F) \
250*2e9d4914SAndroid Build Coastguard Worker   config_set_option((C), CONFIG_OPTION_AUTOCONVERT, (F))
251*2e9d4914SAndroid Build Coastguard Worker #define /* int */ config_get_auto_convert(/* const config_t * */ C) \
252*2e9d4914SAndroid Build Coastguard Worker   config_get_option((C), CONFIG_OPTION_AUTOCONVERT)
253*2e9d4914SAndroid Build Coastguard Worker 
254*2e9d4914SAndroid Build Coastguard Worker #define /* int */ config_setting_type(/* const config_setting_t * */ S) \
255*2e9d4914SAndroid Build Coastguard Worker   ((S)->type)
256*2e9d4914SAndroid Build Coastguard Worker 
257*2e9d4914SAndroid Build Coastguard Worker #define /* int */ config_setting_is_group(/* const config_setting_t * */ S) \
258*2e9d4914SAndroid Build Coastguard Worker   ((S)->type == CONFIG_TYPE_GROUP)
259*2e9d4914SAndroid Build Coastguard Worker #define /* int */ config_setting_is_array(/* const config_setting_t * */ S) \
260*2e9d4914SAndroid Build Coastguard Worker   ((S)->type == CONFIG_TYPE_ARRAY)
261*2e9d4914SAndroid Build Coastguard Worker #define /* int */ config_setting_is_list(/* const config_setting_t * */ S) \
262*2e9d4914SAndroid Build Coastguard Worker   ((S)->type == CONFIG_TYPE_LIST)
263*2e9d4914SAndroid Build Coastguard Worker 
264*2e9d4914SAndroid Build Coastguard Worker #define /* int */ config_setting_is_number(/* const config_setting_t * */ S) \
265*2e9d4914SAndroid Build Coastguard Worker   (((S)->type == CONFIG_TYPE_INT)                                       \
266*2e9d4914SAndroid Build Coastguard Worker    || ((S)->type == CONFIG_TYPE_INT64)                                  \
267*2e9d4914SAndroid Build Coastguard Worker    || ((S)->type == CONFIG_TYPE_FLOAT))
268*2e9d4914SAndroid Build Coastguard Worker 
269*2e9d4914SAndroid Build Coastguard Worker #define /* const char * */ config_setting_name( \
270*2e9d4914SAndroid Build Coastguard Worker   /* const config_setting_t * */ S)             \
271*2e9d4914SAndroid Build Coastguard Worker   ((S)->name)
272*2e9d4914SAndroid Build Coastguard Worker 
273*2e9d4914SAndroid Build Coastguard Worker #define /* config_setting_t * */ config_setting_parent( \
274*2e9d4914SAndroid Build Coastguard Worker   /* const config_setting_t * */ S)                     \
275*2e9d4914SAndroid Build Coastguard Worker   ((S)->parent)
276*2e9d4914SAndroid Build Coastguard Worker 
277*2e9d4914SAndroid Build Coastguard Worker #define /* int */ config_setting_is_root(       \
278*2e9d4914SAndroid Build Coastguard Worker   /* const config_setting_t * */ S)             \
279*2e9d4914SAndroid Build Coastguard Worker   ((S)->parent ? CONFIG_FALSE : CONFIG_TRUE)
280*2e9d4914SAndroid Build Coastguard Worker 
281*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_index(const config_setting_t *setting);
282*2e9d4914SAndroid Build Coastguard Worker 
283*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_length(
284*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting);
285*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API config_setting_t *config_setting_get_elem(
286*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting, unsigned int idx);
287*2e9d4914SAndroid Build Coastguard Worker 
288*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API config_setting_t *config_setting_get_member(
289*2e9d4914SAndroid Build Coastguard Worker   const config_setting_t *setting, const char *name);
290*2e9d4914SAndroid Build Coastguard Worker 
291*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API config_setting_t *config_setting_add(
292*2e9d4914SAndroid Build Coastguard Worker   config_setting_t *parent, const char *name, int type);
293*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_remove(config_setting_t *parent,
294*2e9d4914SAndroid Build Coastguard Worker                                                const char *name);
295*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_setting_remove_elem(config_setting_t *parent,
296*2e9d4914SAndroid Build Coastguard Worker                                                     unsigned int idx);
297*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API void config_setting_set_hook(config_setting_t *setting,
298*2e9d4914SAndroid Build Coastguard Worker                                                   void *hook);
299*2e9d4914SAndroid Build Coastguard Worker 
300*2e9d4914SAndroid Build Coastguard Worker #define config_setting_get_hook(S) ((S)->hook)
301*2e9d4914SAndroid Build Coastguard Worker 
302*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API config_setting_t *config_lookup(const config_t *config,
303*2e9d4914SAndroid Build Coastguard Worker                                                      const char *path);
304*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API config_setting_t *config_setting_lookup(
305*2e9d4914SAndroid Build Coastguard Worker   config_setting_t *setting, const char *path);
306*2e9d4914SAndroid Build Coastguard Worker 
307*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_lookup_int(const config_t *config,
308*2e9d4914SAndroid Build Coastguard Worker                                            const char *path, int *value);
309*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_lookup_int64(const config_t *config,
310*2e9d4914SAndroid Build Coastguard Worker                                              const char *path,
311*2e9d4914SAndroid Build Coastguard Worker                                              long long *value);
312*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_lookup_float(const config_t *config,
313*2e9d4914SAndroid Build Coastguard Worker                                              const char *path, double *value);
314*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_lookup_bool(const config_t *config,
315*2e9d4914SAndroid Build Coastguard Worker                                             const char *path, int *value);
316*2e9d4914SAndroid Build Coastguard Worker extern LIBCONFIG_API int config_lookup_string(const config_t *config,
317*2e9d4914SAndroid Build Coastguard Worker                                               const char *path,
318*2e9d4914SAndroid Build Coastguard Worker                                               const char **value);
319*2e9d4914SAndroid Build Coastguard Worker 
320*2e9d4914SAndroid Build Coastguard Worker #define /* config_setting_t * */ config_root_setting( \
321*2e9d4914SAndroid Build Coastguard Worker   /* const config_t * */ C)                           \
322*2e9d4914SAndroid Build Coastguard Worker   ((C)->root)
323*2e9d4914SAndroid Build Coastguard Worker 
324*2e9d4914SAndroid Build Coastguard Worker #define  /* void */ config_set_default_format(/* config_t * */ C,       \
325*2e9d4914SAndroid Build Coastguard Worker                                               /* short */ F)            \
326*2e9d4914SAndroid Build Coastguard Worker   (C)->default_format = (F)
327*2e9d4914SAndroid Build Coastguard Worker 
328*2e9d4914SAndroid Build Coastguard Worker #define /* short */ config_get_default_format(/* config_t * */ C)       \
329*2e9d4914SAndroid Build Coastguard Worker   ((C)->default_format)
330*2e9d4914SAndroid Build Coastguard Worker 
331*2e9d4914SAndroid Build Coastguard Worker #define /* unsigned short */ config_setting_source_line(   \
332*2e9d4914SAndroid Build Coastguard Worker   /* const config_setting_t * */ S)                        \
333*2e9d4914SAndroid Build Coastguard Worker   ((S)->line)
334*2e9d4914SAndroid Build Coastguard Worker 
335*2e9d4914SAndroid Build Coastguard Worker #define /* const char */ config_setting_source_file(    \
336*2e9d4914SAndroid Build Coastguard Worker   /* const config_setting_t * */ S)                     \
337*2e9d4914SAndroid Build Coastguard Worker   ((S)->file)
338*2e9d4914SAndroid Build Coastguard Worker 
339*2e9d4914SAndroid Build Coastguard Worker #define /* const char * */ config_error_text(/* const config_t * */ C)  \
340*2e9d4914SAndroid Build Coastguard Worker   ((C)->error_text)
341*2e9d4914SAndroid Build Coastguard Worker 
342*2e9d4914SAndroid Build Coastguard Worker #define /* const char * */ config_error_file(/* const config_t * */ C)  \
343*2e9d4914SAndroid Build Coastguard Worker   ((C)->error_file)
344*2e9d4914SAndroid Build Coastguard Worker 
345*2e9d4914SAndroid Build Coastguard Worker #define /* int */ config_error_line(/* const config_t * */ C)   \
346*2e9d4914SAndroid Build Coastguard Worker   ((C)->error_line)
347*2e9d4914SAndroid Build Coastguard Worker 
348*2e9d4914SAndroid Build Coastguard Worker #define /* config_error_t */ config_error_type(/* const config_t * */ C) \
349*2e9d4914SAndroid Build Coastguard Worker   ((C)->error_type)
350*2e9d4914SAndroid Build Coastguard Worker 
351*2e9d4914SAndroid Build Coastguard Worker #ifdef __cplusplus
352*2e9d4914SAndroid Build Coastguard Worker }
353*2e9d4914SAndroid Build Coastguard Worker #endif /* __cplusplus */
354*2e9d4914SAndroid Build Coastguard Worker 
355*2e9d4914SAndroid Build Coastguard Worker #endif /* __libconfig_h */
356