diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
index 8d9517a913..bb372d788a 100644
--- a/man/systemd.mount.xml
+++ b/man/systemd.mount.xml
@@ -337,14 +337,12 @@
What=
- Takes an absolute path of a device node, file
- or other resource to mount. See
- mount8
- for details. If this refers to a device node, a dependency on
- the respective device unit is automatically created. (See
- systemd.device5
- for more information.) This option is
- mandatory.
+ Takes an absolute path of a device node, file or other resource to mount. See mount8 for details. If
+ this refers to a device node, a dependency on the respective device unit is automatically created. (See
+ systemd.device5 for more
+ information.) This option is mandatory. Note that the usual specifier expansion is applied to this setting,
+ literal percent characters should hence be written as %%.
diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml
index 7f82d69725..d2c2027228 100644
--- a/man/systemd.swap.xml
+++ b/man/systemd.swap.xml
@@ -170,17 +170,15 @@
What=
- Takes an absolute path of a device node or
- file to use for paging. See
- swapon8
- for details. If this refers to a device node, a dependency on
- the respective device unit is automatically created. (See
- systemd.device5
- for more information.) If this refers to a file, a dependency
- on the respective mount unit is automatically created. (See
- systemd.mount5
- for more information.) This option is
- mandatory.
+ Takes an absolute path of a device node or file to use for paging. See swapon8 for
+ details. If this refers to a device node, a dependency on the respective device unit is automatically
+ created. (See
+ systemd.device5 for more
+ information.) If this refers to a file, a dependency on the respective mount unit is automatically
+ created. (See systemd.mount5
+ for more information.) This option is mandatory. Note that the usual specifier expansion is applied to this
+ setting, literal percent characters should hence be written as %%.
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
index 00c6b2d37b..d97bafd1fb 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -74,6 +74,17 @@ static int write_options(FILE *f, const char *options) {
return 1;
}
+static int write_what(FILE *f, const char *what) {
+ _cleanup_free_ char *w = NULL;
+
+ w = strreplace(what, "%", "%%");
+ if (!w)
+ return log_oom();
+
+ fprintf(f, "What=%s\n", w);
+ return 1;
+}
+
static int add_swap(
const char *what,
struct mntent *me,
@@ -113,14 +124,15 @@ static int add_swap(
"Failed to create unit file %s: %m",
unit);
- fprintf(f,
- "# Automatically generated by systemd-fstab-generator\n\n"
- "[Unit]\n"
- "SourcePath=/etc/fstab\n"
- "Documentation=man:fstab(5) man:systemd-fstab-generator(8)\n\n"
- "[Swap]\n"
- "What=%s\n",
- what);
+ fputs("# Automatically generated by systemd-fstab-generator\n\n"
+ "[Unit]\n"
+ "SourcePath=/etc/fstab\n"
+ "Documentation=man:fstab(5) man:systemd-fstab-generator(8)\n\n"
+ "[Swap]\n", f);
+
+ r = write_what(f, what);
+ if (r < 0)
+ return r;
r = write_options(f, me->mnt_opts);
if (r < 0)
@@ -349,11 +361,13 @@ static int add_mount(
fprintf(f,
"\n"
"[Mount]\n"
- "What=%s\n"
"Where=%s\n",
- what,
where);
+ r = write_what(f, what);
+ if (r < 0)
+ return r;
+
if (!isempty(fstype) && !streq(fstype, "auto"))
fprintf(f, "Type=%s\n", fstype);