summaryrefslogtreecommitdiff
path: root/include/sqfs/io.h
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2019-09-08 14:53:30 +0200
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2019-09-08 14:53:30 +0200
commit3a851dfe87c88ac1d4dddc2a26cc48b037f852f9 (patch)
treea8a8f34291aa58b25737088d247a91a7f60b4fec /include/sqfs/io.h
parent60064dd0412a149fe00cfc4e2f2361c22656db57 (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.h44
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 */