new function to traverse config
(Work in progress)
This commit is contained in:
parent
0e07e42167
commit
04d469b970
82
src/cw/cfg.c
82
src/cw/cfg.c
@ -52,13 +52,13 @@ int cw_cfg_set(cw_Cfg_t * cfg,const char *key, const char *val)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
char * cw_cfg_get(cw_Cfg_t * cfg, char *key)
|
const char * cw_cfg_get(cw_Cfg_t * cfg, char *key, const char *def)
|
||||||
{
|
{
|
||||||
struct cw_Cfg_entry e,*r;
|
struct cw_Cfg_entry e,*r;
|
||||||
e.key = key;
|
e.key = key;
|
||||||
r = mavl_get(cfg,&e);
|
r = mavl_get(cfg,&e);
|
||||||
if (!r)
|
if (!r)
|
||||||
return NULL;
|
return def;
|
||||||
return r->val;
|
return r->val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -373,3 +373,81 @@ int cw_cfg_load(const char *filename,cw_Cfg_t * cfg)
|
|||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return errno;
|
return errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int cw_cfg_get_next_idx(cw_Cfg_t * cfg, const char *key, int n)
|
||||||
|
{
|
||||||
|
char ikey[CW_CFG_MAX_KEY_LEN];
|
||||||
|
struct cw_Cfg_entry search, * result;
|
||||||
|
char *d;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sprintf(ikey,"%s.%d",key,n);
|
||||||
|
|
||||||
|
search.key=ikey;
|
||||||
|
result = mavl_get_first(cfg,&search);
|
||||||
|
|
||||||
|
printf("KEY: %s\n",search.key);
|
||||||
|
printf("NNNNN: %s\n",result->key);
|
||||||
|
|
||||||
|
|
||||||
|
if (result==NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
d=NULL;
|
||||||
|
for (i = strlen(ikey); i>=0; i--){
|
||||||
|
|
||||||
|
if (ikey[i]=='.'){
|
||||||
|
d = result->key+i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d==NULL){
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(result->key[i]!='.'){
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strncmp(result->key,ikey,i)!=0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
printf("TRANSFER %s\n",result->key+i+1);
|
||||||
|
return atoi(result->key+i+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void cw_cfg_iterate(cw_Cfg_t * cfg)
|
||||||
|
{
|
||||||
|
printf("Iterate\n");
|
||||||
|
struct cw_Cfg_entry *e;
|
||||||
|
struct cw_Cfg_entry search;
|
||||||
|
search.key="actube/listen";
|
||||||
|
|
||||||
|
int i=0;
|
||||||
|
i = cw_cfg_get_next_idx(cfg,"actube/listen",i);
|
||||||
|
|
||||||
|
printf("This i %d\n",i);
|
||||||
|
|
||||||
|
while ( (i = cw_cfg_get_next_idx(cfg,"actube/listen",i))!=-1) {
|
||||||
|
|
||||||
|
printf("Here i %d\n",i);
|
||||||
|
printf("we have key: %s.%d\n","actube/listen",i);
|
||||||
|
printf("Next=%d\n",i);
|
||||||
|
i++;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
e = mavl_get_first(cfg,&search);
|
||||||
|
if (!e){
|
||||||
|
printf("NULL\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
printf("%s : %s\n",e->key,e->val);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ struct cw_Cfg_entry{
|
|||||||
char *val;
|
char *val;
|
||||||
};
|
};
|
||||||
|
|
||||||
char * cw_cfg_get(cw_Cfg_t * cfg, char *key);
|
const char * cw_cfg_get(cw_Cfg_t * cfg, char *key, const char *def);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user