first attempt at proper service/socket logic

This commit is contained in:
Lennart Poettering
2010-01-26 04:18:44 +01:00
parent 9152c76506
commit 034c6ed7da
32 changed files with 2856 additions and 611 deletions
+33 -2
View File
@@ -337,6 +337,36 @@ int config_parse_string(
return 0;
}
int config_parse_path(
const char *filename,
unsigned line,
const char *section,
const char *lvalue,
const char *rvalue,
void *data,
void *userdata) {
char **s = data;
char *n;
assert(filename);
assert(lvalue);
assert(rvalue);
assert(data);
if (*rvalue != '/') {
log_error("[%s:%u] Not an absolute path: %s", filename, line, rvalue);
return -EINVAL;
}
if (!(n = strdup(rvalue)))
return -ENOMEM;
free(*s);
*s = n;
return 0;
}
int config_parse_strv(
const char *filename,
@@ -360,7 +390,7 @@ int config_parse_strv(
assert(data);
k = strv_length(*sv);
FOREACH_WORD(w, &l, rvalue, state)
FOREACH_WORD_QUOTED(w, l, rvalue, state)
k++;
if (!(n = new(char*, k+1)))
@@ -368,7 +398,7 @@ int config_parse_strv(
for (k = 0; (*sv)[k]; k++)
n[k] = (*sv)[k];
FOREACH_WORD(w, &l, rvalue, state)
FOREACH_WORD_QUOTED(w, l, rvalue, state)
if (!(n[k++] = strndup(w, l)))
goto fail;
@@ -381,6 +411,7 @@ int config_parse_strv(
fail:
for (; k > 0; k--)
free(n[k-1]);
free(n);
return -ENOMEM;
}