diff options
author | Mitya Selivanov <automainint@guattari.tech> | 2024-07-14 21:12:37 +0200 |
---|---|---|
committer | Mitya Selivanov <automainint@guattari.tech> | 2024-07-14 21:12:37 +0200 |
commit | 30740ca4131d1f574718262451b4410207dc8d4e (patch) | |
tree | fc88b16a216079397ad85b9c6b1a1c1c5712a814 /kit/file.h | |
parent | 5e3c99bb1cf1d03ea006300121265571f5008fd2 (diff) | |
download | saw-30740ca4131d1f574718262451b4410207dc8d4e.zip |
Reworking the build system
Diffstat (limited to 'kit/file.h')
-rw-r--r-- | kit/file.h | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/kit/file.h b/kit/file.h new file mode 100644 index 0000000..12f00a2 --- /dev/null +++ b/kit/file.h @@ -0,0 +1,134 @@ +#ifndef KIT_FILE_H +#define KIT_FILE_H + +#include "dynamic_array.h" +#include "string_builder.h" + +#include <stdio.h> + +#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 |