/* SPDX-License-Identifier: GPL-3.0-or-later */ #ifndef FRAG_READER_H #define FRAG_READER_H #include "config.h" #include "squashfs.h" #include "compress.h" #include #include typedef struct frag_reader_t frag_reader_t; /* Reads and decodes the fragment table from the image. Cleans up after itself and prints error messages to stderr on the way if it fails. */ frag_reader_t *frag_reader_create(sqfs_super_t *super, int fd, compressor_t *cmp); void frag_reader_destroy(frag_reader_t *f); /* Read data from a fragment. The function takes care of loading and uncompressing the fragment block (which is skipped if it has already been loaded earlier). `index` is a fragment index from an inode, `offset` is a byte offset into the fragment block and `size` is the number of bytes to copy into the destination buffer. Returns 0 on success. Prints error messages to stderr on failure (including index out of bounds). */ int frag_reader_read(frag_reader_t *f, size_t index, size_t offset, void *buffer, size_t size); const sqfs_fragment_t *frag_reader_get_table(const frag_reader_t *f); size_t frag_reader_get_fragment_count(const frag_reader_t *f); #endif /* FRAG_READER_H */