[systemd-devel] [PATCH 08/17] journalctl: print proper IDs with --header

Zbigniew Jędrzejewski-Szmek zbyszek at in.waw.pl
Fri Jun 7 21:22:40 PDT 2013


The same buffer was used for two different IDs, messing up
the output.

The same idea of using alloca() is applied in a few other
places.
---
 src/journal/journal-file.c    | 9 ++++-----
 src/journal/journald-server.c | 3 +--
 src/shared/logs-show.c        | 9 ++++-----
 3 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
index 3cb8f79..073e4a4 100644
--- a/src/journal/journal-file.c
+++ b/src/journal/journal-file.c
@@ -2271,7 +2271,6 @@ fail:
 }
 
 void journal_file_print_header(JournalFile *f) {
-        char a[33], b[33], c[33];
         char x[FORMAT_TIMESTAMP_MAX], y[FORMAT_TIMESTAMP_MAX];
         struct stat st;
         char bytes[FORMAT_BYTES_MAX];
@@ -2298,10 +2297,10 @@ void journal_file_print_header(JournalFile *f) {
                "Objects: %"PRIu64"\n"
                "Entry Objects: %"PRIu64"\n",
                f->path,
-               sd_id128_to_string(f->header->file_id, a),
-               sd_id128_to_string(f->header->machine_id, b),
-               sd_id128_to_string(f->header->boot_id, c),
-               sd_id128_to_string(f->header->seqnum_id, c),
+               sd_id128_to_string(f->header->file_id, alloca(33)),
+               sd_id128_to_string(f->header->machine_id, alloca(33)),
+               sd_id128_to_string(f->header->boot_id, alloca(33)),
+               sd_id128_to_string(f->header->seqnum_id, alloca(33)),
                f->header->state == STATE_OFFLINE ? "OFFLINE" :
                f->header->state == STATE_ONLINE ? "ONLINE" :
                f->header->state == STATE_ARCHIVED ? "ARCHIVED" : "UNKNOWN",
diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
index 0bf557c..d46b290 100644
--- a/src/journal/journald-server.c
+++ b/src/journal/journald-server.c
@@ -90,7 +90,6 @@ DEFINE_STRING_TABLE_LOOKUP(split_mode, SplitMode);
 DEFINE_CONFIG_PARSE_ENUM(config_parse_split_mode, split_mode, SplitMode, "Failed to parse split mode setting");
 
 static uint64_t available_space(Server *s) {
-        char ids[33];
         _cleanup_free_ char *p = NULL;
         const char *f;
         sd_id128_t machine;
@@ -120,7 +119,7 @@ static uint64_t available_space(Server *s) {
 
         assert(m);
 
-        p = strappend(f, sd_id128_to_string(machine, ids));
+        p = strappend(f, sd_id128_to_string(machine, alloca(33)));
         if (!p)
                 return 0;
 
diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
index a6cd9f6..e58824d 100644
--- a/src/shared/logs-show.c
+++ b/src/shared/logs-show.c
@@ -363,7 +363,6 @@ static int output_export(
                 OutputFlags flags) {
 
         sd_id128_t boot_id;
-        char sid[33];
         int r;
         usec_t realtime, monotonic;
         _cleanup_free_ char *cursor = NULL;
@@ -400,7 +399,7 @@ static int output_export(
                 cursor,
                 (unsigned long long) realtime,
                 (unsigned long long) monotonic,
-                sd_id128_to_string(boot_id, sid));
+                sd_id128_to_string(boot_id, alloca(33)));
 
         SD_JOURNAL_FOREACH_DATA(j, data, length) {
 
@@ -499,7 +498,7 @@ static int output_json(
         const void *data;
         size_t length;
         sd_id128_t boot_id;
-        char sid[33], *k;
+        char *k;
         int r;
         Hashmap *h = NULL;
         bool done, separator;
@@ -536,7 +535,7 @@ static int output_json(
                         cursor,
                         (unsigned long long) realtime,
                         (unsigned long long) monotonic,
-                        sd_id128_to_string(boot_id, sid));
+                        sd_id128_to_string(boot_id, alloca(33)));
         else {
                 if (mode == OUTPUT_JSON_SSE)
                         fputs("data: ", f);
@@ -549,7 +548,7 @@ static int output_json(
                         cursor,
                         (unsigned long long) realtime,
                         (unsigned long long) monotonic,
-                        sd_id128_to_string(boot_id, sid));
+                        sd_id128_to_string(boot_id, alloca(33)));
         }
 
         h = hashmap_new(string_hash_func, string_compare_func);
-- 
1.8.2.562.g931e949



More information about the systemd-devel mailing list