diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-09-08 14:53:30 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-09-08 14:53:30 +0200 |
commit | 3a851dfe87c88ac1d4dddc2a26cc48b037f852f9 (patch) | |
tree | a8a8f34291aa58b25737088d247a91a7f60b4fec /include/sqfs/io.h | |
parent | 60064dd0412a149fe00cfc4e2f2361c22656db57 (diff) |
Replace direct file I/O with abstraction layer
This should make it easier to use libsquashfs with custom setups that
embedd a squashfs image inside something else. Also, it should make
it easier to port to non unix-like platforms.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'include/sqfs/io.h')
-rw-r--r-- | include/sqfs/io.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/include/sqfs/io.h b/include/sqfs/io.h new file mode 100644 index 0000000..f290c2d --- /dev/null +++ b/include/sqfs/io.h @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * io.h + * + * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> + */ +#ifndef SQFS_IO_H +#define SQFS_IO_H + +#include "sqfs/predef.h" + +typedef enum { + SQFS_FILE_OPEN_READ_ONLY = 0x01, + + SQFS_FILE_OPEN_OVERWRITE = 0x02, + + SQFS_FILE_OPEN_ALL_FLAGS = 0x03, +} E_SQFS_FILE_OPEN_FLAGS; + +struct sqfs_file_t { + void (*destroy)(sqfs_file_t *file); + + int (*read_at)(sqfs_file_t *file, uint64_t offset, + void *buffer, size_t size); + + int (*write_at)(sqfs_file_t *file, uint64_t offset, + const void *buffer, size_t size); + + uint64_t (*get_size)(sqfs_file_t *file); + + int (*truncate)(sqfs_file_t *file, uint64_t size); +}; + +#ifdef __cplusplus +extern "C" { +#endif + +SQFS_API sqfs_file_t *sqfs_open_file(const char *filename, int flags); + +#ifdef __cplusplus +} +#endif + +#endif /* SQFS_IO_H */ |