From 484cd01590ec488cca1f8a5c7c76cd223609e299 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Thu, 15 Jun 2023 15:16:03 +0200 Subject: Migrate file istream/ostream from libio to libsquashfs Signed-off-by: David Oberhollenzer --- include/sqfs/io.h | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) (limited to 'include/sqfs/io.h') diff --git a/include/sqfs/io.h b/include/sqfs/io.h index 1138fc0..eaf74a6 100644 --- a/include/sqfs/io.h +++ b/include/sqfs/io.h @@ -329,6 +329,80 @@ SQFS_API int sqfs_open_native_file(sqfs_file_handle_t *out, */ SQFS_API sqfs_file_t *sqfs_open_file(const char *filename, sqfs_u32 flags); +/** + * @brief Create an input stream for an OS native file handle. + * + * @memberof sqfs_istream_t + * + * The functions takes up ownership of the file handle and takes care + * of cleaning it up. On failure, the handle remains usable, and ownership + * remains with the caller. + * + * @param out Returns a pointer to an input stream on success. + * @param path The name to associate with the handle. + * @param fd A native file handle. + * + * @return Zero on success, a negative @ref SQFS_ERROR number on failure + */ +SQFS_API +int sqfs_istream_open_handle(sqfs_istream_t **out, const char *path, + sqfs_file_handle_t fd); + +/** + * @brief Create an output stream that writes to an OS native file handle. + * + * @memberof sqfs_ostream_t + * + * If the flag SQFS_FILE_OPEN_NO_SPARSE is set, the underlying implementation + * always writes chunks of zero bytes when passing a NULL pointer to append. + * Otherwise, it tries to use seek/truncate style APIs to create sparse output + * files. + * + * @param out Returns a pointer to an output stream on success. + * @param path The name to associate with the handle. + * @param fd A native file handle. + * @param flags A combination of flags. + * + * @return Zero on success, a negative @ref SQFS_ERROR number on failure + */ +SQFS_API int sqfs_ostream_open_handle(sqfs_ostream_t **out, const char *path, + sqfs_file_handle_t hnd, int flags); + +/** + * @brief Create an input stream that reads from a file. + * + * @memberof sqfs_istream_t + * + * @param out Returns a pointer to an input stream on success. + * @param path A path to the file to open or create. + * + * @return Zero on success, a negative @ref SQFS_ERROR number on failure + */ +SQFS_API int sqfs_istream_open_file(sqfs_istream_t **out, const char *path); + +/** + * @brief Create an output stream that writes to a file. + * + * @memberof sqfs_ostream_t + * + * If the file does not yet exist, it is created. If it does exist this + * function fails, unless the flag SQFS_FILE_OPEN_OVERWRITE is set, in which + * case the file is opened and its contents are discarded. + * + * If the flag SQFS_FILE_OPEN_NO_SPARSE is set, the underlying implementation + * always writes chunks of zero bytes when passing a NULL pointer to append. + * Otherwise, it tries to use seek/truncate style APIs to create sparse output + * files. + * + * @param out Returns a pointer to an output stream on success. + * @param path A path to the file to open or create. + * @param flags A combination of flags controling how to open/create the file. + * + * @return Zero on success, a negative @ref SQFS_ERROR number on failure + */ +SQFS_API int sqfs_ostream_open_file(sqfs_ostream_t **out, + const char *path, int flags); + /** * @brief Read data from an input stream * -- cgit v1.2.3