1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-30 06:25:37 +03:00

Merge pull request #23135 from DaanDeMeyer/journal-move

journal: Only move to object if requested
This commit is contained in:
Lennart Poettering 2022-05-03 10:01:39 +02:00 committed by GitHub
commit 968680b23d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 12 deletions

View File

@ -2358,6 +2358,19 @@ static int generic_array_bisect(
uint64_t *ret_offset,
uint64_t *ret_idx) {
/* Given an entry array chain, this function finds the object "closest" to the given needle in the
* chain, taking into account the provided direction. A function can be provided to determine how
* an object is matched against the given needle.
*
* Given a journal file, the offset of an object and the needle, the test_object() function should
* return TEST_LEFT if the needle is located earlier in the entry array chain, TEST_RIGHT if the
* needle is located later in the entry array chain and TEST_FOUND if the object matches the needle.
* If test_object() returns TEST_FOUND for a specific object, that object's information will be used
* to populate the return values of this function. If test_object() never returns TEST_FOUND, the
* return values are populated with the details of one of the objects closest to the needle. If the
* direction is DIRECTION_UP, the earlier object is used. Otherwise, the later object is used.
*/
uint64_t a, p, t = 0, i = 0, last_p = 0, last_index = UINT64_MAX;
bool subtract_one = false;
Object *array = NULL;

View File

@ -493,7 +493,6 @@ static int next_for_match(
int r;
uint64_t np = 0;
Object *n;
assert(j);
assert(m);
@ -569,12 +568,12 @@ static int next_for_match(
assert(np > 0);
r = journal_file_move_to_object(f, OBJECT_ENTRY, np, &n);
if (r < 0)
return r;
if (ret) {
r = journal_file_move_to_object(f, OBJECT_ENTRY, np, ret);
if (r < 0)
return r;
}
if (ret)
*ret = n;
if (offset)
*offset = np;
@ -633,7 +632,6 @@ static int find_location_for_match(
} else if (m->type == MATCH_OR_TERM) {
uint64_t np = 0;
Object *n;
/* Find the earliest match */
@ -652,12 +650,12 @@ static int find_location_for_match(
if (np == 0)
return 0;
r = journal_file_move_to_object(f, OBJECT_ENTRY, np, &n);
if (r < 0)
return r;
if (ret) {
r = journal_file_move_to_object(f, OBJECT_ENTRY, np, ret);
if (r < 0)
return r;
}
if (ret)
*ret = n;
if (offset)
*offset = np;