#ifndef KIT_FILE_H #define KIT_FILE_H #include "dynamic_array.h" #include "string_builder.h" #include #ifdef __cplusplus extern "C" { #endif #if defined(_WIN32) && !defined(__CYGWIN__) # define KIT_PATH_DELIM_C '\\' # define KIT_PATH_DELIM "\\" # define KIT_ENV_HOME "USERPROFILE" #else # define KIT_PATH_DELIM_C '/' # define KIT_PATH_DELIM "/" # define KIT_ENV_HOME "HOME" #endif typedef enum { KIT_PATH_NONE, KIT_PATH_FILE, KIT_PATH_FOLDER } kit_path_type_t; typedef struct { s32 status; i64 time_modified_sec; i32 time_modified_nsec; i64 size; } kit_file_info_t; typedef struct { s32 status; KIT_DA(kit_str_builder_t) files; } kit_path_list_t; enum { KIT_FILE_MAP_PRIVATE, KIT_FILE_MAP_SHARED }; typedef struct { s32 status; i64 size; u8 *bytes; #if defined(_WIN32) && !defined(__CYGWIN__) void *_file; void *_map; #else int _fd; #endif } kit_mapped_file_t; kit_str_builder_t kit_get_env(kit_str_t name, kit_allocator_t *alloc); kit_str_builder_t kit_path_norm(kit_str_t path, kit_allocator_t *alloc); kit_str_builder_t kit_path_join(kit_str_t left, kit_str_t right, kit_allocator_t *alloc); kit_str_builder_t kit_path_user(kit_allocator_t *alloc); kit_str_builder_t kit_path_cache(kit_allocator_t *alloc); kit_str_builder_t kit_path_data(kit_allocator_t *alloc); kit_str_t kit_path_index(kit_str_t path, i64 index); kit_str_t kit_path_take(kit_str_t path, i64 count); s32 kit_folder_create(kit_str_t path); s32 kit_folder_create_recursive(kit_str_t path); s32 kit_file_remove(kit_str_t path); s32 kit_folder_remove(kit_str_t path); s32 kit_file_remove_recursive(kit_str_t path, kit_allocator_t *alloc); kit_path_type_t kit_path_type(kit_str_t path); kit_file_info_t kit_file_info(kit_str_t path); kit_path_list_t kit_folder_enum(kit_str_t path, kit_allocator_t *alloc); void kit_path_list_destroy(kit_path_list_t list); kit_mapped_file_t kit_file_map(kit_str_t path, i64 size, i32 mode); s32 kit_file_sync(kit_mapped_file_t *mf); s32 kit_file_unmap(kit_mapped_file_t *mf); #ifdef __cplusplus } #endif #define path_type_t kit_path_type_t #define file_info_t kit_file_info_t #define path_list_t kit_path_list_t #define mapped_file_t kit_mapped_file_t #define get_env kit_get_env #define path_norm kit_path_norm #define path_join kit_path_join #define path_user kit_path_user #define path_cache kit_path_cache #define path_data kit_path_data #define path_index kit_path_index #define path_take kit_path_take #define folder_create kit_folder_create #define folder_create_recursive kit_folder_create_recursive #define file_remove kit_file_remove #define folder_remove kit_folder_remove #define file_remove_recursive kit_file_remove_recursive #define path_type kit_path_type #define file_info kit_file_info #define folder_enum kit_folder_enum #define path_list_destroy kit_path_list_destroy #define file_map kit_file_map #define file_sync kit_file_sync #define file_unmap kit_file_unmap #define FILE_MAP_PRIVATE KIT_FILE_MAP_PRIVATE #define FILE_MAP_SHARED KIT_FILE_MAP_SHARED #define PATH_DELIM_C KIT_PATH_DELIM_C #define PATH_DELIM KIT_PATH_DELIM #define ENV_HOME KIT_ENV_HOME #define PATH_NONE KIT_PATH_NONE #define PATH_FILE KIT_PATH_FILE #define PATH_FOLDER KIT_PATH_FOLDER #endif