24 #ifndef INI_CONFIGOBJ_H
25 #define INI_CONFIGOBJ_H
27 #include <sys/types.h>
32 #include "simplebuffer.h"
33 #include "ini_valueobj.h"
35 #ifndef DING_ATTR_FORMAT
36 # if ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
37 # define DING_ATTR_FORMAT(fmt, args) __attribute__((__format__(__printf__, fmt, args)))
39 # define DING_ATTR_FORMAT(fmt, args)
226 #define INI_META_NONE 0
228 #define INI_META_STATS 1
247 #define INI_ACCESS_CHECK_MODE 0x00000001
255 #define INI_ACCESS_CHECK_UID 0x00000002
263 #define INI_ACCESS_CHECK_GID 0x00000004
287 #define INI_MV1S_OVERWRITE 0x0000
289 #define INI_MV1S_ERROR 0x0001
291 #define INI_MV1S_PRESERVE 0x0002
293 #define INI_MV1S_ALLOW 0x0003
295 #define INI_MV1S_DETECT 0x0004
314 #define INI_MV2S_OVERWRITE 0x0000
316 #define INI_MV2S_ERROR 0x0010
318 #define INI_MV2S_PRESERVE 0x0020
320 #define INI_MV2S_ALLOW 0x0030
322 #define INI_MV2S_DETECT 0x0040
340 #define INI_MS_MERGE 0x0000
342 #define INI_MS_ERROR 0x0100
344 #define INI_MS_OVERWRITE 0x0200
346 #define INI_MS_PRESERVE 0x0300
349 #define INI_MS_DETECT 0x0400
368 #define INI_PARSE_NOWRAP 0x0001
370 #define INI_PARSE_NOSPACE 0x0002
372 #define INI_PARSE_NOTAB 0x0004
374 #define INI_PARSE_NO_C_COMMENTS 0x0008
376 #define INI_PARSE_IGNORE_NON_KVP 0x0010
455 #define INI_DEFAULT_SECTION "default"
469 struct ini_parse_error;
552 uint32_t metadata_flags,
553 struct ini_cfgfile **file_ctx);
578 struct ini_cfgfile **file_ctx);
607 struct ini_cfgfile **file_ctx_out);
670 const char *backup_dir,
671 const char *backup_tpl,
707 struct ini_cfgobj *ini_config);
743 const char *filename,
745 struct ini_cfgobj *ini_config);
936 struct ini_cfgfile *file_ctx2,
963 uint32_t collision_flags,
964 uint32_t parse_flags,
965 struct ini_cfgobj *ini_config);
981 struct ini_cfgobj **ini_new);
1009 struct ini_cfgobj *second,
1010 uint32_t collision_flags,
1011 struct ini_cfgobj **result);
1080 const char *patterns[],
1081 const char *sections[],
1084 uint32_t collision_flags,
1085 uint32_t parse_flags,
1086 uint32_t merge_flags,
1087 struct ini_cfgobj **result_cfg,
1088 struct ref_array **error_list,
1089 struct ref_array **success_list);
1122 struct simplebuffer *sbobj);
1201 const char *section,
1259 struct ini_cfgobj *ini_config,
1261 struct value_obj **vo);
2104 const char *format, ...)
2105 DING_ATTR_FORMAT(2, 3);
2168 typedef
int (ini_validator_func)(const
char *rule_name,
2169 struct ini_cfgobj *rules_obj,
2170 struct ini_cfgobj *config_obj,
2171 struct ini_errobj *errobj,
2174 typedef
int (ini_schema_validator_func)(const
char *rule_name,
2175 struct ini_cfgobj *rules_obj,
2176 struct ini_errobj *errobj,
2184 ini_validator_func *func;
2186 ini_schema_validator_func *schema_validator;
2203 struct ini_cfgobj **_rules_obj);
2230 struct ini_cfgobj *config_obj,
2232 struct ini_errobj *errobj);
int ini_config_file_from_mem(void *data_buf, uint32_t data_len, struct ini_cfgfile **file_ctx)
Create a configuration file object using memory buffer.
long * ini_get_long_config_array(struct value_obj *vo, int *size, int *error)
Convert value to an array of long values.
@ INI_STOP_ON_NONE
Definition: ini_configobj.h:174
augmode
Definition: ini_configobj.h:439
@ INI_AUG_ANY
Definition: ini_configobj.h:440
void ini_rules_destroy(struct ini_cfgobj *ini_config)
Free the rules.
int ini_config_parse(struct ini_cfgfile *file_ctx, int error_level, uint32_t collision_flags, uint32_t parse_flags, struct ini_cfgobj *ini_config)
Parse the file and populate a configuration object.
@ INI_STOP_ON_ERROR
Definition: ini_configobj.h:175
char ** ini_get_section_list(struct ini_cfgobj *ini_config, int *size, int *error)
Get list of sections.
int ini_config_file_backup(struct ini_cfgfile *file_ctx, const char *backup_dir, const char *backup_tpl, struct access_check *backup_access, unsigned max_num)
Save configuration in a backup configuration file.
@ INI_AUG_OVER
Definition: ini_configobj.h:442
double ini_get_double_config_value(struct value_obj *vo, int strict, double def, int *error)
Convert value to floating point number.
@ INI_GET_NEXT_VALUE
Definition: ini_configobj.h:403
void ini_errobj_destroy(struct ini_errobj **errobj)
Free structure that holds error messages.
const char * ini_config_get_filename(struct ini_cfgfile *file_ctx)
Get the fully resolved file name.
@ ERR_LONGKEY
Definition: ini_configobj.h:198
INI_GET
Definition: ini_configobj.h:401
int ini_config_serialize(struct ini_cfgobj *ini_config, struct simplebuffer *sbobj)
Serialize configuration object.
void ini_config_file_print(struct ini_cfgfile *file_ctx)
Print file context.
double * ini_get_double_config_array(struct value_obj *vo, int *size, int *error)
Convert value to an array of floating point values.
@ INI_AUG_ADD
Definition: ini_configobj.h:441
gid_t gid
Definition: ini_configobj.h:429
mode_t mode
Definition: ini_configobj.h:430
void ini_config_clean_state(struct ini_cfgobj *ini_config)
Flush cached search data.
int ini_config_changed(struct ini_cfgfile *file_ctx1, struct ini_cfgfile *file_ctx2, int *changed)
Check if file has changed.
unsigned ini_config_error_count(struct ini_cfgobj *ini_config)
Check parsing errors count.
int ini_config_set_bom(struct ini_cfgfile *file_ctx, enum index_utf_t bom)
Set the encoding indicator.
const char * ini_errobj_get_msg(struct ini_errobj *errobj)
Get pointer to current message in errobj.
void ini_free_long_config_array(long *array)
Free array of long values.
@ ERR_SPACE
Definition: ini_configobj.h:200
@ INI_GET_FIRST_VALUE
Definition: ini_configobj.h:402
@ ERR_NOSECTION
Definition: ini_configobj.h:194
@ INI_GET_LAST_VALUE
Definition: ini_configobj.h:404
int64_t ini_get_int64_config_value(struct value_obj *vo, int strict, int64_t def, int *error)
Convert value to integer number.
int ini_errobj_create(struct ini_errobj **_errobj)
Create structure to hold error messages.
@ INDEX_UTF32LE
Definition: ini_configobj.h:151
void ini_free_bin_config_value(char *bin)
Free binary buffer.
@ INDEX_UTF8NOBOM
Definition: ini_configobj.h:155
char ** ini_get_attribute_list(struct ini_cfgobj *ini_config, const char *section, int *size, int *error)
Get list of attributes.
index_utf_t
Definition: ini_configobj.h:149
int ini_config_set_wrap(struct ini_cfgobj *ini_config, uint32_t boundary)
Set the folding boundary.
int ini_config_save_as(struct ini_cfgfile *file_ctx, const char *filename, struct access_check *new_access, struct ini_cfgobj *ini_config)
Save configuration with a new name.
unsigned long ini_get_ulong_config_value(struct value_obj *vo, int strict, unsigned long def, int *error)
Convert value to unsigned long number.
void ini_config_file_close(struct ini_cfgfile *file_ctx)
Close configuration file after parsing.
void ini_config_free_errors(char **errors)
Free array of parsing errors.
char * ini_get_string_config_value(struct value_obj *vo, int *error)
Get the copy of string stored in the configuration value.
uint32_t flags
Definition: ini_configobj.h:422
uint32_t ini_get_uint32_config_value(struct value_obj *vo, int strict, uint32_t def, int *error)
Convert value to uint32_t number.
int ini_get_int_config_value(struct value_obj *vo, int strict, int def, int *error)
Convert value to integer number.
int ini_config_access_check(struct ini_cfgfile *file_ctx, uint32_t flags, uid_t uid, gid_t gid, mode_t mode, mode_t mask)
Check file properties.
void ini_config_print_errors(FILE *file, char **error_list)
Print errors to a file.
unsigned ini_get_unsigned_config_value(struct value_obj *vo, int strict, unsigned def, int *error)
Convert value object to a unsigned number.
void ini_errobj_next(struct ini_errobj *errobj)
Move to the next message in errobj.
@ INDEX_UTF32BE
Definition: ini_configobj.h:150
int ini_config_file_reopen(struct ini_cfgfile *file_ctx_in, struct ini_cfgfile **file_ctx_out)
Reopen the configuration file.
int ini_config_get_errors(struct ini_cfgobj *ini_config, char ***errors)
Get array of parsing errors.
@ ERR_DUPKEYSEC
Definition: ini_configobj.h:203
mode_t mask
Definition: ini_configobj.h:431
void ini_free_string_config_array(char **str_config)
Free array of string values.
int ini_config_augment(struct ini_cfgobj *base_cfg, const char *path, const char *patterns[], const char *sections[], struct access_check *check_perm, int error_level, uint32_t collision_flags, uint32_t parse_flags, uint32_t merge_flags, struct ini_cfgobj **result_cfg, struct ref_array **error_list, struct ref_array **success_list)
Augment configuration.
@ INI_STOP_ON_ANY
Definition: ini_configobj.h:173
void ini_free_double_config_array(double *array)
Free array of floating pointer values.
@ ERR_SECTIONLONG
Definition: ini_configobj.h:195
@ ERR_BADCOMMENT
Definition: ini_configobj.h:209
char ** ini_get_string_config_array(struct value_obj *vo, const char *sep, int *size, int *error)
Convert value to an array of strings.
uint64_t ini_get_uint64_config_value(struct value_obj *vo, int strict, uint64_t def, int *error)
Convert value to integer number.
int void ini_errobj_reset(struct ini_errobj *errobj)
Reset iterator in errobj.
@ ERR_TAB
Definition: ini_configobj.h:207
uid_t uid
Definition: ini_configobj.h:428
void ini_free_attribute_list(char **attr_list)
Free list of attributes.
int ini_config_create(struct ini_cfgobj **ini_config)
Create a configuration object.
int ini_config_file_open(const char *filename, uint32_t metadata_flags, struct ini_cfgfile **file_ctx)
Create a configuration file object.
int ini_errobj_no_more_msgs(struct ini_errobj *errobj)
Check if errobj has more messages.
@ ERR_DUPKEY
Definition: ini_configobj.h:202
const struct stat * ini_config_get_stat(struct ini_cfgfile *file_ctx)
Get pointer to collected stat data.
@ ERR_NOKEY
Definition: ini_configobj.h:197
unsigned char ini_get_bool_config_value(struct value_obj *vo, unsigned char def, int *error)
Convert value into a logical value.
@ ERR_READ
Definition: ini_configobj.h:199
int ini_rules_read_from_file(const char *filename, struct ini_cfgobj **_rules_obj)
Read rules from INI file.
@ ERR_DUPSECTION
Definition: ini_configobj.h:205
ERR_PARSE
Definition: ini_configobj.h:190
void ini_free_section_list(char **section_list)
Free list of sections.
@ ERR_MAXPARSE
Definition: ini_configobj.h:210
size_t ini_errobj_count(struct ini_errobj *errobj)
Return number of messages in errobj.
int ini_config_copy(struct ini_cfgobj *ini_config, struct ini_cfgobj **ini_new)
Create a copy of the configuration object.
Structure used to define application specific (external to libini) validator.
Definition: ini_configobj.h:2182
ERR_LEVEL
Definition: ini_configobj.h:172
@ ERR_SPECIAL
Definition: ini_configobj.h:206
int ini_config_merge(struct ini_cfgobj *first, struct ini_cfgobj *second, uint32_t collision_flags, struct ini_cfgobj **result)
Merge two configuration objects.
char ** ini_get_raw_string_config_array(struct value_obj *vo, const char *sep, int *size, int *error)
Convert value to an array of strings.
@ ERR_NOCLOSESEC
Definition: ini_configobj.h:192
int32_t ini_get_int32_config_value(struct value_obj *vo, int strict, int32_t def, int *error)
Convert value to int32_t number.
@ ERR_NOEQUAL
Definition: ini_configobj.h:196
void ini_config_file_destroy(struct ini_cfgfile *file_ctx)
Close configuration file and free all data.
int ini_config_change_access(struct ini_cfgfile *file_ctx, struct access_check *new_access)
Change permissions and ownership of the file.
const char * ini_get_const_string_config_value(struct value_obj *vo, int *error)
Get the string stored in the configuration value.
int ini_rules_check(struct ini_cfgobj *rules_obj, struct ini_cfgobj *config_obj, struct ini_validator **extra_validators, struct ini_errobj *errobj)
Check configuration file using rules.
int ini_errobj_add_msg(struct ini_errobj *errobj, const char *format,...) DING_ATTR_FORMAT(2
Add new printf formated message to errobj.
enum index_utf_t ini_config_get_bom(struct ini_cfgfile *file_ctx)
Return the encoding indicator.
char * ini_get_bin_config_value(struct value_obj *vo, int *length, int *error)
Convert value into a binary sequence.
@ INDEX_UTF16BE
Definition: ini_configobj.h:152
Definition: ini_configobj.h:421
long ini_get_long_config_value(struct value_obj *vo, int strict, long def, int *error)
Convert value to long number.
int ini_config_save(struct ini_cfgfile *file_ctx, struct access_check *new_access, struct ini_cfgobj *ini_config)
Save configuration in a file.
int ini_get_config_valueobj(const char *section, const char *name, struct ini_cfgobj *ini_config, int mode, struct value_obj **vo)
Retrieve a value object form the configuration.
@ INDEX_UTF8
Definition: ini_configobj.h:154
@ ERR_LONGDATA
Definition: ini_configobj.h:191
@ INDEX_UTF16LE
Definition: ini_configobj.h:153
void ini_config_destroy(struct ini_cfgobj *ini_config)
Destroy a configuration object.