20
return source->ops->size(source->arg);
21
}
22
23
-int block_source_read_block(struct reftable_block_source *source,
24
- struct reftable_block *dest, uint64_t off,
25
- uint32_t size)
23
+ssize_t block_source_read_block(struct reftable_block_source *source,
24
+ struct reftable_block *dest, uint64_t off,
25
+ uint32_t size)
26
{
27
- int result = source->ops->read_block(source->arg, dest, off, size);
27
+ ssize_t result = source->ops->read_block(source->arg, dest, off, size);
28
dest->source = *source;
29
return result;
30
}
57
struct reftable_block *dest, uint64_t off,
58
uint32_t sz)
59
{
60
+ ssize_t bytes_read;
61
if (off >= r->size)
62
return 0;
62
-
63
- if (off + sz > r->size) {
63
+ if (off + sz > r->size)
64
sz = r->size - off;
65
- }
65
67
- return block_source_read_block(&r->source, dest, off, sz);
66
+ bytes_read = block_source_read_block(&r->source, dest, off, sz);
67
+ if (bytes_read < 0)
68
+ return (int)bytes_read;
69
+
70
+ return 0;
71
}
72
73
enum reftable_hash reftable_reader_hash_id(struct reftable_reader *r)
604
struct reftable_reader *r;
605
uint64_t file_size = block_source_size(source);
606
uint32_t read_size;
607
+ ssize_t bytes_read;
608
int err;
609
610
REFTABLE_CALLOC_ARRAY(r, 1);
623
goto done;
624
}
625
622
- err = block_source_read_block(source, &header, 0, read_size);
623
- if (err != read_size) {
626
+ bytes_read = block_source_read_block(source, &header, 0, read_size);
627
+ if (bytes_read < 0 || (size_t)bytes_read != read_size) {
628
err = REFTABLE_IO_ERROR;
629
goto done;
630
}
649
r->hash_id = 0;
650
r->refcount = 1;
651
648
- err = block_source_read_block(source, &footer, r->size,
649
- footer_size(r->version));
650
- if (err != footer_size(r->version)) {
652
+ bytes_read = block_source_read_block(source, &footer, r->size,
653
+ footer_size(r->version));
654
+ if (bytes_read < 0 || (size_t)bytes_read != footer_size(r->version)) {
655
err = REFTABLE_IO_ERROR;
656
goto done;
657
}