Skip to content

Commit b7eea4f

Browse files
committed
Fixed read
1 parent 115904a commit b7eea4f

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/kvdb.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -510,12 +510,19 @@ static void read_value_callback(kvdb * db, struct find_key_cb_params * params,
510510
readparams->value_size = value_size;
511511
readparams->value = malloc((size_t) value_size);
512512

513-
r = pread(db->kv_fd, readparams->value, (size_t) value_size,
514-
params->current_offset + 8 + 4 + 1 + 8 + params->key_size + 8);
515-
if (r < 0) {
516-
readparams->result = -2;
517-
free(readparams->value);
518-
return;
513+
uint64_t remaining = value_size;
514+
char * value_p = readparams->value;
515+
while (remaining > 0) {
516+
ssize_t count = pread(db->kv_fd, value_p, (size_t) remaining,
517+
params->current_offset + 8 + 4 + 1 + 8 + params->key_size + 8);
518+
if (count < 0) {
519+
readparams->result = -2;
520+
free(readparams->value);
521+
readparams->value = NULL;
522+
return;
523+
}
524+
remaining -= count;
525+
value_p += count;
519526
}
520527

521528
readparams->result = 0;

0 commit comments

Comments
 (0)