summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2017-09-14 16:49:09 +0200
committerGitHub <noreply@github.com>2017-09-14 16:49:09 +0200
commit60c776fd756384b62d3c0ec8b1d000a898767347 (patch)
tree8241b4d4409922a81e8239b9443c91ffcfa8ef5e
parentdbbf424c8b77c1649e822c20c0b1fee1d2cfd93d (diff)
parent0fe50629750238b52b8b78184dbb0e7623a4d18e (diff)
downloadsystemd-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.xml4
-rw-r--r--src/core/load-fragment.c17
-rw-r--r--src/shared/conf-parser.c6
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;