From: =?utf-8?q?Zbigniew_J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Fri, 18 Jul 2014 21:44:36 -0400
Subject: man,
 journal: add note about sd_journal_get_cutoff_monotonic_usec return
 value

Also modify the function itself to be a bit simpler to read.

(cherry picked from commit 1651e2c61e544de9ca947c8b3202552b1272ef57)
---
 man/sd_journal_get_cutoff_realtime_usec.xml | 36 ++++++++++++++++++-----------
 src/journal/sd-journal.c                    | 16 ++++++-------
 2 files changed, 31 insertions(+), 21 deletions(-)

diff --git a/man/sd_journal_get_cutoff_realtime_usec.xml b/man/sd_journal_get_cutoff_realtime_usec.xml
index 6df4b26..ef987d8 100644
--- a/man/sd_journal_get_cutoff_realtime_usec.xml
+++ b/man/sd_journal_get_cutoff_realtime_usec.xml
@@ -74,25 +74,29 @@
                 <title>Description</title>
 
                 <para><function>sd_journal_get_cutoff_realtime_usec()</function>
-                gets the realtime (wallclock) timestamps of the first
-                and last entries accessible in the journal.  It takes
-                three arguments: the journal context object and two
-                pointers to 64-bit unsigned integers to store the
-                timestamps in. The timestamps are in microseconds
-                since the epoch,
+                retrieves the realtime (wallclock) timestamps of the
+                first and last entries accessible in the journal.  It
+                takes three arguments: the journal context object
+                <parameter>j</parameter> and two pointers
+                <parameter>from</parameter> and
+                <parameter>to</parameter> pointing at 64-bit unsigned
+                integers to store the timestamps in. The timestamps
+                are in microseconds since the epoch,
                 i.e. <constant>CLOCK_REALTIME</constant>. Either one
                 of the two timestamp arguments may be passed as
                 <constant>NULL</constant> in case the timestamp is not
                 needed, but not both.</para>
 
                 <para><function>sd_journal_get_cutoff_monotonic_usec()</function>
-                gets the monotonic timestamps of the first and last
-                entries accessible in the journal. It takes three
-                arguments: the journal context object, a 128-bit
-                identifier for the boot, and two pointers to 64-bit
-                unsigned integers to store the timestamps. The
-                timestamps are in microseconds since boot-up of the
-                specific boot,
+                retrieves the monotonic timestamps of the first and
+                last entries accessible in the journal. It takes three
+                arguments: the journal context object
+                <parameter>j</parameter>, a 128-bit identifier for the
+                boot <parameter>boot_id</parameter>, and two pointers
+                to 64-bit unsigned integers to store the timestamps,
+                <parameter>from</parameter> and
+                <parameter>to</parameter>. The timestamps are in
+                microseconds since boot-up of the specific boot,
                 i.e. <constant>CLOCK_MONOTONIC</constant>. Since the
                 monotonic clock begins new with every reboot it only
                 defines a well-defined point in time when used
@@ -113,6 +117,12 @@
                 <function>sd_journal_get_cutoff_monotonic_usec()</function>
                 return 1 on success, 0 if not suitable entries are in
                 the journal or a negative errno-style error code.</para>
+
+                <para>Locations pointed to by parameters
+                <parameter>from</parameter> and
+                <parameter>to</parameter> will be set only if the
+                return value is positive, and obviously, the
+                parameters are non-null.</para>
         </refsect1>
 
         <refsect1>
diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
index ca805f8..15dae90 100644
--- a/src/journal/sd-journal.c
+++ b/src/journal/sd-journal.c
@@ -2390,7 +2390,7 @@ _public_ int sd_journal_get_cutoff_realtime_usec(sd_journal *j, uint64_t *from,
 _public_ int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, sd_id128_t boot_id, uint64_t *from, uint64_t *to) {
         Iterator i;
         JournalFile *f;
-        bool first = true;
+        bool found = false;
         int r;
 
         assert_return(j, -EINVAL);
@@ -2409,21 +2409,21 @@ _public_ int sd_journal_get_cutoff_monotonic_usec(sd_journal *j, sd_id128_t boot
                 if (r == 0)
                         continue;
 
-                if (first) {
+                if (found) {
                         if (from)
-                                *from = fr;
+                                *from = MIN(fr, *from);
                         if (to)
-                                *to = t;
-                        first = false;
+                                *to = MAX(t, *to);
                 } else {
                         if (from)
-                                *from = MIN(fr, *from);
+                                *from = fr;
                         if (to)
-                                *to = MAX(t, *to);
+                                *to = t;
+                        found = true;
                 }
         }
 
-        return first ? 0 : 1;
+        return found;
 }
 
 void journal_print_header(sd_journal *j) {
