diff options
Diffstat (limited to 'filesystem/include/path.h')
-rw-r--r-- | filesystem/include/path.h | 38 |
1 files changed, 38 insertions, 0 deletions
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 | |||
7 | typedef 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. | ||
13 | path path_new(const char*); | ||
14 | |||
15 | /// Free the path's memory. | ||
16 | void path_del(path*); | ||
17 | |||
18 | /// Return a C string from the path. | ||
19 | static inline const char* path_cstr(path p) { return p.data; } | ||
20 | |||
21 | /// Return true if the path is empty, false otherwise. | ||
22 | static 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. | ||
30 | path path_parent_dir(path); | ||
31 | |||
32 | /// Concatenate two paths. | ||
33 | path path_concat(path left, path right); | ||
34 | |||
35 | /// Make a path relative to the parent directory of a file. | ||
36 | bool path_make_relative( | ||
37 | const char* filepath, const char* path, char* relative, | ||
38 | size_t relative_length); | ||