1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-28 20:25:38 +03:00

journal: fix matches

This commit is contained in:
Lennart Poettering 2011-12-20 00:38:14 +01:00
parent 50f20cfdb0
commit 466ccd92e2
2 changed files with 16 additions and 9 deletions

View File

@ -1434,7 +1434,7 @@ int journal_file_next_entry_for_data(
assert(p > 0 || !o);
r = journal_file_move_to_object(f, OBJECT_DATA, data_offset, &d);
if (r <= 0)
if (r < 0)
return r;
n = le64toh(d->data.n_entries);

View File

@ -525,6 +525,7 @@ static int next_with_matches(sd_journal *j, JournalFile *f, direction_t directio
uint64_t np, n;
bool found, term_result = false;
Match *m, *term_match = NULL;
Object *npo = NULL;
n = journal_file_entry_n_items(c);
@ -535,6 +536,7 @@ static int next_with_matches(sd_journal *j, JournalFile *f, direction_t directio
np = 0;
LIST_FOREACH(matches, m, j->matches) {
uint64_t q, k;
Object *qo = NULL;
/* Let's check if this is the beginning of a
* new term, i.e. has a different field prefix
@ -567,22 +569,26 @@ static int next_with_matches(sd_journal *j, JournalFile *f, direction_t directio
* where we'd have to try next, in case the other
* matches are not OK */
r = journal_file_next_entry_for_data(f, c, cp, le64toh(c->entry.items[k].object_offset), direction, NULL, &q);
r = journal_file_next_entry_for_data(f, c, cp, le64toh(c->entry.items[k].object_offset), direction, &qo, &q);
if (r > 0) {
if (direction == DIRECTION_DOWN) {
if (q > np)
if (q > np) {
np = q;
npo = qo;
}
} else {
if (np == 0 || q < np)
if (np == 0 || q < np) {
np = q;
npo = qo;
}
}
}
}
/* Check the last term */
if (term_match && term_result)
found = true;
if (term_match && !term_result)
found = false;
/* Did this entry match against all matches? */
if (found) {
@ -600,6 +606,7 @@ static int next_with_matches(sd_journal *j, JournalFile *f, direction_t directio
/* Hmm, ok, this entry only matched partially, so
* let's try another one */
cp = np;
c = npo;
}
}
@ -612,12 +619,12 @@ static int next_beyond_location(sd_journal *j, JournalFile *f, direction_t direc
assert(f);
if (f->current_offset > 0) {
r = journal_file_move_to_object(f, OBJECT_ENTRY, f->current_offset, &c);
cp = f->current_offset;
r = journal_file_move_to_object(f, OBJECT_ENTRY, cp, &c);
if (r < 0)
return r;
cp = f->current_offset;
r = next_with_matches(j, f, direction, &c, &cp);
if (r <= 0)
return r;