[systemd-devel] [PATCH v2] tmpfiles: port to unquote_many_words()
Lennart Poettering
lennart at poettering.net
Tue Mar 10 08:11:38 PDT 2015
On Mon, 09.03.15 15:11, daurnimator (quae at daurnimator.com) wrote:
Applied! Thanks!
(Usually we prefer commits with proper real name attributions, though...)
> ---
> TODO | 2 --
> man/tmpfiles.d.xml | 2 ++
> src/tmpfiles/tmpfiles.c | 21 +++++++--------------
> 3 files changed, 9 insertions(+), 16 deletions(-)
>
> diff --git a/TODO b/TODO
> index 60efaaf..4d5e2b6 100644
> --- a/TODO
> +++ b/TODO
> @@ -226,8 +226,6 @@ Features:
>
> * exponential backoff in timesyncd and resolved when we cannot reach a server
>
> -* tmpfiles: port to unquote_many_words(), similar to sysusers
> -
> * unquote_many_words() should probably be used by a lot of code that
> currently uses FOREACH_WORD and friends. For example, most conf
> parsing callbacks should use it.
> diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
> index 4bd0fcf..bc98d8b 100644
> --- a/man/tmpfiles.d.xml
> +++ b/man/tmpfiles.d.xml
> @@ -118,6 +118,8 @@
> d /run/user 0755 root root 10d -
> L /tmp/foobar - - - - /dev/null</programlisting>
>
> + <para>Fields may be enclosed within quotes and contain C-style escapes.</para>
> +
> <refsect2>
> <title>Type</title>
>
> diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
> index 652fe5f..10c5a63 100644
> --- a/src/tmpfiles/tmpfiles.c
> +++ b/src/tmpfiles/tmpfiles.c
> @@ -1506,23 +1506,25 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
> _cleanup_(item_free_contents) Item i = {};
> ItemArray *existing;
> Hashmap *h;
> - int r, c = -1, pos;
> + int r, pos;
> bool force = false, boot = false;
>
> assert(fname);
> assert(line >= 1);
> assert(buffer);
>
> - r = sscanf(buffer,
> - "%ms %ms %ms %ms %ms %ms %n",
> + r = unquote_many_words(&buffer,
> &action,
> &path,
> &mode,
> &user,
> &group,
> &age,
> - &c);
> - if (r < 2) {
> + &i.argument,
> + NULL);
> + if (r < 0)
> + return log_error_errno(r, "[%s:%u] Failed to parse line: %m", fname, line);
> + else if (r < 2) {
> log_error("[%s:%u] Syntax error.", fname, line);
> return -EIO;
> }
> @@ -1559,15 +1561,6 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) {
> return r;
> }
>
> - if (c >= 0) {
> - c += strspn(buffer+c, WHITESPACE);
> - if (buffer[c] != 0 && (buffer[c] != '-' || buffer[c+1] != 0)) {
> - i.argument = unquote(buffer+c, "\"");
> - if (!i.argument)
> - return log_oom();
> - }
> - }
> -
> switch (i.type) {
>
> case CREATE_FILE:
> --
> 2.3.1
>
> _______________________________________________
> systemd-devel mailing list
> systemd-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list