Files
auth_service_c/src/ConfigManager.c
T
wt b0758c5499
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Make (push) Successful in 9s
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-CMake (push) Successful in 13s
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Meson (push) Successful in 13s
hot fix warning in fprintf
2025-08-30 12:10:40 +07:00

173 lines
5.2 KiB
C

#include "ConfigManager.h"
#include <cJSON.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "file.h"
typedef struct ConfigManager {
cJSON *config;
pthread_mutex_t config_file_mutex;
char *config_file_name;
} ConfigManager;
ConfigManager *cm_new_config() {
ConfigManager *newcm = malloc(sizeof(ConfigManager));
newcm->config_file_name = nullptr;
newcm->config = nullptr;
return newcm;
}
ConfigManager *cm_new_config_from_file(const char *filename) {
ConfigManager *newcm = malloc(sizeof(ConfigManager));
newcm->config_file_name = strdup(filename);
pthread_mutex_lock(&(newcm->config_file_mutex));
char *config_file_content = read_file(newcm->config_file_name);
newcm->config = cJSON_Parse(config_file_content);
pthread_mutex_unlock(&(newcm->config_file_mutex));
return newcm;
}
ConfigManager *cm_new_config_from_object(cJSON *config) {
ConfigManager *newcm = malloc(sizeof(ConfigManager));
newcm->config = config;
newcm->config_file_name = nullptr;
return newcm;
}
void cm_set_config_from_file(ConfigManager *cm, const char *filename) {
cm->config_file_name = strdup(filename);
pthread_mutex_lock(&(cm->config_file_mutex));
char *config_file_content = read_file(cm->config_file_name);
cm->config = cJSON_Parse(config_file_content);
pthread_mutex_unlock(&(cm->config_file_mutex));
}
void cm_set_config_from_object(ConfigManager *cm, cJSON *config) {
cm->config = config;
}
void cm_delete_config(ConfigManager *cm) {
if (!cm) {
return;
}
if (cm->config) {
cJSON_Delete(cm->config);
}
if (cm->config_file_name) {
free(cm->config_file_name);
}
free(cm);
}
void cm_print_config(const ConfigManager *cm) {
printf("Config: %s\n", cJSON_Print(cm->config));
}
char *cm_get_config_filename(ConfigManager *cm) {
return strdup(cm->config_file_name);
}
cJSON *cm_get_config(ConfigManager *cm) {
return cJSON_Duplicate(cm->config, (cJSON_bool) true);
}
char *cm_get_parameter_as_string(ConfigManager *cm, const char *param_name) {
cJSON *param = cJSON_GetObjectItem(cm->config, param_name);
if (!param) return nullptr;
char *param_value = strdup(param->valuestring);
return param_value;
}
int cm_get_parameter_as_int(ConfigManager *cm, const char *param_name) {
cJSON *param = cJSON_GetObjectItem(cm->config, param_name);
return param->valueint;
}
double cm_get_parameter_as_double(ConfigManager *cm, const char *param_name) {
cJSON *param = cJSON_GetObjectItem(cm->config, param_name);
return param->valuedouble;
}
float cm_get_parameter_as_float(ConfigManager *cm, const char *param_name) {
cJSON *param = cJSON_GetObjectItem(cm->config, param_name);
return param->valuedouble;
}
bool cm_get_parameter_as_bool(ConfigManager *cm, const char *param_name) {
cJSON *param = cJSON_GetObjectItem(cm->config, param_name);
if (!param) return false;
return param->valueint;
}
void cm_set_string_parameter(ConfigManager *cm, const char *name,
const char *value) {
cJSON *param = cJSON_GetObjectItem(cm->config, name);
if (!param) {
cJSON_AddStringToObject(cm->config, name, value);
return;
}
cJSON_SetValuestring(param, value);
}
void cm_set_int_parameter(ConfigManager *cm, const char *name,
const int value) {
cJSON *param = cJSON_GetObjectItem(cm->config, name);
if (!param) {
cJSON_AddNumberToObject(cm->config, name, value);
return;
}
cJSON_SetIntValue(param, value);
}
void cm_set_double_parameter(ConfigManager *cm, const char *name,
const double value) {
cJSON *param = cJSON_GetObjectItem(cm->config, name);
if (!param) {
cJSON_AddNumberToObject(cm->config, name, value);
return;
}
cJSON_SetNumberValue(param, value);
}
void cm_set_float_parameter(ConfigManager *cm, const char *name,
const float value) {
cJSON *param = cJSON_GetObjectItem(cm->config, name);
if (!param) {
cJSON_AddNumberToObject(cm->config, name, value);
return;
}
cJSON_SetNumberValue(param, value);
}
void cm_set_bool_parameter(ConfigManager *cm, const char *name,
const bool value) {
cJSON *param = cJSON_GetObjectItem(cm->config, name);
if (!param) {
cJSON_AddBoolToObject(cm->config, name, value);
return;
}
cJSON_SetBoolValue(param, value);
}
void cm_set_null_parameter(ConfigManager *cm, const char *name) {
cJSON *param = cJSON_GetObjectItem(cm->config, name);
if (!param) {
cJSON_AddNullToObject(cm->config, name);
return;
}
cJSON_ReplaceItemInObject(cm->config, name, cJSON_CreateNull());
}
void cm_save_config(ConfigManager *cm) {
pthread_mutex_lock(&(cm->config_file_mutex));
FILE *configfile = fopen(cm->config_file_name, "w+");
char *configvalue = cJSON_Print(cm->config);
fprintf(configfile, "%s", configvalue);
fclose(configfile);
free(configvalue);
pthread_mutex_unlock(&(cm->config_file_mutex));
}
void cm_save_config_to_file(ConfigManager *cm, const char *filename) {
pthread_mutex_lock(&(cm->config_file_mutex));
FILE *configfile = fopen(filename, "w+");
char *configvalue = cJSON_Print(cm->config);
fprintf(configfile, "%s", configvalue);
fclose(configfile);
free(configvalue);
pthread_mutex_unlock(&(cm->config_file_mutex));
}