busctl: when formatting message contents, make sure to print all whitespaces
authorLennart Poettering <lennart@poettering.net>
Sat, 13 Feb 2016 19:32:11 +0000 (20:32 +0100)
committerLennart Poettering <lennart@poettering.net>
Sat, 13 Feb 2016 19:33:49 +0000 (20:33 +0100)
Previously we'd miss a necessary whitespace at the end of arrays, if more data
was following.

src/libsystemd/sd-bus/busctl.c

index 35fabf0..772ab62 100644 (file)
@@ -501,8 +501,10 @@ static int format_cmdline(sd_bus_message *m, FILE *f, bool needs_space) {
                 } basic;
 
                 r = sd_bus_message_peek_type(m, &type, &contents);
-                if (r <= 0)
+                if (r < 0)
                         return r;
+                if (r == 0)
+                        return needs_space;
 
                 if (bus_type_is_container(type) > 0) {
 
@@ -533,18 +535,23 @@ static int format_cmdline(sd_bus_message *m, FILE *f, bool needs_space) {
                                         fputc(' ', f);
 
                                 fprintf(f, "%u", n);
+                                needs_space = true;
+
                         } else if (type == SD_BUS_TYPE_VARIANT) {
 
                                 if (needs_space)
                                         fputc(' ', f);
 
                                 fprintf(f, "%s", contents);
+                                needs_space = true;
                         }
 
-                        r = format_cmdline(m, f, needs_space || IN_SET(type, SD_BUS_TYPE_ARRAY, SD_BUS_TYPE_VARIANT));
+                        r = format_cmdline(m, f, needs_space);
                         if (r < 0)
                                 return r;
 
+                        needs_space = r > 0;
+
                         r = sd_bus_message_exit_container(m);
                         if (r < 0)
                                 return r;