summaryrefslogtreecommitdiff
path: root/lib/sqfs/meta_reader.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqfs/meta_reader.c')
-rw-r--r--lib/sqfs/meta_reader.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/lib/sqfs/meta_reader.c b/lib/sqfs/meta_reader.c
index 96b59fd..2c6ec97 100644
--- a/lib/sqfs/meta_reader.c
+++ b/lib/sqfs/meta_reader.c
@@ -68,14 +68,11 @@ int meta_reader_seek(meta_reader_t *m, uint64_t block_start, size_t offset)
return 0;
}
- if (lseek(m->fd, block_start, SEEK_SET) == (off_t)-1) {
- perror("seek on image file");
+ if (read_data_at("reading meta data header", block_start,
+ m->fd, &header, 2)) {
return -1;
}
- if (read_data("reading meta data header", m->fd, &header, 2))
- return -1;
-
header = le16toh(header);
compressed = (header & 0x8000) == 0;
size = header & 0x7FFF;
@@ -92,8 +89,10 @@ int meta_reader_seek(meta_reader_t *m, uint64_t block_start, size_t offset)
memset(m->data, 0, sizeof(m->data));
- if (read_data("reading meta data block", m->fd, m->data, size))
+ if (read_data_at("reading meta data block", block_start + 2,
+ m->fd, m->data, size)) {
return -1;
+ }
if (compressed) {
ret = m->cmp->do_block(m->cmp, m->data, size,