mirror of
https://github.com/owntone/owntone-server.git
synced 2025-01-14 16:25:03 -05:00
start toward multi-entry terms
This commit is contained in:
parent
b8c423321a
commit
5020ed6884
72
src/conf.c
72
src/conf.c
@ -57,15 +57,8 @@ static pthread_mutex_t conf_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|||||||
|
|
||||||
#define CONF_T_INT 0
|
#define CONF_T_INT 0
|
||||||
#define CONF_T_STRING 1
|
#define CONF_T_STRING 1
|
||||||
#define CONF_T_EXISTPATH 2
|
#define CONF_T_EXISTPATH 2 /** a path that must exist */
|
||||||
|
#define CONF_T_MULTICOMMA 3 /** multiple entries separated by commas */
|
||||||
/** Forwards */
|
|
||||||
static int _conf_verify(LL_HANDLE pll);
|
|
||||||
static LL_ITEM *_conf_fetch_item(LL_HANDLE pll, char *section, char *term);
|
|
||||||
static int _conf_exists(LL_HANDLE pll, char *section, char *term);
|
|
||||||
static void _conf_lock(void);
|
|
||||||
static void _conf_unlock(void);
|
|
||||||
static int _conf_write(FILE *fp, LL *pll, int sublevel, char *parent);
|
|
||||||
|
|
||||||
typedef struct _CONF_ELEMENTS {
|
typedef struct _CONF_ELEMENTS {
|
||||||
int required;
|
int required;
|
||||||
@ -75,6 +68,15 @@ typedef struct _CONF_ELEMENTS {
|
|||||||
char *term;
|
char *term;
|
||||||
} CONF_ELEMENTS;
|
} CONF_ELEMENTS;
|
||||||
|
|
||||||
|
/** Forwards */
|
||||||
|
static int _conf_verify(LL_HANDLE pll);
|
||||||
|
static LL_ITEM *_conf_fetch_item(LL_HANDLE pll, char *section, char *term);
|
||||||
|
static int _conf_exists(LL_HANDLE pll, char *section, char *term);
|
||||||
|
static void _conf_lock(void);
|
||||||
|
static void _conf_unlock(void);
|
||||||
|
static int _conf_write(FILE *fp, LL *pll, int sublevel, char *parent);
|
||||||
|
static CONF_ELEMENTS *_conf_get_keyinfo(char *section, char *key);
|
||||||
|
|
||||||
static CONF_ELEMENTS conf_elements[] = {
|
static CONF_ELEMENTS conf_elements[] = {
|
||||||
{ 1, 0, CONF_T_STRING,"general","runas" },
|
{ 1, 0, CONF_T_STRING,"general","runas" },
|
||||||
{ 1, 0, CONF_T_EXISTPATH,"general","web_root" },
|
{ 1, 0, CONF_T_EXISTPATH,"general","web_root" },
|
||||||
@ -98,11 +100,40 @@ static CONF_ELEMENTS conf_elements[] = {
|
|||||||
{ 0, 0, CONF_T_STRING,"general","ssc_codectypes" },
|
{ 0, 0, CONF_T_STRING,"general","ssc_codectypes" },
|
||||||
{ 0, 0, CONF_T_STRING,"general","ssc_prog" },
|
{ 0, 0, CONF_T_STRING,"general","ssc_prog" },
|
||||||
{ 0, 0, CONF_T_STRING,"general","password" },
|
{ 0, 0, CONF_T_STRING,"general","password" },
|
||||||
{ 0, 0, CONF_T_STRING,"general","compdirs" },
|
{ 0, 0, CONF_T_MULTICOMMA,"general","compdirs" },
|
||||||
{ 0, 0, CONF_T_STRING,"general","logfile" },
|
{ 0, 0, CONF_T_STRING,"general","logfile" },
|
||||||
{ 0, 0, CONF_T_INT, NULL, NULL }
|
{ 0, 0, CONF_T_INT, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* given a section and key, get the conf_element for it.
|
||||||
|
* right now this is simple, but eventually there might
|
||||||
|
* be more difficult mateches to be made
|
||||||
|
*
|
||||||
|
* @param section section the key was found ind
|
||||||
|
* @param key key we are searching for info on
|
||||||
|
* @returns the CONF_ELEMENT that is the closest match, or
|
||||||
|
* NULL if no match was found.
|
||||||
|
*/
|
||||||
|
CONF_ELEMENTS *_conf_get_keyinfo(char *section, char *key) {
|
||||||
|
CONF_ELEMENTS *pcurrent;
|
||||||
|
int found=0;
|
||||||
|
|
||||||
|
pcurrent = &conf_elements[0];
|
||||||
|
while(pcurrent->section && pcurrent->term) {
|
||||||
|
if((strcasecmp(section,pcurrent->section) != 0) ||
|
||||||
|
(strcasecmp(key,pcurrent->term) != 0)) {
|
||||||
|
pcurrent++;
|
||||||
|
} else {
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return found ? pcurrent : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* lock the conf mutex
|
* lock the conf mutex
|
||||||
*/
|
*/
|
||||||
@ -245,6 +276,8 @@ int conf_read(char *file) {
|
|||||||
int warned_truncate=0;
|
int warned_truncate=0;
|
||||||
int line=0;
|
int line=0;
|
||||||
int ws=0;
|
int ws=0;
|
||||||
|
CONF_ELEMENTS *pce;
|
||||||
|
int key_type;
|
||||||
|
|
||||||
if(conf_main_file) {
|
if(conf_main_file) {
|
||||||
conf_close();
|
conf_close();
|
||||||
@ -381,7 +414,24 @@ int conf_read(char *file) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
ll_add_string(pllcurrent,term,value);
|
|
||||||
|
/* see what kind this is, and act accordingly */
|
||||||
|
pce = _conf_get_keyinfo(section_name,term);
|
||||||
|
key_type = CONF_T_STRING;
|
||||||
|
if(pce)
|
||||||
|
key_type = pce->type;
|
||||||
|
|
||||||
|
switch(key_type) {
|
||||||
|
case CONF_T_MULTICOMMA:
|
||||||
|
break;
|
||||||
|
case CONF_T_INT:
|
||||||
|
case CONF_T_STRING:
|
||||||
|
case CONF_T_EXISTPATH:
|
||||||
|
default:
|
||||||
|
ll_add_string(pllcurrent,term,value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if(comment) {
|
if(comment) {
|
||||||
/* this is an inline comment */
|
/* this is an inline comment */
|
||||||
|
Loading…
Reference in New Issue
Block a user