summaryrefslogtreecommitdiff
path: root/kit/file.h
diff options
context:
space:
mode:
authorMitya Selivanov <automainint@guattari.tech>2024-07-14 21:12:37 +0200
committerMitya Selivanov <automainint@guattari.tech>2024-07-14 21:12:37 +0200
commit30740ca4131d1f574718262451b4410207dc8d4e (patch)
treefc88b16a216079397ad85b9c6b1a1c1c5712a814 /kit/file.h
parent5e3c99bb1cf1d03ea006300121265571f5008fd2 (diff)
downloadsaw-30740ca4131d1f574718262451b4410207dc8d4e.zip
Reworking the build system
Diffstat (limited to 'kit/file.h')
-rw-r--r--kit/file.h134
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