X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fconf-parser.c;h=d27b1b7eeac40206888376c216a443932cb33c23;hb=76cf10dab7a36653a159f0e87c46a13df494474f;hp=f39a4cd1fd08a9dee9a3810b828c3366025a3ccf;hpb=ca37242e52cbf90d6cdb3b26b2986b11ed1d5e91;p=elogind.git diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index f39a4cd1f..d27b1b7ee 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -565,90 +565,57 @@ int config_parse_bool(const char* unit, return 0; } -int config_parse_show_status(const char* unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_string( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { - int k; - ShowStatus *b = data; + char **s = data, *n; assert(filename); assert(lvalue); assert(rvalue); assert(data); - k = parse_show_status(rvalue, b); - if (k < 0) { - log_syntax(unit, LOG_ERR, filename, line, -k, - "Failed to parse show status setting, ignoring: %s", rvalue); + if (!utf8_is_valid(rvalue)) { + log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue); return 0; } - return 0; -} - -int config_parse_string(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { - - char **s = data; - char *n; - - assert(filename); - assert(lvalue); - assert(rvalue); - assert(data); - - n = strdup(rvalue); - if (!n) - return log_oom(); - - if (!utf8_is_valid(n)) { - log_syntax(unit, LOG_ERR, filename, line, EINVAL, - "String is not UTF-8 clean, ignoring assignment: %s", rvalue); - free(n); - return 0; + if (isempty(rvalue)) + n = NULL; + else { + n = strdup(rvalue); + if (!n) + return log_oom(); } free(*s); - if (*n) - *s = n; - else { - free(n); - *s = NULL; - } + *s = n; return 0; } -int config_parse_path(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_path( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { - char **s = data; - char *n; - int offset; + char **s = data, *n; assert(filename); assert(lvalue); @@ -656,16 +623,12 @@ int config_parse_path(const char *unit, assert(data); if (!utf8_is_valid(rvalue)) { - log_syntax(unit, LOG_ERR, filename, line, EINVAL, - "Path is not UTF-8 clean, ignoring assignment: %s", rvalue); + log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue); return 0; } - offset = rvalue[0] == '-' && (streq(lvalue, "InaccessibleDirectories") || - streq(lvalue, "ReadOnlyDirectories")); - if (!path_is_absolute(rvalue + offset)) { - log_syntax(unit, LOG_ERR, filename, line, EINVAL, - "Not an absolute path, ignoring: %s", rvalue); + if (!path_is_absolute(rvalue)) { + log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Not an absolute path, ignoring: %s", rvalue); return 0; } @@ -718,77 +681,18 @@ int config_parse_strv(const char *unit, } FOREACH_WORD_QUOTED(w, l, rvalue, state) { - _cleanup_free_ char *n; + char *n; n = cunescape_length(w, l); if (!n) return log_oom(); if (!utf8_is_valid(n)) { - log_syntax(unit, LOG_ERR, filename, line, EINVAL, - "String is not UTF-8 clean, ignoring: %s", rvalue); - continue; - } - - r = strv_extend(sv, n); - if (r < 0) - return log_oom(); - } - - return 0; -} - -int config_parse_path_strv(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { - - char*** sv = data, *w, *state; - size_t l; - int r; - - assert(filename); - assert(lvalue); - assert(rvalue); - assert(data); - - if (isempty(rvalue)) { - /* Empty assignment resets the list */ - strv_free(*sv); - *sv = NULL; - return 0; - } - - FOREACH_WORD_QUOTED(w, l, rvalue, state) { - _cleanup_free_ char *n; - int offset; - - n = strndup(w, l); - if (!n) - return log_oom(); - - if (!utf8_is_valid(n)) { - log_syntax(unit, LOG_ERR, filename, line, EINVAL, - "Path is not UTF-8 clean, ignoring assignment: %s", rvalue); - continue; - } - - offset = n[0] == '-' && (streq(lvalue, "InaccessibleDirectories") || - streq(lvalue, "ReadOnlyDirectories")); - if (!path_is_absolute(n + offset)) { - log_syntax(unit, LOG_ERR, filename, line, EINVAL, - "Not an absolute path, ignoring: %s", rvalue); + log_invalid_utf8(unit, LOG_ERR, filename, line, EINVAL, rvalue); continue; } - path_kill_slashes(n); - r = strv_extend(sv, n); + r = strv_consume(sv, n); if (r < 0) return log_oom(); } @@ -896,88 +800,3 @@ int config_parse_log_level( *o = (*o & LOG_FACMASK) | x; return 0; } - -int config_parse_set_status(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { - - char *w; - size_t l; - char *state; - int r; - ExitStatusSet *status_set = data; - - assert(filename); - assert(lvalue); - assert(rvalue); - assert(data); - - if (isempty(rvalue)) { - /* Empty assignment resets the list */ - - set_free(status_set->signal); - set_free(status_set->code); - - status_set->signal = status_set->code = NULL; - return 0; - } - - FOREACH_WORD(w, l, rvalue, state) { - int val; - char *temp; - - temp = strndup(w, l); - if (!temp) - return log_oom(); - - r = safe_atoi(temp, &val); - if (r < 0) { - val = signal_from_string_try_harder(temp); - free(temp); - - if (val > 0) { - r = set_ensure_allocated(&status_set->signal, trivial_hash_func, trivial_compare_func); - if (r < 0) - return log_oom(); - - r = set_put(status_set->signal, INT_TO_PTR(val)); - if (r < 0) { - log_syntax(unit, LOG_ERR, filename, line, -r, - "Unable to store: %s", w); - return r; - } - } else { - log_syntax(unit, LOG_ERR, filename, line, -val, - "Failed to parse value, ignoring: %s", w); - return 0; - } - } else { - free(temp); - - if (val < 0 || val > 255) - log_syntax(unit, LOG_ERR, filename, line, ERANGE, - "Value %d is outside range 0-255, ignoring", val); - else { - r = set_ensure_allocated(&status_set->code, trivial_hash_func, trivial_compare_func); - if (r < 0) - return log_oom(); - - r = set_put(status_set->code, INT_TO_PTR(val)); - if (r < 0) { - log_syntax(unit, LOG_ERR, filename, line, -r, - "Unable to store: %s", w); - return r; - } - } - } - } - - return 0; -}