return 0;
}
+static bool whole_file_precedes_location(JournalFile *f, Location *l, direction_t direction) {
+ assert(f);
+ assert(l);
+
+ if (l->type != LOCATION_DISCRETE && l->type != LOCATION_SEEK)
+ return false;
+
+ if (l->seqnum_set && sd_id128_equal(l->seqnum_id, f->header->seqnum_id))
+ return direction == DIRECTION_DOWN ?
+ l->seqnum > le64toh(f->header->tail_entry_seqnum) :
+ l->seqnum < le64toh(f->header->head_entry_seqnum);
+
+ if (l->realtime_set)
+ return direction == DIRECTION_DOWN ?
+ l->realtime > le64toh(f->header->tail_entry_realtime) :
+ l->realtime < le64toh(f->header->head_entry_realtime);
+
+ return false;
+}
+
_pure_ static int compare_with_location(JournalFile *af, Object *ao, Location *l) {
uint64_t a;
ORDERED_HASHMAP_FOREACH(f, j->files, i) {
bool found;
+ if (whole_file_precedes_location(f, &j->current_location, direction))
+ continue;
+
r = next_beyond_location(j, f, direction, &o, &p);
if (r < 0) {
- log_debug("Can't iterate through %s, ignoring: %s", f->path, strerror(-r));
+ log_debug_errno(r, "Can't iterate through %s, ignoring: %m", f->path);
remove_file_real(j, f);
continue;
} else if (r == 0)
d = opendir(path);
if (!d) {
- log_debug("Failed to open %s: %m", path);
+ log_debug_errno(errno, "Failed to open %s: %m", path);
if (errno == ENOENT)
return 0;
return -errno;
de = readdir(d);
if (!de && errno != 0) {
r = -errno;
- log_debug("Failed to read directory %s: %m", m->path);
+ log_debug_errno(errno, "Failed to read directory %s: %m", m->path);
return r;
}
if (!de)
dirent_is_file_with_suffix(de, ".journal~")) {
r = add_file(j, m->path, de->d_name);
if (r < 0) {
- log_debug("Failed to add file %s/%s: %s",
- m->path, de->d_name, strerror(-r));
+ log_debug_errno(r, "Failed to add file %s/%s: %m",
+ m->path, de->d_name);
r = set_put_error(j, r);
if (r < 0)
return r;
de = readdir(d);
if (!de && errno != 0) {
r = -errno;
- log_debug("Failed to read directory %s: %m", m->path);
+ log_debug_errno(errno, "Failed to read directory %s: %m", m->path);
return r;
}
if (!de)
dirent_is_file_with_suffix(de, ".journal~")) {
r = add_file(j, m->path, de->d_name);
if (r < 0) {
- log_debug("Failed to add file %s/%s: %s",
- m->path, de->d_name, strerror(-r));
+ log_debug_errno(r, "Failed to add file %s/%s: %m",
+ m->path, de->d_name);
r = set_put_error(j, r);
if (r < 0)
return r;
r = add_directory(j, m->path, de->d_name);
if (r < 0)
- log_debug("Failed to add directory %s/%s: %s", m->path, de->d_name, strerror(-r));
+ log_debug_errno(r, "Failed to add directory %s/%s: %m", m->path, de->d_name);
}
}
STRV_FOREACH(path, paths) {
r = add_any_file(j, *path);
if (r < 0) {
- log_error("Failed to open %s: %s", *path, strerror(-r));
+ log_error_errno(r, "Failed to open %s: %m", *path);
goto fail;
}
}
if (e->mask & (IN_CREATE|IN_MOVED_TO|IN_MODIFY|IN_ATTRIB)) {
r = add_file(j, d->path, e->name);
if (r < 0) {
- log_debug("Failed to add file %s/%s: %s",
- d->path, e->name, strerror(-r));
+ log_debug_errno(r, "Failed to add file %s/%s: %m",
+ d->path, e->name);
set_put_error(j, r);
}
r = remove_file(j, d->path, e->name);
if (r < 0)
- log_debug("Failed to remove file %s/%s: %s", d->path, e->name, strerror(-r));
+ log_debug_errno(r, "Failed to remove file %s/%s: %m", d->path, e->name);
}
} else if (!d->is_root && e->len == 0) {
if (e->mask & (IN_DELETE_SELF|IN_MOVE_SELF|IN_UNMOUNT)) {
r = remove_directory(j, d);
if (r < 0)
- log_debug("Failed to remove directory %s: %s", d->path, strerror(-r));
+ log_debug_errno(r, "Failed to remove directory %s: %m", d->path);
}
if (e->mask & (IN_CREATE|IN_MOVED_TO|IN_MODIFY|IN_ATTRIB)) {
r = add_directory(j, d->path, e->name);
if (r < 0)
- log_debug("Failed to add directory %s/%s: %s", d->path, e->name, strerror(-r));
+ log_debug_errno(r, "Failed to add directory %s/%s: %m", d->path, e->name);
}
}