summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--examples/passthrough.rs12
1 files changed, 12 insertions, 0 deletions
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<Ino, Inode>,
@@ -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,