aboutsummaryrefslogtreecommitdiff
path: root/filesystem/include
diff options
context:
space:
mode:
author3gg <3gg@shellblade.net>2024-06-15 11:42:48 -0700
committer3gg <3gg@shellblade.net>2024-06-15 11:42:48 -0700
commit04e3ded4c28c0b559620609daaae7b939d776b61 (patch)
tree55efea02bee351ac01ef764a04105ee9cee69259 /filesystem/include
parent993424547df0d253d546dbe7adee9b2448294b08 (diff)
Add path.
Diffstat (limited to 'filesystem/include')
-rw-r--r--filesystem/include/filesystem.h6
-rw-r--r--filesystem/include/path.h38
2 files changed, 38 insertions, 6 deletions
diff --git a/filesystem/include/filesystem.h b/filesystem/include/filesystem.h
index 3dce87f..1c354b7 100644
--- a/filesystem/include/filesystem.h
+++ b/filesystem/include/filesystem.h
@@ -3,7 +3,6 @@
3 */ 3 */
4#pragma once 4#pragma once
5 5
6#include <stdbool.h>
7#include <stddef.h> 6#include <stddef.h>
8#include <stdio.h> 7#include <stdio.h>
9 8
@@ -12,8 +11,3 @@ size_t get_file_size(FILE* file);
12 11
13/// Read the entire contents of the file into memory. 12/// Read the entire contents of the file into memory.
14void* read_file(const char* filepath); 13void* read_file(const char* filepath);
15
16/// Make a path relative to the parent directory of a file.
17bool make_relative_path(
18 const char* filepath, const char* path, char* relative,
19 size_t relative_length);
diff --git a/filesystem/include/path.h b/filesystem/include/path.h
new file mode 100644
index 0000000..8ad885d
--- /dev/null
+++ b/filesystem/include/path.h
@@ -0,0 +1,38 @@
1#pragma once
2
3#include <assert.h>
4#include <stdbool.h>
5#include <stddef.h>
6
7typedef struct path {
8 char* data;
9 size_t size; // Does not include null terminator. 0 if data is null.
10} path;
11
12/// Create a new path.
13path path_new(const char*);
14
15/// Free the path's memory.
16void path_del(path*);
17
18/// Return a C string from the path.
19static inline const char* path_cstr(path p) { return p.data; }
20
21/// Return true if the path is empty, false otherwise.
22static inline bool path_empty(path p) {
23 assert((p.data != 0) || (p.size == 0)); // null data -> 0 size
24 return p.data != 0;
25}
26
27/// Returns the parent directory, or empty path if the given path has no parent.
28/// The returned path is a slice of the input path; this function does not
29/// allocate.
30path path_parent_dir(path);
31
32/// Concatenate two paths.
33path path_concat(path left, path right);
34
35/// Make a path relative to the parent directory of a file.
36bool path_make_relative(
37 const char* filepath, const char* path, char* relative,
38 size_t relative_length);