22 #ifndef INI_CONFIGOBJ_H
23 #define INI_CONFIGOBJ_H
25 #include <sys/types.h>
30 #include "simplebuffer.h"
42 #define INI_STOP_ON_ANY 0
44 #define INI_STOP_ON_NONE 1
46 #define INI_STOP_ON_ERROR 2
58 #define ERR_LONGDATA 1
60 #define ERR_NOCLOSESEC 2
62 #define ERR_NOSECTION 3
64 #define ERR_SECTIONLONG 4
78 #define ERR_DUPKEYSEC 11
80 #define ERR_DUPSECTION 12
83 #define ERR_MAXPARSE ERR_DUPSECTION
98 #define INI_META_NONE 0
100 #define INI_META_STATS 1
119 #define INI_ACCESS_CHECK_MODE 0x00000001
127 #define INI_ACCESS_CHECK_UID 0x00000002
135 #define INI_ACCESS_CHECK_GID 0x00000004
159 #define INI_MV1S_OVERWRITE 0x0000
161 #define INI_MV1S_ERROR 0x0001
163 #define INI_MV1S_PRESERVE 0x0002
165 #define INI_MV1S_ALLOW 0x0003
167 #define INI_MV1S_DETECT 0x0004
186 #define INI_MV2S_OVERWRITE 0x0000
188 #define INI_MV2S_ERROR 0x0010
190 #define INI_MV2S_PRESERVE 0x0020
192 #define INI_MV2S_ALLOW 0x0030
194 #define INI_MV2S_DETECT 0x0040
212 #define INI_MS_MERGE 0x0000
214 #define INI_MS_ERROR 0x0100
216 #define INI_MS_OVERWRITE 0x0200
218 #define INI_MS_PRESERVE 0x0300
220 #define INI_MS_ALLOW 0x0400
222 #define INI_MS_DETECT 0x0500
244 struct ini_parse_error;
259 int ini_config_create(
struct ini_cfgobj **ini_config);
262 void ini_config_destroy(
struct ini_cfgobj *ini_config);
265 int ini_config_file_open(
const char *filename,
267 uint32_t collision_flags,
268 uint32_t metadata_flags,
269 struct ini_cfgfile **file_ctx);
272 int ini_config_file_reopen(
struct ini_cfgfile *file_ctx_in,
273 struct ini_cfgfile **file_ctx_out);
276 void ini_config_file_close(
struct ini_cfgfile *file_ctx);
279 void ini_config_file_destroy(
struct ini_cfgfile *file_ctx);
282 unsigned ini_config_error_count(
struct ini_cfgfile *file_ctx);
285 int ini_config_get_errors(
struct ini_cfgfile *file_ctx,
289 const char *ini_config_get_filename(
struct ini_cfgfile *file_ctx);
292 void ini_config_free_errors(
char **errors);
295 int ini_config_parse(
struct ini_cfgfile *file_ctx,
296 struct ini_cfgobj *ini_config);
299 int ini_config_copy(
struct ini_cfgobj *ini_config,
300 struct ini_cfgobj **ini_new);
303 void ini_config_print_errors(FILE *file,
char **error_list);
306 int ini_config_merge(
struct ini_cfgobj *first,
307 struct ini_cfgobj *second,
308 uint32_t collision_flags,
309 struct ini_cfgobj **result);
315 int ini_config_set_wrap(
struct ini_cfgobj *ini_config,
319 int ini_config_serialize(
struct ini_cfgobj *ini_config,
320 struct simplebuffer *sbobj);
323 int ini_config_access_check(
struct ini_cfgfile *file_ctx,
335 int ini_config_changed(
struct ini_cfgfile *file_ctx1,
336 struct ini_cfgfile *file_ctx2,
475 unsigned long *value);
483 #ifdef THE_PART_I_HAVE_PROCESSED