Re: [systemd-devel] [PATCH v2] tmpfiles: port to unquote_many_words()

2015-03-10 Thread Lennart Poettering
On Mon, 09.03.15 15:11, daurnimator (q...@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
  
 +paraFields may be enclosed within quotes and contain C-style 
 escapes./para
 +
  refsect2
titleType/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@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Lennart

-- 
Lennart Poettering, Red Hat
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


[systemd-devel] [PATCH v2] tmpfiles: port to unquote_many_words()

2015-03-09 Thread daurnimator
---
 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
 
+paraFields may be enclosed within quotes and contain C-style 
escapes./para
+
 refsect2
   titleType/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@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel