mirror of
https://github.com/owntone/owntone-server.git
synced 2025-01-27 22:46:02 -05:00
string splitting function
This commit is contained in:
parent
5020ed6884
commit
2fbb744e6f
108
src/conf.c
108
src/conf.c
@ -122,13 +122,13 @@ CONF_ELEMENTS *_conf_get_keyinfo(char *section, char *key) {
|
|||||||
|
|
||||||
pcurrent = &conf_elements[0];
|
pcurrent = &conf_elements[0];
|
||||||
while(pcurrent->section && pcurrent->term) {
|
while(pcurrent->section && pcurrent->term) {
|
||||||
if((strcasecmp(section,pcurrent->section) != 0) ||
|
if((strcasecmp(section,pcurrent->section) != 0) ||
|
||||||
(strcasecmp(key,pcurrent->term) != 0)) {
|
(strcasecmp(key,pcurrent->term) != 0)) {
|
||||||
pcurrent++;
|
pcurrent++;
|
||||||
} else {
|
} else {
|
||||||
found = 1;
|
found = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return found ? pcurrent : NULL;
|
return found ? pcurrent : NULL;
|
||||||
@ -291,7 +291,7 @@ int conf_read(char *file) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
prev_comments = (char*)malloc(total_comment_length);
|
prev_comments = (char*)malloc(total_comment_length);
|
||||||
if(!prev_comments)
|
if(!prev_comments)
|
||||||
DPRINTF(E_FATAL,L_CONF,"Malloc error\n");
|
DPRINTF(E_FATAL,L_CONF,"Malloc error\n");
|
||||||
prev_comments[0] = '\0';
|
prev_comments[0] = '\0';
|
||||||
|
|
||||||
@ -320,7 +320,7 @@ int conf_read(char *file) {
|
|||||||
comment++;
|
comment++;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(strlen(linebuffer) &&
|
while(strlen(linebuffer) &&
|
||||||
(strchr("\n\r ",linebuffer[strlen(linebuffer)-1])))
|
(strchr("\n\r ",linebuffer[strlen(linebuffer)-1])))
|
||||||
linebuffer[strlen(linebuffer)-1] = '\0';
|
linebuffer[strlen(linebuffer)-1] = '\0';
|
||||||
|
|
||||||
@ -400,8 +400,8 @@ int conf_read(char *file) {
|
|||||||
}
|
}
|
||||||
ll_add_ll(pllnew,"general",plltemp);
|
ll_add_ll(pllnew,"general",plltemp);
|
||||||
pllcurrent = plltemp;
|
pllcurrent = plltemp;
|
||||||
|
|
||||||
if(section_name)
|
if(section_name)
|
||||||
free(section_name); /* shouldn't ahppen */
|
free(section_name); /* shouldn't ahppen */
|
||||||
section_name = strdup("general");
|
section_name = strdup("general");
|
||||||
|
|
||||||
@ -415,22 +415,22 @@ int conf_read(char *file) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* see what kind this is, and act accordingly */
|
/* see what kind this is, and act accordingly */
|
||||||
pce = _conf_get_keyinfo(section_name,term);
|
pce = _conf_get_keyinfo(section_name,term);
|
||||||
key_type = CONF_T_STRING;
|
key_type = CONF_T_STRING;
|
||||||
if(pce)
|
if(pce)
|
||||||
key_type = pce->type;
|
key_type = pce->type;
|
||||||
|
|
||||||
switch(key_type) {
|
switch(key_type) {
|
||||||
case CONF_T_MULTICOMMA:
|
case CONF_T_MULTICOMMA:
|
||||||
break;
|
break;
|
||||||
case CONF_T_INT:
|
case CONF_T_INT:
|
||||||
case CONF_T_STRING:
|
case CONF_T_STRING:
|
||||||
case CONF_T_EXISTPATH:
|
case CONF_T_EXISTPATH:
|
||||||
default:
|
default:
|
||||||
ll_add_string(pllcurrent,term,value);
|
ll_add_string(pllcurrent,term,value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(comment) {
|
if(comment) {
|
||||||
@ -499,10 +499,10 @@ int conf_read(char *file) {
|
|||||||
DPRINTF(E_SPAM,L_CONF,"Current comment block: \n%s\n",prev_comments);
|
DPRINTF(E_SPAM,L_CONF,"Current comment block: \n%s\n",prev_comments);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(section_name)
|
if(section_name)
|
||||||
free(section_name);
|
free(section_name);
|
||||||
|
|
||||||
if(prev_comments) {
|
if(prev_comments) {
|
||||||
if(prev_comments[0] != '\0') {
|
if(prev_comments[0] != '\0') {
|
||||||
ll_add_string(pllcomment,"end",prev_comments);
|
ll_add_string(pllcomment,"end",prev_comments);
|
||||||
@ -832,14 +832,62 @@ int _conf_write(FILE *fp, LL *pll, int sublevel, char *parent) {
|
|||||||
*/
|
*/
|
||||||
int conf_isset(char *section, char *key) {
|
int conf_isset(char *section, char *key) {
|
||||||
int retval = FALSE;
|
int retval = FALSE;
|
||||||
|
|
||||||
_conf_lock();
|
_conf_lock();
|
||||||
if(_conf_fetch_item(conf_main,section,key)) {
|
if(_conf_fetch_item(conf_main,section,key)) {
|
||||||
retval = TRUE;
|
retval = TRUE;
|
||||||
}
|
}
|
||||||
_conf_unlock();
|
_conf_unlock();
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* split a string on delimiter boundaries, filling
|
||||||
|
* a string-pointer array.
|
||||||
|
*
|
||||||
|
* The user must free both the first element in the array,
|
||||||
|
* and the array itself.
|
||||||
|
*
|
||||||
|
* @param s string to split
|
||||||
|
* @param delimiters boundaries to split on
|
||||||
|
* @param argvp an argv array to be filled
|
||||||
|
* @returns number of tokens
|
||||||
|
*/
|
||||||
|
int _conf_split(char *s, char *delimiters, char ***argvp) {
|
||||||
|
int i;
|
||||||
|
int numtokens;
|
||||||
|
const char *snew;
|
||||||
|
char *t;
|
||||||
|
char *tokptr;
|
||||||
|
|
||||||
|
if ((s == NULL) || (delimiters == NULL) || (argvp == NULL))
|
||||||
|
return -1;
|
||||||
|
*argvp = NULL;
|
||||||
|
snew = s + strspn(s, delimiters);
|
||||||
|
if ((t = malloc(strlen(snew) + 1)) == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
strcpy(t, snew);
|
||||||
|
numtokens = 0;
|
||||||
|
tokptr = NULL;
|
||||||
|
while(strtok_r(t,delimiters,&tokptr) != NULL)
|
||||||
|
numtokens++;
|
||||||
|
|
||||||
|
if ((*argvp = malloc((numtokens + 1)*sizeof(char *))) == NULL) {
|
||||||
|
free(t);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (numtokens == 0)
|
||||||
|
free(t);
|
||||||
|
else {
|
||||||
|
strcpy(t, snew);
|
||||||
|
tokptr = NULL;
|
||||||
|
for (i = 0; i < numtokens; i++)
|
||||||
|
*((*argvp) + i) = strtok_r(t, delimiters, &tokptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
*((*argvp) + numtokens) = NULL;
|
||||||
|
return numtokens;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user