chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
socket: add option for SO_PASSEC
[elogind.git]
/
src
/
journal
/
journal-file.c
diff --git
a/src/journal/journal-file.c
b/src/journal/journal-file.c
index 275caea50e10a7625007f0164ef3be4e6cbad192..8c17620ed339bf9576bf498e2d6ad02018983df8 100644
(file)
--- a/
src/journal/journal-file.c
+++ b/
src/journal/journal-file.c
@@
-581,6
+581,8
@@
static int journal_file_link_data(JournalFile *f, Object *o, uint64_t offset, ui
assert(offset > 0);
assert(o->object.type == OBJECT_DATA);
assert(offset > 0);
assert(o->object.type == OBJECT_DATA);
+ /* This might alter the window we are looking at */
+
o->data.next_hash_offset = o->data.next_field_offset = 0;
o->data.entry_offset = o->data.entry_array_offset = 0;
o->data.n_entries = 0;
o->data.next_hash_offset = o->data.next_field_offset = 0;
o->data.entry_offset = o->data.entry_array_offset = 0;
o->data.n_entries = 0;
@@
-591,18
+593,14
@@
static int journal_file_link_data(JournalFile *f, Object *o, uint64_t offset, ui
/* Only entry in the hash table is easy */
f->data_hash_table[h].head_hash_offset = htole64(offset);
} else {
/* Only entry in the hash table is easy */
f->data_hash_table[h].head_hash_offset = htole64(offset);
} else {
- /*
Temporarily move back to the previous data object,
- *
to patch in
pointer */
+ /*
Move back to the previous data object, to patch in
+ * pointer */
r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
if (r < 0)
return r;
o->data.next_hash_offset = htole64(offset);
r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
if (r < 0)
return r;
o->data.next_hash_offset = htole64(offset);
-
- r = journal_file_move_to_object(f, OBJECT_DATA, offset, &o);
- if (r < 0)
- return r;
}
f->data_hash_table[h].tail_hash_offset = htole64(offset);
}
f->data_hash_table[h].tail_hash_offset = htole64(offset);
@@
-614,6
+612,7
@@
int journal_file_find_data_object_with_hash(
JournalFile *f,
const void *data, uint64_t size, uint64_t hash,
Object **ret, uint64_t *offset) {
JournalFile *f,
const void *data, uint64_t size, uint64_t hash,
Object **ret, uint64_t *offset) {
+
uint64_t p, osize, h;
int r;
uint64_t p, osize, h;
int r;
@@
-702,7
+701,11
@@
int journal_file_find_data_object(
ret, offset);
}
ret, offset);
}
-static int journal_file_append_data(JournalFile *f, const void *data, uint64_t size, Object **ret, uint64_t *offset) {
+static int journal_file_append_data(
+ JournalFile *f,
+ const void *data, uint64_t size,
+ Object **ret, uint64_t *offset) {
+
uint64_t hash, p;
uint64_t osize;
Object *o;
uint64_t hash, p;
uint64_t osize;
Object *o;
@@
-760,6
+763,12
@@
static int journal_file_append_data(JournalFile *f, const void *data, uint64_t s
if (r < 0)
return r;
if (r < 0)
return r;
+ /* The linking might have altered the window, so let's
+ * refresh our pointer */
+ r = journal_file_move_to_object(f, OBJECT_DATA, p, &o);
+ if (r < 0)
+ return r;
+
if (ret)
*ret = o;
if (ret)
*ret = o;
@@
-771,14
+780,14
@@
static int journal_file_append_data(JournalFile *f, const void *data, uint64_t s
uint64_t journal_file_entry_n_items(Object *o) {
assert(o);
uint64_t journal_file_entry_n_items(Object *o) {
assert(o);
- assert(o->object.type ==
htole64(OBJECT_ENTRY)
);
+ assert(o->object.type ==
OBJECT_ENTRY
);
return (le64toh(o->object.size) - offsetof(Object, entry.items)) / sizeof(EntryItem);
}
static uint64_t journal_file_entry_array_n_items(Object *o) {
assert(o);
return (le64toh(o->object.size) - offsetof(Object, entry.items)) / sizeof(EntryItem);
}
static uint64_t journal_file_entry_array_n_items(Object *o) {
assert(o);
- assert(o->object.type ==
htole64(OBJECT_ENTRY_ARRAY)
);
+ assert(o->object.type ==
OBJECT_ENTRY_ARRAY
);
return (le64toh(o->object.size) - offsetof(Object, entry_array.items)) / sizeof(uint64_t);
}
return (le64toh(o->object.size) - offsetof(Object, entry_array.items)) / sizeof(uint64_t);
}
@@
-833,7
+842,7
@@
static int link_entry_into_array(JournalFile *f,
o->entry_array.items[i] = htole64(p);
if (ap == 0)
o->entry_array.items[i] = htole64(p);
if (ap == 0)
- *first =
q
;
+ *first =
htole64(q)
;
else {
r = journal_file_move_to_object(f, OBJECT_ENTRY_ARRAY, ap, &o);
if (r < 0)
else {
r = journal_file_move_to_object(f, OBJECT_ENTRY_ARRAY, ap, &o);
if (r < 0)
@@
-866,7
+875,7
@@
static int link_entry_into_array_plus_one(JournalFile *f,
else {
uint64_t i;
else {
uint64_t i;
- i =
le64toh(*idx) - 1
;
+ i =
htole64(le64toh(*idx) - 1)
;
r = link_entry_into_array(f, first, &i, p);
if (r < 0)
return r;
r = link_entry_into_array(f, first, &i, p);
if (r < 0)
return r;