diff options
author | Lennart Poettering <lennart@poettering.net> | 2017-09-14 16:49:09 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-14 16:49:09 +0200 |
commit | 60c776fd756384b62d3c0ec8b1d000a898767347 (patch) | |
tree | 8241b4d4409922a81e8239b9443c91ffcfa8ef5e | |
parent | dbbf424c8b77c1649e822c20c0b1fee1d2cfd93d (diff) | |
parent | 0fe50629750238b52b8b78184dbb0e7623a4d18e (diff) | |
download | systemd-60c776fd756384b62d3c0ec8b1d000a898767347.tar.gz |
Merge pull request #6746 from yuwata/parse-empty-string
allow to input empty string to config_parse_xxx()
-rw-r--r-- | man/systemd.socket.xml | 4 | ||||
-rw-r--r-- | src/core/load-fragment.c | 17 | ||||
-rw-r--r-- | src/shared/conf-parser.c | 6 |
3 files changed, 25 insertions, 2 deletions
diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml index 1d20a8f7f7..1409b0c5f4 100644 --- a/man/systemd.socket.xml +++ b/man/systemd.socket.xml @@ -803,8 +803,8 @@ is used, only one AF_UNIX socket in the file system or one FIFO may be configured for the socket unit. Use this option to manage one or more symlinked alias names for a socket, binding - their lifecycle together. Defaults to the empty - list.</para></listitem> + their lifecycle together. If the empty string is assigned, the + list of paths is reset. Defaults to the empty list.</para></listitem> </varlistentry> <varlistentry> diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 7fa1bafaef..4d0a0bb142 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -283,6 +283,23 @@ int config_parse_unit_path_strv_printf( assert(rvalue); assert(u); + if (isempty(rvalue)) { + char **empty; + + /* Empty assignment resets the list. As a special rule + * we actually fill in a real empty array here rather + * than NULL, since some code wants to know if + * something was set at all... */ + empty = new0(char*, 1); + if (!empty) + return log_oom(); + + strv_free(*x); + *x = empty; + + return 0; + } + for (p = rvalue;;) { _cleanup_free_ char *word = NULL, *k = NULL; diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index 8b01b3bf73..96618fbb92 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -725,6 +725,11 @@ int config_parse_path( assert(rvalue); assert(data); + if (isempty(rvalue)) { + n = NULL; + goto finalize; + } + if (!utf8_is_valid(rvalue)) { log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, rvalue); return fatal ? -ENOEXEC : 0; @@ -743,6 +748,7 @@ int config_parse_path( path_kill_slashes(n); +finalize: free(*s); *s = n; |