From 8f9b6cd9eb049b00b1e9e669d0e35aa415dc8fb0 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 15 Oct 2011 02:53:04 +0200 Subject: journal: automaticall reset location when the set of matches changes --- src/journal/sd-journal.c | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) (limited to 'src/journal/sd-journal.c') diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c index 6a68275e9e..5d518a3870 100644 --- a/src/journal/sd-journal.c +++ b/src/journal/sd-journal.c @@ -50,6 +50,19 @@ struct sd_journal { unsigned n_matches; }; +static void reset_location(sd_journal *j) { + Iterator i; + JournalFile *f; + + assert(j); + + j->current_file = NULL; + j->current_field = 0; + + HASHMAP_FOREACH(f, j->files, i) + f->current_offset = 0; +} + int sd_journal_add_match(sd_journal *j, const void *data, size_t size) { Match *m; @@ -78,6 +91,8 @@ int sd_journal_add_match(sd_journal *j, const void *data, size_t size) { LIST_PREPEND(Match, matches, j->matches, m); j->n_matches ++; + reset_location(j); + return 0; } @@ -93,6 +108,8 @@ void sd_journal_flush_matches(sd_journal *j) { } j->n_matches = 0; + + reset_location(j); } static int compare_order(JournalFile *af, Object *ao, uint64_t ap, @@ -708,25 +725,18 @@ void sd_journal_start_data(sd_journal *j) { j->current_field = 0; } -static int real_journal_seek_head(sd_journal *j, direction_t direction) { - Iterator i; - JournalFile *f; - +int sd_journal_seek_head(sd_journal *j) { assert(j); - j->current_file = NULL; - j->current_field = 0; - - HASHMAP_FOREACH(f, j->files, i) - f->current_offset = 0; + reset_location(j); - return real_journal_next(j, direction); -} - -int sd_journal_seek_head(sd_journal *j) { - return real_journal_seek_head(j, DIRECTION_DOWN); + return real_journal_next(j, DIRECTION_DOWN); } int sd_journal_seek_tail(sd_journal *j) { - return real_journal_seek_head(j, DIRECTION_UP); + assert(j); + + reset_location(j); + + return real_journal_next(j, DIRECTION_UP); } -- cgit v1.2.3-54-g00ecf