From: Lennart Poettering Date: Thu, 12 Jan 2023 16:48:43 +0000 (+0100) Subject: sd-journal: add high-level API for querying seqnum for journal entries, along with... X-Git-Tag: v254-rc1~1277^2~5 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b1712fabd1702640b04b0acdbba2d78294313a4d;p=thirdparty%2Fsystemd.git sd-journal: add high-level API for querying seqnum for journal entries, along with seqnum id --- diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym index 0f2230a42f9..802009b7100 100644 --- a/src/libsystemd/libsystemd.sym +++ b/src/libsystemd/libsystemd.sym @@ -810,4 +810,5 @@ global: sd_pidfd_get_unit; sd_pidfd_get_user_slice; sd_pidfd_get_user_unit; + sd_journal_get_seqnum; } LIBSYSTEMD_252; diff --git a/src/libsystemd/sd-journal/sd-journal.c b/src/libsystemd/sd-journal/sd-journal.c index 659e1e4e348..61249816a4d 100644 --- a/src/libsystemd/sd-journal/sd-journal.c +++ b/src/libsystemd/sd-journal/sd-journal.c @@ -2228,6 +2228,37 @@ _public_ int sd_journal_get_monotonic_usec(sd_journal *j, uint64_t *ret, sd_id12 return 0; } +_public_ int sd_journal_get_seqnum( + sd_journal *j, + uint64_t *ret_seqnum, + sd_id128_t *ret_seqnum_id) { + + JournalFile *f; + Object *o; + int r; + + assert_return(j, -EINVAL); + assert_return(!journal_pid_changed(j), -ECHILD); + + f = j->current_file; + if (!f) + return -EADDRNOTAVAIL; + + if (f->current_offset <= 0) + return -EADDRNOTAVAIL; + + r = journal_file_move_to_object(f, OBJECT_ENTRY, f->current_offset, &o); + if (r < 0) + return r; + + if (ret_seqnum_id) + *ret_seqnum_id = f->header->seqnum_id; + if (ret_seqnum) + *ret_seqnum = le64toh(o->entry.seqnum); + + return 0; +} + static bool field_is_valid(const char *field) { assert(field); diff --git a/src/systemd/sd-journal.h b/src/systemd/sd-journal.h index 24638f1e0ab..24e67663b95 100644 --- a/src/systemd/sd-journal.h +++ b/src/systemd/sd-journal.h @@ -99,6 +99,7 @@ int sd_journal_next_skip(sd_journal *j, uint64_t skip); int sd_journal_get_realtime_usec(sd_journal *j, uint64_t *ret); int sd_journal_get_monotonic_usec(sd_journal *j, uint64_t *ret, sd_id128_t *ret_boot_id); +int sd_journal_get_seqnum(sd_journal *j, uint64_t *ret_seqnum, sd_id128_t *ret_seqnum_id); int sd_journal_set_data_threshold(sd_journal *j, size_t sz); int sd_journal_get_data_threshold(sd_journal *j, size_t *sz);