conf-parse: add generic parser for strv
This commit is contained in:
parent
07232470c8
commit
57d42a5f66
|
@ -9,6 +9,7 @@
|
||||||
#include "conf-parser.h"
|
#include "conf-parser.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "macro.h"
|
#include "macro.h"
|
||||||
|
#include "strv.h"
|
||||||
|
|
||||||
#define WHITESPACE " \t\n"
|
#define WHITESPACE " \t\n"
|
||||||
#define COMMENTS "#;\n"
|
#define COMMENTS "#;\n"
|
||||||
|
@ -319,3 +320,51 @@ int config_parse_string(
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int config_parse_strv(
|
||||||
|
const char *filename,
|
||||||
|
unsigned line,
|
||||||
|
const char *section,
|
||||||
|
const char *lvalue,
|
||||||
|
const char *rvalue,
|
||||||
|
void *data,
|
||||||
|
void *userdata) {
|
||||||
|
|
||||||
|
char*** sv = data;
|
||||||
|
char **n;
|
||||||
|
char *w;
|
||||||
|
unsigned k;
|
||||||
|
size_t l;
|
||||||
|
char *state;
|
||||||
|
|
||||||
|
assert(filename);
|
||||||
|
assert(lvalue);
|
||||||
|
assert(rvalue);
|
||||||
|
assert(data);
|
||||||
|
|
||||||
|
k = strv_length(*sv);
|
||||||
|
FOREACH_WORD(w, &l, rvalue, state)
|
||||||
|
k++;
|
||||||
|
|
||||||
|
if (!(n = new(char*, k+1)))
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
for (k = 0; (*sv)[k]; k++)
|
||||||
|
n[k] = (*sv)[k];
|
||||||
|
FOREACH_WORD(w, &l, rvalue, state)
|
||||||
|
if (!(n[k++] = strndup(w, l)))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
n[k] = NULL;
|
||||||
|
free(*sv);
|
||||||
|
*sv = n;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
for (; k > 0; k--)
|
||||||
|
free(n[k-1]);
|
||||||
|
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
|
@ -29,5 +29,6 @@ int config_parse_unsigned(const char *filename, unsigned line, const char *secti
|
||||||
int config_parse_size(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
|
int config_parse_size(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
|
||||||
int config_parse_bool(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
|
int config_parse_bool(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
|
||||||
int config_parse_string(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
|
int config_parse_string(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
|
||||||
|
int config_parse_strv(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue