aboutsummaryrefslogtreecommitdiff
path: root/filesystem/include/path.h
diff options
context:
space:
mode:
Diffstat (limited to 'filesystem/include/path.h')
-rw-r--r--filesystem/include/path.h38
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
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);