]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-journal: add high-level API for querying seqnum for journal entries, along with...
authorLennart Poettering <lennart@poettering.net>
Thu, 12 Jan 2023 16:48:43 +0000 (17:48 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 8 Feb 2023 12:42:29 +0000 (13:42 +0100)
src/libsystemd/libsystemd.sym
src/libsystemd/sd-journal/sd-journal.c
src/systemd/sd-journal.h

index 0f2230a42f97afbb09dc4a4e463ea41f856181d9..802009b710013132316a9cce19984dd9c5507d8e 100644 (file)
@@ -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;
index 659e1e4e348af5fd10f837e878bde62a017f6fc4..61249816a4d752bf26ea2e7888bf19c1e5a1451d 100644 (file)
@@ -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);
 
index 24638f1e0aba8bea1b7b5e1fc6e845c47cba7d50..24e67663b954296fda9e0cf9a7b8794c458bd02e 100644 (file)
@@ -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);