Confparse: Improve section stuff: Section work like this now: [secname] option = "pwet" [/secname]
This commit is contained in:
@@ -531,10 +531,6 @@ init_conf(void)
|
||||
func_list = emalloc(LEN(tmp_func_list), sizeof(func_name_list_t));
|
||||
memcpy(func_list, tmp_func_list, LEN(tmp_func_list) * sizeof(func_name_list_t));
|
||||
|
||||
printf("-> %s\n", erase_sec_content(" [pwet] tagada = prout hihi=tralalère [uh] wpwer [/uh] [uh] pwefvbg [/uh] [/pwet] "));
|
||||
|
||||
return;
|
||||
|
||||
conf_misc_section(get_sec(file, "misc"));
|
||||
conf_bar_section(get_sec(file, "bar"));
|
||||
conf_root_section(get_sec(file, "root"));
|
||||
|
||||
@@ -92,7 +92,7 @@ get_sec(char *src, char *name)
|
||||
else
|
||||
ret = NULL;
|
||||
|
||||
free(sec);
|
||||
free_secname(sec);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -101,7 +101,7 @@ char*
|
||||
get_nsec(char *src, char *name, int n)
|
||||
{
|
||||
int i;
|
||||
char *ret, *buf, *secn;
|
||||
char *ret, *buf, **sec;
|
||||
char *buf2;
|
||||
|
||||
if(!src)
|
||||
@@ -113,17 +113,16 @@ get_nsec(char *src, char *name, int n)
|
||||
if(!n)
|
||||
return get_sec(src, name);
|
||||
|
||||
secn = emalloc((strlen(name) + 2), sizeof(char));
|
||||
sprintf(secn, "%c%s%c", SEC_DEL_S, name, SEC_DEL_E);
|
||||
sec = secname(name);
|
||||
|
||||
buf = erase_delim_content(src);
|
||||
buf2 = erase_sec_content(buf);
|
||||
|
||||
for(i = 0; i < (n * 2) && (buf = strstr(buf, secn)); ++i, buf += strlen(secn));
|
||||
for(i = 0; i < n && (buf = strstr(buf, sec[SecStart])); ++i, buf += strlen(sec[SecStart]));
|
||||
|
||||
ret = get_sec(src + strlen(src) - strlen(buf), name);
|
||||
|
||||
free(secn);
|
||||
free_secname(sec);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -132,24 +131,20 @@ int
|
||||
get_size_sec(char *src, char *name)
|
||||
{
|
||||
int ret;
|
||||
char *secn, *buf;
|
||||
char **sec, *buf;
|
||||
|
||||
if(!src || !name)
|
||||
return 0;
|
||||
|
||||
secn = emalloc(strlen(name), sizeof(char));
|
||||
sprintf(secn, "%c%s%c", SEC_DEL_S, name, SEC_DEL_E);
|
||||
sec = secname(name);
|
||||
|
||||
buf = erase_sec_content(src);
|
||||
|
||||
for(ret = 0; (buf = strstr(buf, secn)); ++ret, buf += strlen(secn));
|
||||
for(ret = 0; (buf = strstr(buf, sec[SecStart])); ++ret, buf += strlen(sec[SecStart]));
|
||||
|
||||
/* If a section is not closed */
|
||||
for(; ret % 2; --ret);
|
||||
free_secname(sec);
|
||||
|
||||
free(secn);
|
||||
|
||||
return ret / 2;
|
||||
return ret;
|
||||
}
|
||||
|
||||
opt_type
|
||||
|
||||
@@ -68,6 +68,7 @@ char *opt_srch(char *buf, char *opt);
|
||||
opt_type str_to_opt(char *str);
|
||||
char *clean_value(char *str);
|
||||
char **secname(char *name);
|
||||
void free_secname(char **secname);
|
||||
|
||||
/* confparse.c */
|
||||
char *file_to_str(char *path);
|
||||
|
||||
@@ -67,7 +67,7 @@ erase_sec_content(char *buf)
|
||||
{
|
||||
int i, j;
|
||||
char *p, *str, *name, *ret;
|
||||
char *sname;
|
||||
char **sec;
|
||||
|
||||
if(!buf || !(str = erase_delim_content(buf)))
|
||||
return NULL;
|
||||
@@ -77,19 +77,23 @@ erase_sec_content(char *buf)
|
||||
for(i = 1, name = _strdup(str + i); strchr(str + i, SEC_DEL_S); ++i, name = _strdup(str + i))
|
||||
{
|
||||
for(; str[i] && str[i] != SEC_DEL_S; ++i);
|
||||
for(j = 0; str[i] && str[i - 1] != SEC_DEL_E; name[j++] = str[i++]);
|
||||
name[j] = '\0';
|
||||
for(j = 0; str[i] && str[i] != SEC_DEL_E; name[j++] = str[i++]);
|
||||
++name;
|
||||
name[j - 1] = '\0';
|
||||
|
||||
sname = emalloc(strlen(name) + 1, sizeof(char));
|
||||
if(*name == '/')
|
||||
continue;
|
||||
|
||||
sprintf(sname, "[/%s]", name);
|
||||
sec = secname(name);
|
||||
|
||||
if((p = strstr(str + i, sname)))
|
||||
if((p = strstr(str + i, sec[SecEnd])))
|
||||
for(++i; i < strlen(ret) - strlen(p); ret[i++] = ' ');
|
||||
else
|
||||
return ret;
|
||||
break;
|
||||
}
|
||||
|
||||
free_secname(sec);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -181,3 +185,19 @@ secname(char *name)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void
|
||||
free_secname(char **secname)
|
||||
{
|
||||
if(!secname || LEN(secname) != SecLast)
|
||||
return;
|
||||
|
||||
if(secname[SecStart])
|
||||
free(secname[SecStart]);
|
||||
if(secname[SecEnd])
|
||||
free(secname[SecEnd]);
|
||||
|
||||
free(secname);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user