summaryrefslogtreecommitdiff
path: root/src/user/lib/fs
diff options
context:
space:
mode:
Diffstat (limited to 'src/user/lib/fs')
-rw-r--r--src/user/lib/fs/misc.h23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/user/lib/fs/misc.h b/src/user/lib/fs/misc.h
index 0d9eb20..00f3c04 100644
--- a/src/user/lib/fs/misc.h
+++ b/src/user/lib/fs/misc.h
@@ -1,6 +1,8 @@
#pragma once
#include <stdbool.h>
#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
bool fork2_n_mount(const char *path);
@@ -9,8 +11,21 @@ void fs_whitelist(const char **list);
void fs_dir_inject(const char *path);
+static bool mount_at_pred(const char *path) {
+ // TODO preprocess path - simplify & ensure trailing slash
+ if (!fork2_n_mount(path)) {
+ /* child -> go into the for body */
+ _klogf("%s: impl", path);
+ return true;
+ }
+
+ if (strcmp("/", path) && !fork2_n_mount("/")) {
+ _klogf("%s: dir", path);
+ fs_dir_inject(path);
+ exit(1);
+ }
+ return false; /* continue after the for loop */
+}
+
/** Mounts something and injects its path into the fs */
-// TODO path needs to have a trailing slash
-#define MOUNT(path, impl) \
- if (!fork2_n_mount(path)) {_klogf("impl %s", path); impl;} \
- if (!fork2_n_mount("/")) {_klogf("dir for %s", path); fs_dir_inject(path);}
+#define MOUNT_AT(path) for (; mount_at_pred(path); exit(1))