From 54bb6ae93e92c7ed93e6ae8aa10a136b350e7b72 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Sat, 20 Nov 2021 16:28:43 +0100 Subject: init/fs: fix non-prefix fs_passthrough --- src/init/fs/misc.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) (limited to 'src/init') diff --git a/src/init/fs/misc.c b/src/init/fs/misc.c index f98259f..8c8967c 100644 --- a/src/init/fs/misc.c +++ b/src/init/fs/misc.c @@ -76,19 +76,27 @@ void fs_passthru(const char *prefix) { if (prefix) prefix_len = strlen(prefix); while (!_syscall_fs_wait(buf, buf_size, &res)) { - if (prefix && res.op == VFSOP_OPEN) { - /* the only special case: rewriting the path */ - if (prefix_len + res.len <= buf_size) { - // TODO memmove - char tmp[64]; - memcpy(tmp, buf, res.len); - memcpy(buf, prefix, prefix_len); - memcpy(buf + prefix_len, tmp, res.len); - ret = _syscall_open(buf, res.len + prefix_len); - } else ret = -1; - _syscall_fs_respond(NULL, ret); - } else { - fs_respond_delegate(&res, res.id); + switch (res.op) { + case VFSOP_OPEN: + if (prefix) { + /* special case: rewriting the path */ + if (prefix_len + res.len <= buf_size) { + // TODO memmove + char tmp[64]; + memcpy(tmp, buf, res.len); + memcpy(buf, prefix, prefix_len); + memcpy(buf + prefix_len, tmp, res.len); + ret = _syscall_open(buf, res.len + prefix_len); + } else ret = -1; + } else { + ret = _syscall_open(buf, res.len); + } + _syscall_fs_respond(NULL, ret); + break; + + default: + fs_respond_delegate(&res, res.id); + break; } } _syscall_exit(0); -- cgit v1.2.3