From c1bd6716bd53cb4270eeb032f150ac2c7c1a8f96 Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Wed, 5 Jan 2022 07:00:49 -0600 Subject: Implement Mkdir --- examples/passthrough.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'examples/passthrough.rs') diff --git a/examples/passthrough.rs b/examples/passthrough.rs index 1607f10..e8c51ca 100644 --- a/examples/passthrough.rs +++ b/examples/passthrough.rs @@ -26,6 +26,7 @@ use tokio::{ }; use clap::{App, Arg}; +use nix::unistd::mkdir; struct Passthrough { known: HashMap, @@ -134,6 +135,16 @@ impl Passthrough { reply.blob(&target) } + async fn mkdir<'o>(&mut self, (request, reply): Op<'o, ops::Mkdir>) -> Done<'o> { + let (reply, inode) = reply.and_then(self.known(request.ino()))?; + let path = inode.path.join(request.name()); + + let (reply, ()) = reply.and_then(mkdir(&path, request.mode()))?; + let (reply, metadata) = reply.and_then(fs::symlink_metadata(&path).await)?; + + reply.known(New(&mut self.known, Inode::new(path, metadata)), Ttl::MAX) + } + async fn open<'o>(&mut self, (request, reply): Op<'o, ops::Open>) -> Done<'o> { let (reply, inode) = reply.and_then(self.known(request.ino()))?; let options = { @@ -338,6 +349,7 @@ async fn main_loop(session: Start, mut fs: Passthrough) -> FuseResult<()> { Forget(forget) => fs.forget(forget.op()?), Getattr(getattr) => fs.getattr(getattr.op()?), Readlink(readlink) => fs.readlink(readlink.op()?).await, + Mkdir(mkdir) => fs.mkdir(mkdir.op()?).await, Open(open) => fs.open(open.op()?).await, Read(read) => fs.read(read.op()?).await, Write(write) => fs.write(write.op()?).await, -- cgit v1.2.3