X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Flogs-show.c;h=068da465d9fcdb816c9230cbe6cc6d251b110939;hb=50a96c06b50537a9ef00837c09dbc0cafe8d8809;hp=c2495056d77005f809557b0e6d7cf9949d9ce7f1;hpb=0a6f50c0afdfc434b492493bd9efab20cbee8623;p=elogind.git diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c index c2495056d..068da465d 100644 --- a/src/shared/logs-show.c +++ b/src/shared/logs-show.c @@ -20,9 +20,7 @@ ***/ #include -#include #include -#include #include #include #include @@ -32,8 +30,10 @@ #include "util.h" #include "utf8.h" #include "hashmap.h" -#include "fileio.h" #include "journal-internal.h" +#include "formats-util.h" +#include "process-util.h" +#include "terminal-util.h" /* up to three lines (each up to 100 characters), or 300 characters, whichever is less */ @@ -272,10 +272,12 @@ static int output_short( } if (r < 0) - return r; + return log_error_errno(r, "Failed to get journal fields: %m"); - if (!message) + if (!message) { + log_debug("Skipping message without MESSAGE= field."); return 0; + } if (!(flags & OUTPUT_SHOW_ALL)) strip_tab_ansi(&message, &message_len); @@ -408,11 +410,9 @@ static int output_verbose( r = sd_journal_get_data(j, "_SOURCE_REALTIME_TIMESTAMP", &data, &length); if (r == -ENOENT) log_debug("Source realtime timestamp not found"); - else if (r < 0) { - log_full(r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_ERR, - "Failed to get source realtime timestamp: %s", strerror(-r)); - return r; - } else { + else if (r < 0) + return log_full_errno(r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_ERR, r, "Failed to get source realtime timestamp: %m"); + else { _cleanup_free_ char *value = NULL; size_t size; @@ -428,11 +428,8 @@ static int output_verbose( if (r < 0) { r = sd_journal_get_realtime_usec(j, &realtime); - if (r < 0) { - log_full(r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_ERR, - "Failed to get realtime timestamp: %s", strerror(-r)); - return r; - } + if (r < 0) + return log_full_errno(r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_ERR, r, "Failed to get realtime timestamp: %m"); } r = sd_journal_get_cursor(j, &cursor); @@ -682,7 +679,7 @@ static int output_json( h = hashmap_new(&string_hash_ops); if (!h) - return -ENOMEM; + return log_oom(); /* First round, iterate through the entry and count how often each field appears */ JOURNAL_FOREACH_DATA_RETVAL(j, data, length, r) { @@ -700,7 +697,7 @@ static int output_json( n = strndup(data, eq - (const char*) data); if (!n) { - r = -ENOMEM; + r = log_oom(); goto finish; } @@ -709,13 +706,16 @@ static int output_json( r = hashmap_put(h, n, UINT_TO_PTR(1)); if (r < 0) { free(n); + log_oom(); goto finish; } } else { r = hashmap_update(h, n, UINT_TO_PTR(u + 1)); free(n); - if (r < 0) + if (r < 0) { + log_oom(); goto finish; + } } } @@ -753,7 +753,7 @@ static int output_json( n = strndup(data, m); if (!n) { - r = -ENOMEM; + r = log_oom(); goto finish; } @@ -948,11 +948,11 @@ static int show_journal(FILE *f, /* Seek to end */ r = sd_journal_seek_tail(j); if (r < 0) - goto finish; + return log_error_errno(r, "Failed to seek to tail: %m"); r = sd_journal_previous_skip(j, how_many); if (r < 0) - goto finish; + return log_error_errno(r, "Failed to skip previous: %m"); for (;;) { for (;;) { @@ -961,7 +961,7 @@ static int show_journal(FILE *f, if (need_seek) { r = sd_journal_next(j); if (r < 0) - goto finish; + return log_error_errno(r, "Failed to iterate through journal: %m"); } if (r == 0) @@ -977,7 +977,7 @@ static int show_journal(FILE *f, if (r == -ESTALE) continue; else if (r < 0) - goto finish; + return log_error_errno(r, "Failed to get journal time: %m"); if (usec < not_before) continue; @@ -988,22 +988,22 @@ static int show_journal(FILE *f, r = output_journal(f, j, mode, n_columns, flags, ellipsized); if (r < 0) - goto finish; + return r; } if (warn_cutoff && line < how_many && not_before > 0) { sd_id128_t boot_id; - usec_t cutoff; + usec_t cutoff = 0; /* Check whether the cutoff line is too early */ r = sd_id128_get_boot(&boot_id); if (r < 0) - goto finish; + return log_error_errno(r, "Failed to get boot id: %m"); r = sd_journal_get_cutoff_monotonic_usec(j, boot_id, &cutoff, NULL); if (r < 0) - goto finish; + return log_error_errno(r, "Failed to get journal cutoff time: %m"); if (r > 0 && not_before < cutoff) { maybe_print_begin_newline(f, &flags); @@ -1018,12 +1018,11 @@ static int show_journal(FILE *f, r = sd_journal_wait(j, USEC_INFINITY); if (r < 0) - goto finish; + return log_error_errno(r, "Failed to wait for journal: %m"); } -finish: - return r; + return 0; } int add_matches_for_unit(sd_journal *j, const char *unit) { @@ -1166,9 +1165,9 @@ static int get_boot_id_for_machine(const char *machine, sd_id128_t *boot_id) { if (fd < 0) _exit(EXIT_FAILURE); - k = loop_read(fd, buf, 36, false); + r = loop_read_exact(fd, buf, 36, false); safe_close(fd); - if (k != 36) + if (r < 0) _exit(EXIT_FAILURE); k = send(pair[1], buf, 36, MSG_NOSIGNAL); @@ -1220,7 +1219,7 @@ int add_match_this_boot(sd_journal *j, const char *machine) { r = sd_journal_add_conjunction(j); if (r < 0) - return r; + return log_error_errno(r, "Failed to add conjunction: %m"); return 0; } @@ -1250,7 +1249,7 @@ int show_journal_by_unit( r = sd_journal_open(&j, journal_open_flags); if (r < 0) - return r; + return log_error_errno(r, "Failed to open journal: %m"); r = add_match_this_boot(j, NULL); if (r < 0) @@ -1261,12 +1260,15 @@ int show_journal_by_unit( else r = add_matches_for_user_unit(j, unit, uid); if (r < 0) - return r; + return log_error_errno(r, "Failed to add unit matches: %m"); if (_unlikely_(log_get_max_level() >= LOG_DEBUG)) { _cleanup_free_ char *filter; filter = journal_make_match_string(j); + if (!filter) + return log_oom(); + log_debug("Journal filter: %s", filter); }