From: Daan De Meyer Date: Fri, 12 Nov 2021 11:17:01 +0000 (+0000) Subject: journal: Add journal_file_object_to_string() X-Git-Tag: v250-rc1~195^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=363b2b9aaff14f238b0ae19beb97665a19e45c81;p=thirdparty%2Fsystemd.git journal: Add journal_file_object_to_string() --- diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c index f8cbc68a244..2b36c03c38e 100644 --- a/src/libsystemd/sd-journal/journal-file.c +++ b/src/libsystemd/sd-journal/journal-file.c @@ -30,6 +30,7 @@ #include "set.h" #include "sort-util.h" #include "stat-util.h" +#include "string-table.h" #include "string-util.h" #include "strv.h" #include "sync-util.h" @@ -3206,51 +3207,41 @@ void journal_file_dump(JournalFile *f) { p = le64toh(READ_NOW(f->header->header_size)); while (p != 0) { + const char *s; + r = journal_file_move_to_object(f, OBJECT_UNUSED, p, &o); if (r < 0) goto fail; - switch (o->object.type) { - - case OBJECT_UNUSED: - printf("Type: OBJECT_UNUSED\n"); - break; - - case OBJECT_DATA: - printf("Type: OBJECT_DATA\n"); - break; + s = journal_object_type_to_string(o->object.type); - case OBJECT_FIELD: - printf("Type: OBJECT_FIELD\n"); - break; + switch (o->object.type) { case OBJECT_ENTRY: - printf("Type: OBJECT_ENTRY seqnum=%"PRIu64" monotonic=%"PRIu64" realtime=%"PRIu64"\n", + assert(s); + + printf("Type: %s seqnum=%"PRIu64" monotonic=%"PRIu64" realtime=%"PRIu64"\n", + s, le64toh(o->entry.seqnum), le64toh(o->entry.monotonic), le64toh(o->entry.realtime)); break; - case OBJECT_FIELD_HASH_TABLE: - printf("Type: OBJECT_FIELD_HASH_TABLE\n"); - break; - - case OBJECT_DATA_HASH_TABLE: - printf("Type: OBJECT_DATA_HASH_TABLE\n"); - break; - - case OBJECT_ENTRY_ARRAY: - printf("Type: OBJECT_ENTRY_ARRAY\n"); - break; - case OBJECT_TAG: - printf("Type: OBJECT_TAG seqnum=%"PRIu64" epoch=%"PRIu64"\n", + assert(s); + + printf("Type: %s seqnum=%"PRIu64" epoch=%"PRIu64"\n", + s, le64toh(o->tag.seqnum), le64toh(o->tag.epoch)); break; default: - printf("Type: unknown (%i)\n", o->object.type); + if (s) + printf("Type: %s \n", s); + else + printf("Type: unknown (%i)", o->object.type); + break; } @@ -4195,3 +4186,16 @@ bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec, int log return false; } + +static const char * const journal_object_type_table[] = { + [OBJECT_UNUSED] = "unused", + [OBJECT_DATA] = "data", + [OBJECT_FIELD] = "field", + [OBJECT_ENTRY] = "entry", + [OBJECT_DATA_HASH_TABLE] = "data hash table", + [OBJECT_FIELD_HASH_TABLE] = "field hash table", + [OBJECT_ENTRY_ARRAY] = "entry array", + [OBJECT_TAG] = "tag", +}; + +DEFINE_STRING_TABLE_LOOKUP_TO_STRING(journal_object_type, ObjectType); diff --git a/src/libsystemd/sd-journal/journal-file.h b/src/libsystemd/sd-journal/journal-file.h index b4488259adb..92784337c2e 100644 --- a/src/libsystemd/sd-journal/journal-file.h +++ b/src/libsystemd/sd-journal/journal-file.h @@ -272,3 +272,5 @@ static inline bool JOURNAL_FILE_COMPRESS(JournalFile *f) { uint64_t journal_file_hash_data(JournalFile *f, const void *data, size_t sz); bool journal_field_valid(const char *p, size_t l, bool allow_protected); + +const char* journal_object_type_to_string(ObjectType type) _const_;