summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2022-01-05 07:18:52 -0600
committerAlejandro Soto <alejandro@34project.org>2022-01-05 07:18:52 -0600
commitce320da58d2917789815bc4dafe15a9b47a9df65 (patch)
treeb2a0f1a4a57b05ce9c216d6cb3ebbc5304af7bcb /src
parent92121f5db1ccec523c1b7eb0a817f757b5ef899a (diff)
Implement Unlink
Diffstat (limited to 'src')
-rw-r--r--src/ops/entry.rs15
-rw-r--r--src/ops/mod.rs2
-rw-r--r--src/session.rs3
3 files changed, 19 insertions, 1 deletions
diff --git a/src/ops/entry.rs b/src/ops/entry.rs
index 6f03d9d..2998281 100644
--- a/src/ops/entry.rs
+++ b/src/ops/entry.rs
@@ -14,6 +14,7 @@ use std::ffi::{CStr, OsStr};
pub enum Forget {}
pub enum Getattr {}
pub enum Mkdir {}
+pub enum Unlink {}
pub enum Rmdir {}
pub trait RequestForget<'o>: Operation<'o> {
@@ -32,6 +33,7 @@ pub enum ForgetList<'a> {
impl Sealed for Forget {}
impl Sealed for Getattr {}
impl Sealed for Mkdir {}
+impl Sealed for Unlink {}
impl Sealed for Rmdir {}
impl<'o> Operation<'o> for Forget {
@@ -54,6 +56,11 @@ impl<'o> Operation<'o> for Mkdir {
type ReplyTail = ();
}
+impl<'o> Operation<'o> for Unlink {
+ type RequestBody = &'o CStr; // name()
+ type ReplyTail = ();
+}
+
impl<'o> Operation<'o> for Rmdir {
type RequestBody = &'o CStr; // name()
type ReplyTail = ();
@@ -127,6 +134,14 @@ impl<'o> RequestMode<'o> for Mkdir {
impl<'o> ReplyKnown<'o> for Mkdir {}
+impl<'o> RequestName<'o> for Unlink {
+ fn name<'a>(request: &'a Request<'o, Self>) -> &'a OsStr {
+ c_to_os(request.body)
+ }
+}
+
+impl<'o> ReplyOk<'o> for Unlink {}
+
impl<'o> RequestName<'o> for Rmdir {
fn name<'a>(request: &'a Request<'o, Self>) -> &'a OsStr {
c_to_os(request.body)
diff --git a/src/ops/mod.rs b/src/ops/mod.rs
index 68f5bce..c33afb4 100644
--- a/src/ops/mod.rs
+++ b/src/ops/mod.rs
@@ -12,7 +12,7 @@ use bytemuck::{bytes_of, Pod};
pub mod traits;
pub use dir::{BufferedReaddir, Lookup, Readdir};
-pub use entry::{Forget, Getattr, Mkdir, Rmdir};
+pub use entry::{Forget, Getattr, Mkdir, Rmdir, Unlink};
pub use global::{Init, Statfs};
pub use open::{Access, Open, Opendir, Release, Releasedir};
pub use rw::{Flush, Read, Readlink, Write};
diff --git a/src/session.rs b/src/session.rs
index b32668a..54a5e8c 100644
--- a/src/session.rs
+++ b/src/session.rs
@@ -60,6 +60,7 @@ pub enum Dispatch<'o> {
Getattr(Incoming<'o, ops::Getattr>),
Readlink(Incoming<'o, ops::Readlink>),
Mkdir(Incoming<'o, ops::Mkdir>),
+ Unlink(Incoming<'o, ops::Unlink>),
Rmdir(Incoming<'o, ops::Rmdir>),
Open(Incoming<'o, ops::Open>),
Read(Incoming<'o, ops::Read>),
@@ -255,6 +256,7 @@ impl<'o> Dispatch<'o> {
Getattr(incoming) => incoming.common,
Readlink(incoming) => incoming.common,
Mkdir(incoming) => incoming.common,
+ Unlink(incoming) => incoming.common,
Rmdir(incoming) => incoming.common,
Open(incoming) => incoming.common,
Read(incoming) => incoming.common,
@@ -337,6 +339,7 @@ impl Endpoint<'_> {
Getattr => dispatch!(Getattr),
Readlink => dispatch!(Readlink),
Mkdir => dispatch!(Mkdir),
+ Unlink => dispatch!(Unlink),
Rmdir => dispatch!(Rmdir),
Open => dispatch!(Open),
Read => dispatch!(Read),