79 lines
1.3 KiB
C
79 lines
1.3 KiB
C
#include <string.h>
|
|
#include <assert.h>
|
|
#include "read_xml_util.h"
|
|
#include "read_settings.h"
|
|
|
|
static int process_settings(ezxml_t Cur, char ** outv)
|
|
{
|
|
int count = 0;
|
|
|
|
if (!Cur)
|
|
return(0);
|
|
|
|
while (Cur->attr[count])
|
|
{
|
|
if (outv)
|
|
{
|
|
if (! (count % 2))
|
|
{
|
|
outv[count] = (char *)my_malloc(strlen(Cur->attr[count]) + 3);
|
|
strcpy(&outv[count][2], Cur->attr[count]);
|
|
outv[count][0] = outv[count][1] = '-';
|
|
}
|
|
else
|
|
outv[count] = Cur->attr[count];
|
|
}
|
|
count++;
|
|
}
|
|
|
|
Cur = Cur->child;
|
|
|
|
while (Cur)
|
|
{
|
|
if (outv)
|
|
{
|
|
outv[count] = (char *)my_malloc(strlen(Cur->name) + 3);
|
|
strcpy(&outv[count][2], Cur->name);
|
|
outv[count][0] = outv[count][1] = '-';
|
|
}
|
|
count++;
|
|
|
|
if (strlen(Cur->txt))
|
|
{
|
|
if (outv) outv[count] = Cur->txt;
|
|
count++;
|
|
}
|
|
|
|
Cur = Cur->ordered;
|
|
}
|
|
|
|
return count;
|
|
}
|
|
|
|
int read_settings_file(char * file_name, char *** outv)
|
|
{
|
|
ezxml_t Cur;
|
|
int count;
|
|
|
|
Cur = ezxml_parse_file(file_name);
|
|
assert(*outv == NULL);
|
|
assert(! strcmp("settings",Cur->name));
|
|
Cur = FindElement(Cur, "arguments", FALSE);
|
|
|
|
count = process_settings(Cur, *outv);
|
|
|
|
/* prepend the settings file name */
|
|
count++;
|
|
|
|
*outv = (char **)my_malloc(count * sizeof(char *));
|
|
|
|
(*outv)[0] = my_strdup(file_name);
|
|
|
|
if (count)
|
|
{
|
|
process_settings(Cur, &((*outv)[1]));
|
|
}
|
|
|
|
return(count);
|
|
}
|