Files

134 lines
2.8 KiB
C

/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>
#include "config_svc.h"
#include "iniparser.h"
#include "log_base.h"
#define CONFIG_MAX_PATH 256
typedef struct {
char* config_file;
} config_svc_t;
static config_svc_t* __config_svc = NULL;
int create_config_svc(char *config_path)
{
assert(config_path != NULL);
if (__config_svc != NULL) {
free(__config_svc);
}
__config_svc = (config_svc_t*)malloc(sizeof(config_svc_t));
if (__config_svc == NULL) {
LOGE("create config svc failure\n");
goto ERR;
}
__config_svc->config_file = malloc(sizeof(char) * CONFIG_MAX_PATH);
if (__config_svc->config_file == NULL) {
LOGE("malloc config file memory failure\n");
goto ERR;
}
if (strlen(config_path) > CONFIG_MAX_PATH) {
LOGE("config path is too length\n");
goto ERR;
}
strcpy(__config_svc->config_file, config_path);
return 0;
ERR:
if (__config_svc) {
if (__config_svc->config_file) {
free(__config_svc->config_file);
}
free(__config_svc);
}
__config_svc = NULL;
return -1;
}
void release_cofnig_svc()
{
if (__config_svc) {
if (__config_svc->config_file) {
free(__config_svc->config_file);
}
free(__config_svc);
}
__config_svc = NULL;
}
int get_config_value(const char *key, int default_value)
{
dictionary *config_dic;
int value = default_value;
assert(key != NULL);
assert(__config_svc != NULL);
config_dic = iniparser_load(__config_svc->config_file);
if (config_dic == NULL) {
LOGE("open config file failuer[%s], returen default value:%d\n", __config_svc->config_file, default_value);
return value;
}
value = iniparser_getint(config_dic, key, default_value);
iniparser_freedict(config_dic);
return value;
}
int get_config_string(const char *key, char *buf, int size)
{
dictionary *config_dic;
int copy_size;
int ret = -1;
char* value = NULL;
assert(key != NULL);
assert(buf != NULL);
assert(__config_svc != NULL);
config_dic = iniparser_load(__config_svc->config_file);
if (config_dic == NULL) {
LOGE("open config file failuer[%s], returen NULL\n", __config_svc->config_file);
return ret;
}
value = iniparser_getstring(config_dic, key, NULL);
if (value != NULL) {
copy_size = strlen(value);
if (copy_size <= size) {
memcpy(buf, value, copy_size);
ret = 0;
} else {
LOGE("buffer is small too get %s.\n", key);
}
} else {
LOGD("getstring (%s) fail.\n", key);
}
iniparser_freedict(config_dic);
return ret;
}