fstab-generator: also convert % → %% for What=

Same reasons as the previous patch.
This commit is contained in:
Lennart Poettering 2017-02-08 17:14:58 +01:00
parent d5cc4be28f
commit 19d0833bea
3 changed files with 39 additions and 29 deletions

View File

@ -337,14 +337,12 @@
<varlistentry>
<term><varname>What=</varname></term>
<listitem><para>Takes an absolute path of a device node, file
or other resource to mount. See
<citerefentry project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry>
for details. If this refers to a device node, a dependency on
the respective device unit is automatically created. (See
<citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for more information.) This option is
mandatory.</para></listitem>
<listitem><para>Takes an absolute path of a device node, file or other resource to mount. See <citerefentry
project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry> for details. If
this refers to a device node, a dependency on the respective device unit is automatically created. (See
<citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry> 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 <literal>%%</literal>.</para></listitem>
</varlistentry>
<varlistentry>

View File

@ -170,17 +170,15 @@
<varlistentry>
<term><varname>What=</varname></term>
<listitem><para>Takes an absolute path of a device node or
file to use for paging. See
<citerefentry project='man-pages'><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry>
for details. If this refers to a device node, a dependency on
the respective device unit is automatically created. (See
<citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for more information.) If this refers to a file, a dependency
on the respective mount unit is automatically created. (See
<citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for more information.) This option is
mandatory.</para></listitem>
<listitem><para>Takes an absolute path of a device node or file to use for paging. See <citerefentry
project='man-pages'><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry> for
details. If this refers to a device node, a dependency on the respective device unit is automatically
created. (See
<citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more
information.) If this refers to a file, a dependency on the respective mount unit is automatically
created. (See <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>
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 <literal>%%</literal>.</para></listitem>
</varlistentry>
<varlistentry>

View File

@ -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);