#include <errno.h>
#include <stddef.h>
-#include "journal-private.h"
+#include "journal-file.h"
+
+static int system_journal_open(JournalFile **f) {
+ int r;
+ char *fn;
+ sd_id128_t machine;
+ char ids[33];
+
+ assert(f);
+
+ r = sd_id128_get_machine(&machine);
+ if (r < 0)
+ return r;
+
+ fn = join("/var/log/journal/", sd_id128_to_string(machine, ids), "/system.journal", NULL);
+ if (!fn)
+ return -ENOMEM;
+
+ r = journal_file_open(fn, O_RDONLY, 0640, NULL, f);
+ free(fn);
+
+ if (r >= 0)
+ return r;
+
+ if (r < 0 && r != -ENOENT) {
+ log_error("Failed to open system journal: %s", strerror(-r));
+ return r;
+ }
+
+ fn = join("/run/log/journal/", ids, "/system.journal", NULL);
+ if (!fn)
+ return -ENOMEM;
+
+ r = journal_file_open(fn, O_RDONLY, 0640, NULL, f);
+ free(fn);
+
+ if (r < 0) {
+ log_error("Failed to open system journal: %s", strerror(-r));
+ return r;
+ }
+
+ return r;
+}
int main(int argc, char *argv[]) {
int r;
log_parse_environment();
log_open();
- r = journal_file_open("/var/log/journal/system.journal", O_RDONLY, 0644, &f);
- if (r == -ENOENT)
- r = journal_file_open("/run/log/journal/system.journal", O_RDONLY, 0644, &f);
-
+ r = system_journal_open(&f);
if (r < 0) {
log_error("Failed to open journal: %s", strerror(-r));
return EXIT_FAILURE;
uint64_t p, l;
p = le64toh(o->entry.items[i].object_offset);
- r = journal_file_move_to_object(f, p, &o);
+ r = journal_file_move_to_object(f, p, OBJECT_DATA, &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);
+ r = journal_file_move_to_object(f, offset, OBJECT_ENTRY, &o);
if (r < 0) {
log_error("Failed to move back to entry: %s", strerror(-r));
goto finish;