diff options
Diffstat (limited to 'src/user/lib/fs/misc.h')
-rw-r--r-- | src/user/lib/fs/misc.h | 23 |
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)) |