SystemAgent/src/drivers/user_config_driver.c

67 lines
1.8 KiB
C
Raw Permalink Normal View History

2021-03-21 16:01:12 +00:00
#include <stdlib.h>
2021-03-14 08:24:55 +00:00
#include "drivers/user_config_driver.h"
2021-07-25 15:22:04 +00:00
#include "utils/user_log_util.h"
2021-03-14 08:24:55 +00:00
2021-03-21 16:01:12 +00:00
int user_config_init(user_config_t *config, char *config_file) {
2021-03-14 15:47:28 +00:00
USER_LOG(USER_LOG_INFO, "Config init.");
2021-03-21 16:01:12 +00:00
config->libconfig_cfg = malloc(sizeof(config_t));
if(config->libconfig_cfg == NULL) return -1;
config_init(config->libconfig_cfg);
2021-03-14 08:24:55 +00:00
2021-03-21 16:01:12 +00:00
if(!config_read_file(config->libconfig_cfg, config_file)) {
2021-07-25 15:22:04 +00:00
USER_LOG(USER_LOG_ERROR,
"Failed to read config file %s: %s in file %s at line %d.",
config_file, config_error_text(config->libconfig_cfg),
config_error_file(config->libconfig_cfg),
config_error_line(config->libconfig_cfg));
2021-03-21 16:01:12 +00:00
return -2;
}
return 0;
}
char *user_config_lookup_string(user_config_t *config, char *path) {
const char *value;
// This string is auto-freeed by libconfig.
if(config_lookup_string(config->libconfig_cfg, path, &value) == 0) {
return NULL;
}
return (char *)value;
}
int user_config_lookup_int(user_config_t *config, char *path, int *value) {
if(config_lookup_int(config->libconfig_cfg, path, value) == 0) {
return -1;
}
return 0;
}
2021-07-25 15:22:04 +00:00
int user_config_lookup_double(user_config_t *config, char *path,
double *value) {
2021-03-21 16:01:12 +00:00
if(config_lookup_float(config->libconfig_cfg, path, value) == 0) {
return -1;
2021-03-14 08:24:55 +00:00
}
2021-03-21 16:01:12 +00:00
return 0;
2021-03-14 08:24:55 +00:00
}
2021-07-27 13:47:38 +00:00
int user_config_lookup_bool(user_config_t *config, char *path, bool *value) {
if(config_lookup_bool(config->libconfig_cfg, path, (int *)value) == 0) {
return -1;
}
return 0;
}
2021-03-21 16:01:12 +00:00
int user_config_deinit(user_config_t *config) {
config_destroy(config->libconfig_cfg);
if(config->libconfig_cfg) {
free(config->libconfig_cfg);
}
return 0;
}