X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fjournal%2Fjournalctl.c;h=bb1f18a21fc94ea7b1dfc97aeda4fa5cd9e720bd;hb=3fbf9cbb02690e40cd65802e777519f3f3c8d88a;hp=838e8436e4d3d29353ec3c25f0230489d2fbc571;hpb=87d2c1ff6a7375f03476767e6f59454bcc5cd04b;p=elogind.git diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 838e8436e..bb1f18a21 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -22,70 +22,51 @@ #include #include #include +#include +#include +#include +#include -#include "journal-private.h" +#include "sd-journal.h" +#include "log.h" int main(int argc, char *argv[]) { int r; - JournalFile *f; - Object *o = NULL; + sd_journal *j = NULL; + + log_set_max_level(LOG_DEBUG); + log_set_target(LOG_TARGET_CONSOLE); log_parse_environment(); log_open(); - r = journal_file_open(NULL, "/var/log/journal/system.journal", O_RDONLY, 0644, &f); - if (r == -ENOENT) - r = journal_file_open(NULL, "/run/log/journal/system.journal", O_RDONLY, 0644, &f); - + r = sd_journal_open(&j); if (r < 0) { log_error("Failed to open journal: %s", strerror(-r)); - return EXIT_FAILURE; + goto finish; } - for (;;) { - uint64_t offset; - uint64_t n, i; + SD_JOURNAL_FOREACH(j) { + const void *data; + size_t length; + char *cursor; - r = journal_file_next_entry(f, o, &o, &offset); + r = sd_journal_get_cursor(j, &cursor); if (r < 0) { - log_error("Failed to read journal: %s", strerror(-r)); + log_error("Failed to get cursor: %s", strerror(-r)); goto finish; } - if (r == 0) - break; - - printf("entry: %llu\n", (unsigned long long) le64toh(o->entry.seqnum)); - - n = journal_file_entry_n_items(o); - for (i = 0; i < n; i++) { - uint64_t p, l; + printf("entry: %s\n", cursor); + free(cursor); - p = le64toh(o->entry.items[i].object_offset); - r = journal_file_move_to_object(f, p, &o); - if (r < 0) { - log_error("Failed to move to data: %s", strerror(-r)); - goto finish; - } - - if (le64toh(o->object.type) != OBJECT_DATA) { - log_error("Invalid file"); - goto finish; - } - - l = o->object.size - offsetof(Object, data.payload); - printf("\t[%.*s]\n", (int) l, o->data.payload); - - r = journal_file_move_to_object(f, offset, &o); - if (r < 0) { - log_error("Failed to move back to entry: %s", strerror(-r)); - goto finish; - } - } + SD_JOURNAL_FOREACH_FIELD(j, data, length) + printf("\t%.*s\n", (int) length, (const char*) data); } finish: - journal_file_close(f); + if (j) + sd_journal_close(j); - return 0; + return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; }