#ifndef BLUE_IO_FILE_H_ #define BLUE_IO_FILE_H_ #include #include #include #include B_DECLS_BEGIN; #define B_TYPE_FILE (b_file_get_type()) B_DECLARE_TYPE(b_file); B_TYPE_CLASS_DECLARATION_BEGIN(b_file) B_TYPE_CLASS_DECLARATION_END(b_file) #define B_OFFSET_CURRENT ((size_t)-1) typedef enum b_seek_basis { B_SEEK_BEGINNING, B_SEEK_CURRENT, B_SEEK_END } b_seek_basis; typedef enum b_file_attribute { B_FILE_ATTRIB_NORMAL = 0x01u, B_FILE_ATTRIB_DIRECTORY = 0x02u, B_FILE_ATTRIB_BLOCK_DEVICE = 0x04u, B_FILE_ATTRIB_CHAR_DEVICE = 0x08u, B_FILE_ATTRIB_SYMLINK = 0x80u, } b_file_attribute; typedef enum b_file_mode { B_FILE_READ_ONLY = 0x01u, B_FILE_WRITE_ONLY = 0x02u, B_FILE_READ_WRITE = B_FILE_READ_ONLY | B_FILE_WRITE_ONLY, B_FILE_TRUNCATE = 0x04u, B_FILE_CREATE = 0x08u, B_FILE_CREATE_ONLY = 0x10u | B_FILE_CREATE, B_FILE_APPEND = 0x20u, B_FILE_BINARY = 0x40u, B_FILE_DELETE_ON_CLOSE = 0x80u, B_FILE_SHADOW = 0x100u, } b_file_mode; typedef struct b_file_info { b_file_attribute attrib; b_file_mode mode; size_t length; } b_file_info; BLUE_API b_type b_file_get_type(void); BLUE_API b_result b_file_open( B_TYPE_FWDREF(b_directory) * root, const B_TYPE_FWDREF(b_path) * path, b_file_mode mode, b_file **out); BLUE_API b_result b_file_open_temp(b_file_mode mode, b_file **out); BLUE_API b_result b_file_open_shadow( b_file *original, b_file_mode mode, b_file **out); BLUE_API b_status b_file_open_stream(b_file *file, b_stream **out); BLUE_API b_status b_file_stat(b_file *file, b_file_info *out); BLUE_API b_status b_file_size(b_file *file, size_t *out_len); BLUE_API b_status b_file_cursor(b_file *file, size_t *out_pos); BLUE_API b_status b_file_resize(b_file *file, size_t len); BLUE_API b_status b_file_seek(b_file *file, long long offset, b_seek_basis basis); BLUE_API const B_TYPE_FWDREF(b_path) * b_file_path(const b_file *file); BLUE_API b_status b_file_swap_shadow(b_file *main_file, b_file *shadow_file); BLUE_API b_status b_file_read( b_file *file, size_t offset, size_t len, void *buf, size_t *nr_read); BLUE_API b_status b_file_write( b_file *file, size_t offset, size_t len, const void *buf, size_t *nr_written); B_DECLS_END; #endif