更新解析配置文件

master
brisk 2014-04-16 22:26:28 +08:00
parent 5fbdbce218
commit 8c3ca5ec83
3 changed files with 56 additions and 18 deletions

View File

@ -9,6 +9,8 @@ int parse_value(CONF *conf,char *data,CONF_VALUE **res);
int next_line(char *data);
//释放内存
void free_data(CONF_ARG *data);
//得到键
void get_key(char **key,int *index,CONF_ARG *arg);
//打开配置文件并初始化值
//path为配置文件路径
@ -73,20 +75,7 @@ int conf_parse(CONF *conf)
{
//如果已经解析了则进行释放
if(value)
{
int i=0;
int j;
while(value[i])
{
free(value[i].key);
for(j=0;value[i].value[j] != NULL;++i)
free(value[i].value[j]);
free(value[i]);
++i;
}
}
free(value);
//返回错误
retcode=CONF_NO_MEM;
@ -411,3 +400,35 @@ void free_data(CONF_ARG *data)
data=data->next;
}
}
char **conf_key_list(CONF *conf)
{
char **key;
int i;
int index=0;
//开辟足够的内存空间
key=malloc(sizeof(char *)*(conf->len+1));
if(key == NULL)
return NULL;
key[conf->len]=NULL;
//读取出所有键
for(i=0;i < conf->len;++i)
if(conf->hash_data[i].len > 0)
get_key(key,&index,&conf->hash_data[i]);
return key;
}
void get_key(char **key,int *index,CONF_ARG *arg)
{
while(arg != NULL)
{
key[*index]=arg->value->key;
++(*index);
arg=arg->next;
}
}

View File

@ -42,6 +42,9 @@ int conf_parse(CONF *conf);
//获取当前配置文件中键值对个数
int conf_count(CONF *conf);
//得到所有键
char **conf_key_list(CONF *conf);
//创建一个配置文件path为配置文件的路经
CONF_CREATER *conf_creater_new(const char *path);

View File

@ -21,7 +21,7 @@ void conf_value_insert(CONF_ARG *arg,CONF_VALUE *value,int len)
/* 如果要插入的地方已经有一个值则使用第二个哈希函数计算一个新的哈希值
* 使*/
if(arg[hash].len > 1)
if(arg[hash].len > 0)
{
hash2=hash_func2(value->key)%len;
if(arg[hash2].len < arg[hash].len)
@ -149,8 +149,22 @@ int hash_search(CONF_ARG *arg,char *key,CONF_VALUE **value)
void hash_insert(CONF_ARG *arg,CONF_VALUE *value)
{
while(arg->next != NULL)
arg=arg->next;
CONF_ARG *temp;
arg->value=value;
if(arg->len == 1)
{
arg->value=value;
arg->next=NULL;
}
else
{
temp=malloc(sizeof(CONF_ARG));
temp->value=value;
temp->next=NULL;
while(arg->next != NULL)
arg=arg->next;
arg->next=temp;
}
}