summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2019-11-27 12:05:57 +0100
committerLennart Poettering <lennart@poettering.net>2019-11-27 12:32:14 +0100
commit540ac9338ea6c8fc57f99384d19bf8da4f615cd4 (patch)
treec8766c4986f8136365f2e32d7f942e537afe5be6
parentcore: write out correct field name when creating transient service units (diff)
downloadsystemd-540ac9338ea6c8fc57f99384d19bf8da4f615cd4.tar.xz
systemd-540ac9338ea6c8fc57f99384d19bf8da4f615cd4.zip
core: prefer non-@ syntax for ExecStart=
If the zeroth and first argv[] element on the same we don't need to generate the "@" syntax for ExecStart= and friends.
-rw-r--r--src/core/dbus-execute.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c
index c35b486408..1d0bc1ede3 100644
--- a/src/core/dbus-execute.c
+++ b/src/core/dbus-execute.c
@@ -1098,22 +1098,28 @@ int bus_set_transient_exec_command(
fprintf(f, "%s=\n", name);
LIST_FOREACH(command, c, *exec_command) {
- _cleanup_free_ char *a = NULL, *t = NULL, *exec_chars = NULL;
- const char *p;
+ _cleanup_free_ char *a = NULL, *exec_chars = NULL;
- p = unit_escape_setting(c->path, UNIT_ESCAPE_C|UNIT_ESCAPE_SPECIFIERS, &t);
- if (!p)
+ exec_chars = exec_command_flags_to_exec_chars(c->flags);
+ if (!exec_chars)
return -ENOMEM;
a = unit_concat_strv(c->argv, UNIT_ESCAPE_C|UNIT_ESCAPE_SPECIFIERS);
if (!a)
return -ENOMEM;
- exec_chars = exec_command_flags_to_exec_chars(c->flags);
- if (!exec_chars)
- return -ENOMEM;
+ if (streq_ptr(c->path, c->argv ? c->argv[0] : NULL))
+ fprintf(f, "%s=%s%s\n", name, exec_chars, a);
+ else {
+ _cleanup_free_ char *t = NULL;
+ const char *p;
+
+ p = unit_escape_setting(c->path, UNIT_ESCAPE_C|UNIT_ESCAPE_SPECIFIERS, &t);
+ if (!p)
+ return -ENOMEM;
- fprintf(f, "%s=%s@%s %s\n", name, exec_chars, p, a);
+ fprintf(f, "%s=%s@%s %s\n", name, exec_chars, p, a);
+ }
}
r = fflush_and_check(f);