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