chiark / gitweb /
journal: drop path name from cursor strings
[elogind.git] / src / journal / sd-journal.c
index 2fa81727e049702bb0d5fae78decf37bded12275..9e594a2cffa3fd9443b6453156aca3322631e360 100644 (file)
@@ -58,12 +58,13 @@ static void reset_location(sd_journal *j) {
         zero(j->current_location);
 }
 
-static void init_location(Location *l, JournalFile *f, Object *o) {
+static void init_location(Location *l, LocationType type, JournalFile *f, Object *o) {
         assert(l);
+        assert(type == LOCATION_DISCRETE || type == LOCATION_SEEK);
         assert(f);
         assert(o->object.type == OBJECT_ENTRY);
 
-        l->type = LOCATION_DISCRETE;
+        l->type = type;
         l->seqnum = le64toh(o->entry.seqnum);
         l->seqnum_id = f->header->seqnum_id;
         l->realtime = le64toh(o->entry.realtime);
@@ -74,12 +75,13 @@ static void init_location(Location *l, JournalFile *f, Object *o) {
         l->seqnum_set = l->realtime_set = l->monotonic_set = l->xor_hash_set = true;
 }
 
-static void set_location(sd_journal *j, JournalFile *f, Object *o, uint64_t offset) {
+static void set_location(sd_journal *j, LocationType type, JournalFile *f, Object *o, uint64_t offset) {
         assert(j);
+        assert(type == LOCATION_DISCRETE || type == LOCATION_SEEK);
         assert(f);
         assert(o);
 
-        init_location(&j->current_location, f, o);
+        init_location(&j->current_location, type, f, o);
 
         j->current_file = f;
         j->current_field = 0;
@@ -447,7 +449,7 @@ static int compare_with_location(JournalFile *af, Object *ao, Location *l) {
         assert(af);
         assert(ao);
         assert(l);
-        assert(l->type == LOCATION_DISCRETE);
+        assert(l->type == LOCATION_DISCRETE || l->type == LOCATION_SEEK);
 
         if (l->monotonic_set &&
             sd_id128_equal(ao->entry.boot_id, l->boot_id) &&
@@ -866,7 +868,7 @@ static int real_journal_next(sd_journal *j, direction_t direction) {
         if (r < 0)
                 return r;
 
-        set_location(j, new_file, o, new_offset);
+        set_location(j, LOCATION_DISCRETE, new_file, o, new_offset);
 
         return 1;
 }
@@ -938,12 +940,11 @@ _public_ int sd_journal_get_cursor(sd_journal *j, char **cursor) {
         sd_id128_to_string(o->entry.boot_id, bid);
 
         if (asprintf(cursor,
-                     "s=%s;i=%llx;b=%s;m=%llx;t=%llx;x=%llx;p=%s",
+                     "s=%s;i=%llx;b=%s;m=%llx;t=%llx;x=%llx",
                      sid, (unsigned long long) le64toh(o->entry.seqnum),
                      bid, (unsigned long long) le64toh(o->entry.monotonic),
                      (unsigned long long) le64toh(o->entry.realtime),
-                     (unsigned long long) le64toh(o->entry.xor_hash),
-                     path_get_file_name(j->current_file->path)) < 0)
+                     (unsigned long long) le64toh(o->entry.xor_hash)) < 0)
                 return -ENOMEM;
 
         return 1;
@@ -983,35 +984,35 @@ _public_ int sd_journal_seek_cursor(sd_journal *j, const char *cursor) {
 
                 case 's':
                         seqnum_id_set = true;
-                        k = sd_id128_from_string(w+2, &seqnum_id);
+                        k = sd_id128_from_string(item+2, &seqnum_id);
                         break;
 
                 case 'i':
                         seqnum_set = true;
-                        if (sscanf(w+2, "%llx", &seqnum) != 1)
+                        if (sscanf(item+2, "%llx", &seqnum) != 1)
                                 k = -EINVAL;
                         break;
 
                 case 'b':
                         boot_id_set = true;
-                        k = sd_id128_from_string(w+2, &boot_id);
+                        k = sd_id128_from_string(item+2, &boot_id);
                         break;
 
                 case 'm':
                         monotonic_set = true;
-                        if (sscanf(w+2, "%llx", &monotonic) != 1)
+                        if (sscanf(item+2, "%llx", &monotonic) != 1)
                                 k = -EINVAL;
                         break;
 
                 case 't':
                         realtime_set = true;
-                        if (sscanf(w+2, "%llx", &realtime) != 1)
+                        if (sscanf(item+2, "%llx", &realtime) != 1)
                                 k = -EINVAL;
                         break;
 
                 case 'x':
                         xor_hash_set = true;
-                        if (sscanf(w+2, "%llx", &xor_hash) != 1)
+                        if (sscanf(item+2, "%llx", &xor_hash) != 1)
                                 k = -EINVAL;
                         break;
                 }
@@ -1029,7 +1030,7 @@ _public_ int sd_journal_seek_cursor(sd_journal *j, const char *cursor) {
 
         reset_location(j);
 
-        j->current_location.type = LOCATION_DISCRETE;
+        j->current_location.type = LOCATION_SEEK;
 
         if (realtime_set) {
                 j->current_location.realtime = (uint64_t) realtime;
@@ -1061,7 +1062,7 @@ _public_ int sd_journal_seek_monotonic_usec(sd_journal *j, sd_id128_t boot_id, u
                 return -EINVAL;
 
         reset_location(j);
-        j->current_location.type = LOCATION_DISCRETE;
+        j->current_location.type = LOCATION_SEEK;
         j->current_location.boot_id = boot_id;
         j->current_location.monotonic = usec;
         j->current_location.monotonic_set = true;
@@ -1074,7 +1075,7 @@ _public_ int sd_journal_seek_realtime_usec(sd_journal *j, uint64_t usec) {
                 return -EINVAL;
 
         reset_location(j);
-        j->current_location.type = LOCATION_DISCRETE;
+        j->current_location.type = LOCATION_SEEK;
         j->current_location.realtime = usec;
         j->current_location.realtime_set = true;
 
@@ -1256,9 +1257,10 @@ static int add_directory(sd_journal *j, const char *prefix, const char *dirname)
         }
 
         for (;;) {
-                struct dirent buf, *de;
+                struct dirent *de;
+                union dirent_storage buf;
 
-                r = readdir_r(d, &buf, &de);
+                r = readdir_r(d, &buf.de, &de);
                 if (r != 0 || !de)
                         break;
 
@@ -1334,10 +1336,11 @@ static int add_root_directory(sd_journal *j, const char *p) {
         }
 
         for (;;) {
-                struct dirent buf, *de;
+                struct dirent *de;
+                union dirent_storage buf;
                 sd_id128_t id;
 
-                r = readdir_r(d, &buf, &de);
+                r = readdir_r(d, &buf.de, &de);
                 if (r != 0 || !de)
                         break;