From 587cb05ec42417a05ed371d500b8734b10cf60f7 Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Wed, 5 Jan 2022 07:58:36 -0600 Subject: Implement Link --- src/ops/entry.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/ops/entry.rs') diff --git a/src/ops/entry.rs b/src/ops/entry.rs index 4f0b76f..74072ef 100644 --- a/src/ops/entry.rs +++ b/src/ops/entry.rs @@ -16,11 +16,16 @@ pub enum Getattr {} pub enum Mkdir {} pub enum Unlink {} pub enum Rmdir {} +pub enum Link {} pub trait RequestForget<'o>: Operation<'o> { fn forget_list<'a>(request: &'a Request<'o, Self>) -> ForgetList<'a>; } +pub trait RequestLink<'o>: Operation<'o> { + fn source_ino(request: &Request<'o, Self>) -> Ino; +} + pub trait ReplyStat<'o>: Operation<'o> { fn stat(reply: Reply<'o, Self>, inode: &impl Stat) -> Done<'o>; } @@ -35,6 +40,7 @@ impl Sealed for Getattr {} impl Sealed for Mkdir {} impl Sealed for Unlink {} impl Sealed for Rmdir {} +impl Sealed for Link {} impl<'o> Operation<'o> for Forget { type RequestBody = proto::OpcodeSelect< @@ -66,6 +72,11 @@ impl<'o> Operation<'o> for Rmdir { type ReplyState = (); } +impl<'o> Operation<'o> for Link { + type RequestBody = (&'o proto::LinkIn, &'o CStr); + type ReplyState = (); +} + impl<'o> RequestForget<'o> for Forget { fn forget_list<'a>(request: &'a Request<'o, Self>) -> ForgetList<'a> { use {proto::OpcodeSelect::*, ForgetList::*}; @@ -149,3 +160,19 @@ impl<'o> RequestName<'o> for Rmdir { } impl<'o> ReplyOk<'o> for Rmdir {} + +impl<'o> RequestName<'o> for Link { + fn name<'a>(request: &'a Request<'o, Self>) -> &'a OsStr { + let (_header, name) = request.body; + c_to_os(name) + } +} + +impl<'o> RequestLink<'o> for Link { + fn source_ino(request: &Request<'o, Self>) -> Ino { + let (header, _name) = request.body; + Ino(header.old_ino) + } +} + +impl<'o> ReplyKnown<'o> for Link {} -- cgit v1.2.3