diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-01-06 03:42:56 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-01-06 03:42:56 -0600 |
| commit | a65325e15844f880132a69b447e4aec983cb30ab (patch) | |
| tree | f7485d114c139b9a1acf8d4248398b14756cb221 /src/ops/entry.rs | |
| parent | 587cb05ec42417a05ed371d500b8734b10cf60f7 (diff) | |
Implement Symlink
Diffstat (limited to 'src/ops/entry.rs')
| -rw-r--r-- | src/ops/entry.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/ops/entry.rs b/src/ops/entry.rs index 74072ef..435188a 100644 --- a/src/ops/entry.rs +++ b/src/ops/entry.rs @@ -16,12 +16,17 @@ pub enum Getattr {} pub enum Mkdir {} pub enum Unlink {} pub enum Rmdir {} +pub enum Symlink {} pub enum Link {} pub trait RequestForget<'o>: Operation<'o> { fn forget_list<'a>(request: &'a Request<'o, Self>) -> ForgetList<'a>; } +pub trait RequestTarget<'o>: Operation<'o> { + fn target<'a>(request: &'a Request<'o, Self>) -> &'a OsStr; +} + pub trait RequestLink<'o>: Operation<'o> { fn source_ino(request: &Request<'o, Self>) -> Ino; } @@ -40,6 +45,7 @@ impl Sealed for Getattr {} impl Sealed for Mkdir {} impl Sealed for Unlink {} impl Sealed for Rmdir {} +impl Sealed for Symlink {} impl Sealed for Link {} impl<'o> Operation<'o> for Forget { @@ -72,6 +78,11 @@ impl<'o> Operation<'o> for Rmdir { type ReplyState = (); } +impl<'o> Operation<'o> for Symlink { + type RequestBody = (&'o CStr, &'o CStr); // name(), target() + type ReplyState = (); +} + impl<'o> Operation<'o> for Link { type RequestBody = (&'o proto::LinkIn, &'o CStr); type ReplyState = (); @@ -161,6 +172,22 @@ impl<'o> RequestName<'o> for Rmdir { impl<'o> ReplyOk<'o> for Rmdir {} +impl<'o> RequestName<'o> for Symlink { + fn name<'a>(request: &'a Request<'o, Self>) -> &'a OsStr { + let (name, _target) = request.body; + c_to_os(name) + } +} + +impl<'o> RequestTarget<'o> for Symlink { + fn target<'a>(request: &'a Request<'o, Self>) -> &'a OsStr { + let (_name, target) = request.body; + c_to_os(target) + } +} + +impl<'o> ReplyKnown<'o> for Symlink {} + impl<'o> RequestName<'o> for Link { fn name<'a>(request: &'a Request<'o, Self>) -> &'a OsStr { let (_header, name) = request.body; |
