diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-01-05 07:00:49 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-01-05 07:00:49 -0600 |
| commit | c1bd6716bd53cb4270eeb032f150ac2c7c1a8f96 (patch) | |
| tree | 9688880bdc4d141211a000bcf1769b926dd0212c /src/ops/entry.rs | |
| parent | b424e909fb65eb5c77a4ba4082492b11278103d4 (diff) | |
Implement Mkdir
Diffstat (limited to 'src/ops/entry.rs')
| -rw-r--r-- | src/ops/entry.rs | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/ops/entry.rs b/src/ops/entry.rs index 139a506..a65be29 100644 --- a/src/ops/entry.rs +++ b/src/ops/entry.rs @@ -1,8 +1,19 @@ -use super::traits::{ReplyOk, RequestHandle}; -use crate::{io::Stat, private_trait::Sealed, proto, Done, Ino, Operation, Reply, Request}; +use crate::{ + io::{Mode, Stat}, + private_trait::Sealed, + proto, Done, Ino, Operation, Reply, Request, +}; + +use super::{ + c_to_os, + traits::{ReplyKnown, ReplyOk, RequestHandle, RequestMode, RequestName}, +}; + +use std::ffi::{CStr, OsStr}; pub enum Forget {} pub enum Getattr {} +pub enum Mkdir {} pub trait RequestForget<'o>: Operation<'o> { fn forget_list<'a>(request: &'a Request<'o, Self>) -> ForgetList<'a>; @@ -19,6 +30,7 @@ pub enum ForgetList<'a> { impl Sealed for Forget {} impl Sealed for Getattr {} +impl Sealed for Mkdir {} impl<'o> Operation<'o> for Forget { type RequestBody = proto::OpcodeSelect< @@ -35,6 +47,11 @@ impl<'o> Operation<'o> for Getattr { type ReplyTail = (); } +impl<'o> Operation<'o> for Mkdir { + type RequestBody = (&'o proto::MkdirIn, &'o CStr); + type ReplyTail = (); +} + impl<'o> RequestForget<'o> for Forget { fn forget_list<'a>(request: &'a Request<'o, Self>) -> ForgetList<'a> { use {proto::OpcodeSelect::*, ForgetList::*}; @@ -86,3 +103,19 @@ impl<'o> ReplyStat<'o> for Getattr { }) } } + +impl<'o> RequestName<'o> for Mkdir { + fn name<'a>(request: &'a Request<'o, Self>) -> &'a OsStr { + let (_header, name) = request.body; + c_to_os(name) + } +} + +impl<'o> RequestMode<'o> for Mkdir { + fn mode(request: &Request<'o, Self>) -> Mode { + let (header, _name) = request.body; + Mode::from_bits_truncate(header.mode) + } +} + +impl<'o> ReplyKnown<'o> for Mkdir {} |
