diff options
Diffstat (limited to 'src/logs-show.c')
-rw-r--r-- | src/logs-show.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/logs-show.c b/src/logs-show.c index d067ab818e..decb89b6df 100644 --- a/src/logs-show.c +++ b/src/logs-show.c @@ -64,6 +64,7 @@ static int parse_field(const void *data, size_t length, const char *field, char return -ENOMEM; } + free(*target); *target = buf; *target_size = nl; @@ -92,8 +93,8 @@ static int output_short(sd_journal *j, unsigned line, bool show_all) { const void *data; size_t length; size_t n = 0; - char *hostname = NULL, *identifier = NULL, *comm = NULL, *pid = NULL, *message = NULL; - size_t hostname_len = 0, identifier_len = 0, comm_len = 0, pid_len = 0, message_len = 0; + char *hostname = NULL, *identifier = NULL, *comm = NULL, *pid = NULL, *fake_pid = NULL, *message = NULL; + size_t hostname_len = 0, identifier_len = 0, comm_len = 0, pid_len = 0, fake_pid_len = 0, message_len = 0; assert(j); @@ -123,6 +124,12 @@ static int output_short(sd_journal *j, unsigned line, bool show_all) { else if (r > 0) continue; + r = parse_field(data, length, "SYSLOG_PID=", &fake_pid, &fake_pid_len); + if (r < 0) + goto finish; + else if (r > 0) + continue; + r = parse_field(data, length, "MESSAGE=", &message, &message_len); if (r < 0) goto finish; @@ -164,6 +171,9 @@ static int output_short(sd_journal *j, unsigned line, bool show_all) { if (pid && shall_print(show_all, pid, pid_len)) { printf("[%.*s]", (int) pid_len, pid); n += pid_len + 2; + } else if (fake_pid && shall_print(show_all, fake_pid, fake_pid_len)) { + printf("[%.*s]", (int) fake_pid_len, fake_pid); + n += fake_pid_len + 2; } if (show_all) @@ -193,6 +203,7 @@ finish: free(identifier); free(comm); free(pid); + free(fake_pid); free(message); return r; |