diff --git a/man/sd_journal_get_cursor.xml b/man/sd_journal_get_cursor.xml
index 351c898483..3b4fd8cea9 100644
--- a/man/sd_journal_get_cursor.xml
+++ b/man/sd_journal_get_cursor.xml
@@ -28,7 +28,7 @@
int sd_journal_get_cursor
sd_journal *j
- char **cursor
+ char **ret_cursor
@@ -43,23 +43,21 @@
Description
- sd_journal_get_cursor() returns a
- cursor string for the current journal entry. A cursor is a
- serialization of the current journal position formatted as text.
- The string only contains printable characters and can be passed
- around in text form. The cursor identifies a journal entry
- globally and in a stable way and may be used to later seek to it
- via
+ sd_journal_get_cursor() returns a cursor string for the current journal
+ entry. A cursor is a serialization of the current journal position formatted as text. The string only
+ contains printable characters and can be passed around in text form. The cursor identifies a journal
+ entry globally and in a stable way and may be used to later seek to it via
sd_journal_seek_cursor3.
- The cursor string should be considered opaque and not be parsed by
- clients. Seeking to a cursor position without the specific entry
- being available locally will seek to the next closest (in terms of
- time) available entry. The call takes two arguments: a journal
- context object and a pointer to a string pointer where the cursor
- string will be placed. The string is allocated via libc
- malloc3
- and should be freed after use with
- free3.
+ The cursor string should be considered opaque and not be parsed by clients. Seeking to a cursor position
+ without the specific entry being available locally will seek to the next closest (in terms of time)
+ available entry. The call takes two arguments: a journal context object and a pointer to a string pointer
+ where the cursor string will be placed. The string is allocated via libc malloc3 and
+ should be freed after use with free3. The
+ ret_cursor parameter may be passed as NULL in which case the
+ cursor string is not generated, however the return value will indicate whether the journal context is
+ currently positioned on an entry, and thus has a cursor associated.
sd_journal_test_cursor()
may be used to check whether the current position in
@@ -91,6 +89,34 @@
the current entry matches the specified cursor, 0 if it does not
match the specified cursor or a negative errno-style error code on
failure.
+
+
+ Errors
+
+ Returned errors may indicate the following problems:
+
+
+
+ -EADDRNOTAVAIL
+
+ The journal context is currently not positioned on any entry, and hence no cursor
+ string can be generated.
+
+
+
+ -EINVAL
+
+ The journal context parameter is NULL.
+
+
+
+ -ECHILD
+
+ The journal context object has been allocated in a different process than it is
+ being used in now.
+
+
+
diff --git a/src/libsystemd/sd-journal/sd-journal.c b/src/libsystemd/sd-journal/sd-journal.c
index 83f77206c3..3b1f060565 100644
--- a/src/libsystemd/sd-journal/sd-journal.c
+++ b/src/libsystemd/sd-journal/sd-journal.c
@@ -1234,13 +1234,12 @@ _public_ int sd_journal_previous_skip(sd_journal *j, uint64_t skip) {
return real_journal_next_skip(j, DIRECTION_UP, skip);
}
-_public_ int sd_journal_get_cursor(sd_journal *j, char **cursor) {
+_public_ int sd_journal_get_cursor(sd_journal *j, char **ret_cursor) {
Object *o;
int r;
assert_return(j, -EINVAL);
assert_return(!journal_origin_changed(j), -ECHILD);
- assert_return(cursor, -EINVAL);
if (!j->current_file || j->current_file->current_offset <= 0)
return -EADDRNOTAVAIL;
@@ -1249,7 +1248,10 @@ _public_ int sd_journal_get_cursor(sd_journal *j, char **cursor) {
if (r < 0)
return r;
- if (asprintf(cursor,
+ if (!ret_cursor)
+ return 0;
+
+ if (asprintf(ret_cursor,
"s=%s;i=%"PRIx64";b=%s;m=%"PRIx64";t=%"PRIx64";x=%"PRIx64,
SD_ID128_TO_STRING(j->current_file->header->seqnum_id), le64toh(o->entry.seqnum),
SD_ID128_TO_STRING(o->entry.boot_id), le64toh(o->entry.monotonic),
diff --git a/src/systemd/sd-journal.h b/src/systemd/sd-journal.h
index 7434051ce1..5eefb0d771 100644
--- a/src/systemd/sd-journal.h
+++ b/src/systemd/sd-journal.h
@@ -124,7 +124,7 @@ int sd_journal_seek_monotonic_usec(sd_journal *j, sd_id128_t boot_id, uint64_t u
int sd_journal_seek_realtime_usec(sd_journal *j, uint64_t usec);
int sd_journal_seek_cursor(sd_journal *j, const char *cursor);
-int sd_journal_get_cursor(sd_journal *j, char **cursor);
+int sd_journal_get_cursor(sd_journal *j, char **ret_cursor);
int sd_journal_test_cursor(sd_journal *j, const char *cursor);
int sd_journal_get_cutoff_realtime_usec(sd_journal *j, uint64_t *from, uint64_t *to);