From dbb9dcb9d783c09e017af8a41f7ff0d4e001941e Mon Sep 17 00:00:00 2001
From: bjorn3 <17426603+bjorn3@users.noreply.github.com>
Date: Wed, 25 Dec 2024 11:57:02 +0100
Subject: [PATCH] Remove non-mutable scheme handlers

They are never used with v2 schemes and if necessary you can always
implement a scheme handler for &MyScheme and then pass &mut &MyScheme to
CallRequest::handle_scheme.
---
 src/generate.sh         |  12 +---
 src/lib.rs              |  12 ++--
 src/scheme.rs           |  52 +++++++--------
 src/scheme_block.rs     |  52 +++++++--------
 src/scheme_block_mut.rs | 138 ----------------------------------------
 src/scheme_mut.rs       | 138 ----------------------------------------
 6 files changed, 57 insertions(+), 347 deletions(-)
 delete mode 100644 src/scheme_block_mut.rs
 delete mode 100644 src/scheme_mut.rs

diff --git a/src/generate.sh b/src/generate.sh
index 3c2415b..31792a7 100755
--- a/src/generate.sh
+++ b/src/generate.sh
@@ -2,14 +2,9 @@
 
 set -e
 
-echo "Generating SchemeMut from Scheme"
-sed 's/trait Scheme/trait SchemeMut/' scheme.rs \
-| sed 's/\&self/\&mut self/g' \
-> scheme_mut.rs
-
 echo "Generating SchemeBlock from Scheme"
 sed 's/trait Scheme/trait SchemeBlock/' scheme.rs \
-| sed 's/fn handle(\&self, packet: \&mut Packet)/fn handle(\&self, packet: \&Packet) -> Option<usize>/' \
+| sed 's/fn handle(\&mut self, packet: \&mut Packet)/fn handle(\&mut self, packet: \&Packet) -> Option<usize>/' \
 | sed 's/packet.a = Error::mux(res);/res.transpose().map(Error::mux)/' \
 | sed 's/\.map(|f| f\.bits())/\.map(|f| f.map(|f| f.bits()))/' \
 | sed 's/\.map(|o| o as usize)/.map(|o| o.map(|o| o as usize))/' \
@@ -17,8 +12,3 @@ sed 's/trait Scheme/trait SchemeBlock/' scheme.rs \
 | sed 's/Result<\([^>]\+\)>/Result<Option<\1>>/g' \
 | sed 's/convert_to_this_scheme/convert_to_this_scheme_block/g' \
 > scheme_block.rs
-
-echo "Generating SchemeBlockMut from SchemeBlock"
-sed 's/trait SchemeBlock/trait SchemeBlockMut/' scheme_block.rs \
-| sed 's/\&self/\&mut self/g' \
-> scheme_block_mut.rs
diff --git a/src/lib.rs b/src/lib.rs
index a11ce75..dbf5af2 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -13,15 +13,11 @@ use syscall::{
     EINTR, EINVAL, ENOENT, EOPNOTSUPP,
 };
 
-pub use self::scheme::Scheme;
 pub use self::scheme_block::SchemeBlock;
-pub use self::scheme_block_mut::SchemeBlockMut;
-pub use self::scheme_mut::SchemeMut;
+pub use self::scheme::Scheme;
 
-mod scheme;
 mod scheme_block;
-mod scheme_block_mut;
-mod scheme_mut;
+mod scheme;
 
 pub struct CallerCtx {
     pub pid: usize,
@@ -98,7 +94,7 @@ impl CallRequest {
 }
 
 impl CallRequest {
-    pub fn handle_scheme_mut(self, scheme: &mut impl SchemeMut) -> Response {
+    pub fn handle_scheme(self, scheme: &mut impl Scheme) -> Response {
         let Some(opcode) = Opcode::try_from_raw(self.inner.sqe.opcode) else {
             return Response::new(&self, Err(Error::new(EOPNOTSUPP)));
         };
@@ -236,7 +232,7 @@ impl CallRequest {
         Response::new(&self, result)
     }
     // TODO: Copy paste is bad, but ./generate.sh is worse
-    pub fn handle_scheme_block_mut(self, scheme: &mut impl SchemeBlockMut) -> Option<Response> {
+    pub fn handle_scheme_block(self, scheme: &mut impl SchemeBlock) -> Option<Response> {
         let Some(opcode) = Opcode::try_from_raw(self.inner.sqe.opcode) else {
             return Some(Response::new(&self, Err(Error::new(EOPNOTSUPP))));
         };
diff --git a/src/scheme.rs b/src/scheme.rs
index b86cd2a..14e2e72 100644
--- a/src/scheme.rs
+++ b/src/scheme.rs
@@ -4,56 +4,56 @@ use syscall::error::*;
 
 pub trait Scheme {
     #[allow(unused_variables)]
-    fn open(&self, path: &str, flags: usize, uid: u32, gid: u32) -> Result<usize> {
+    fn open(&mut self, path: &str, flags: usize, uid: u32, gid: u32) -> Result<usize> {
         Err(Error::new(ENOENT))
     }
     #[allow(unused_variables)]
-    fn xopen(&self, path: &str, flags: usize, ctx: &CallerCtx) -> Result<OpenResult> {
+    fn xopen(&mut self, path: &str, flags: usize, ctx: &CallerCtx) -> Result<OpenResult> {
         convert_to_this_scheme(self.open(path, flags, ctx.uid, ctx.gid))
     }
 
     #[allow(unused_variables)]
-    fn rmdir(&self, path: &str, uid: u32, gid: u32) -> Result<usize> {
+    fn rmdir(&mut self, path: &str, uid: u32, gid: u32) -> Result<usize> {
         Err(Error::new(ENOENT))
     }
 
     #[allow(unused_variables)]
-    fn unlink(&self, path: &str, uid: u32, gid: u32) -> Result<usize> {
+    fn unlink(&mut self, path: &str, uid: u32, gid: u32) -> Result<usize> {
         Err(Error::new(ENOENT))
     }
 
     /* Resource operations */
     #[allow(unused_variables)]
-    fn dup(&self, old_id: usize, buf: &[u8]) -> Result<usize> {
+    fn dup(&mut self, old_id: usize, buf: &[u8]) -> Result<usize> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn xdup(&self, old_id: usize, buf: &[u8], ctx: &CallerCtx) -> Result<OpenResult> {
+    fn xdup(&mut self, old_id: usize, buf: &[u8], ctx: &CallerCtx) -> Result<OpenResult> {
         convert_to_this_scheme(self.dup(old_id, buf))
     }
 
     #[allow(unused_variables)]
-    fn read_old(&self, id: usize, buf: &mut [u8]) -> Result<usize> {
+    fn read_old(&mut self, id: usize, buf: &mut [u8]) -> Result<usize> {
         Err(Error::new(EBADF))
     }
     #[allow(unused_variables)]
-    fn read(&self, id: usize, buf: &mut [u8], offset: u64, fcntl_flags: u32) -> Result<usize> {
+    fn read(&mut self, id: usize, buf: &mut [u8], offset: u64, fcntl_flags: u32) -> Result<usize> {
         self.read_old(id, buf)
     }
 
     #[allow(unused_variables)]
-    fn write_old(&self, id: usize, buf: &[u8]) -> Result<usize> {
+    fn write_old(&mut self, id: usize, buf: &[u8]) -> Result<usize> {
         Err(Error::new(EBADF))
     }
     #[allow(unused_variables)]
-    fn write(&self, id: usize, buf: &[u8], offset: u64, fcntl_flags: u32) -> Result<usize> {
+    fn write(&mut self, id: usize, buf: &[u8], offset: u64, fcntl_flags: u32) -> Result<usize> {
         self.write_old(id, buf)
     }
 
     #[allow(unused_variables)]
     fn getdents<'buf>(
-        &self,
+        &mut self,
         id: usize,
         buf: DirentBuf<&'buf mut [u8]>,
         opaque_offset: u64,
@@ -62,77 +62,77 @@ pub trait Scheme {
     }
 
     #[allow(unused_variables)]
-    fn fsize(&self, id: usize) -> Result<u64> {
+    fn fsize(&mut self, id: usize) -> Result<u64> {
         Err(Error::new(ESPIPE))
     }
 
     #[allow(unused_variables)]
-    fn fchmod(&self, id: usize, mode: u16) -> Result<usize> {
+    fn fchmod(&mut self, id: usize, mode: u16) -> Result<usize> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn fchown(&self, id: usize, uid: u32, gid: u32) -> Result<usize> {
+    fn fchown(&mut self, id: usize, uid: u32, gid: u32) -> Result<usize> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn fcntl(&self, id: usize, cmd: usize, arg: usize) -> Result<usize> {
+    fn fcntl(&mut self, id: usize, cmd: usize, arg: usize) -> Result<usize> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn fevent(&self, id: usize, flags: EventFlags) -> Result<EventFlags> {
+    fn fevent(&mut self, id: usize, flags: EventFlags) -> Result<EventFlags> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn fpath(&self, id: usize, buf: &mut [u8]) -> Result<usize> {
+    fn fpath(&mut self, id: usize, buf: &mut [u8]) -> Result<usize> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn frename(&self, id: usize, path: &str, uid: u32, gid: u32) -> Result<usize> {
+    fn frename(&mut self, id: usize, path: &str, uid: u32, gid: u32) -> Result<usize> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn fstat(&self, id: usize, stat: &mut Stat) -> Result<usize> {
+    fn fstat(&mut self, id: usize, stat: &mut Stat) -> Result<usize> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn fstatvfs(&self, id: usize, stat: &mut StatVfs) -> Result<usize> {
+    fn fstatvfs(&mut self, id: usize, stat: &mut StatVfs) -> Result<usize> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn fsync(&self, id: usize) -> Result<usize> {
+    fn fsync(&mut self, id: usize) -> Result<usize> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn ftruncate(&self, id: usize, len: usize) -> Result<usize> {
+    fn ftruncate(&mut self, id: usize, len: usize) -> Result<usize> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn futimens(&self, id: usize, times: &[TimeSpec]) -> Result<usize> {
+    fn futimens(&mut self, id: usize, times: &[TimeSpec]) -> Result<usize> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn close(&self, id: usize) -> Result<usize> {
+    fn close(&mut self, id: usize) -> Result<usize> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn mmap_prep(&self, id: usize, offset: u64, size: usize, flags: MapFlags) -> Result<usize> {
+    fn mmap_prep(&mut self, id: usize, offset: u64, size: usize, flags: MapFlags) -> Result<usize> {
         Err(Error::new(EOPNOTSUPP))
     }
 
     #[allow(unused_variables)]
-    fn munmap(&self, id: usize, offset: u64, size: usize, flags: MunmapFlags) -> Result<usize> {
+    fn munmap(&mut self, id: usize, offset: u64, size: usize, flags: MunmapFlags) -> Result<usize> {
         Err(Error::new(EOPNOTSUPP))
     }
 }
diff --git a/src/scheme_block.rs b/src/scheme_block.rs
index da312e6..fa1e294 100644
--- a/src/scheme_block.rs
+++ b/src/scheme_block.rs
@@ -4,56 +4,56 @@ use syscall::error::*;
 
 pub trait SchemeBlock {
     #[allow(unused_variables)]
-    fn open(&self, path: &str, flags: usize, uid: u32, gid: u32) -> Result<Option<usize>> {
+    fn open(&mut self, path: &str, flags: usize, uid: u32, gid: u32) -> Result<Option<usize>> {
         Err(Error::new(ENOENT))
     }
     #[allow(unused_variables)]
-    fn xopen(&self, path: &str, flags: usize, ctx: &CallerCtx) -> Result<Option<OpenResult>> {
+    fn xopen(&mut self, path: &str, flags: usize, ctx: &CallerCtx) -> Result<Option<OpenResult>> {
         convert_to_this_scheme_block(self.open(path, flags, ctx.uid, ctx.gid))
     }
 
     #[allow(unused_variables)]
-    fn rmdir(&self, path: &str, uid: u32, gid: u32) -> Result<Option<usize>> {
+    fn rmdir(&mut self, path: &str, uid: u32, gid: u32) -> Result<Option<usize>> {
         Err(Error::new(ENOENT))
     }
 
     #[allow(unused_variables)]
-    fn unlink(&self, path: &str, uid: u32, gid: u32) -> Result<Option<usize>> {
+    fn unlink(&mut self, path: &str, uid: u32, gid: u32) -> Result<Option<usize>> {
         Err(Error::new(ENOENT))
     }
 
     /* Resource operations */
     #[allow(unused_variables)]
-    fn dup(&self, old_id: usize, buf: &[u8]) -> Result<Option<usize>> {
+    fn dup(&mut self, old_id: usize, buf: &[u8]) -> Result<Option<usize>> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn xdup(&self, old_id: usize, buf: &[u8], ctx: &CallerCtx) -> Result<Option<OpenResult>> {
+    fn xdup(&mut self, old_id: usize, buf: &[u8], ctx: &CallerCtx) -> Result<Option<OpenResult>> {
         convert_to_this_scheme_block(self.dup(old_id, buf))
     }
 
     #[allow(unused_variables)]
-    fn read_old(&self, id: usize, buf: &mut [u8]) -> Result<Option<usize>> {
+    fn read_old(&mut self, id: usize, buf: &mut [u8]) -> Result<Option<usize>> {
         Err(Error::new(EBADF))
     }
     #[allow(unused_variables)]
-    fn read(&self, id: usize, buf: &mut [u8], offset: u64, fcntl_flags: u32) -> Result<Option<usize>> {
+    fn read(&mut self, id: usize, buf: &mut [u8], offset: u64, fcntl_flags: u32) -> Result<Option<usize>> {
         self.read_old(id, buf)
     }
 
     #[allow(unused_variables)]
-    fn write_old(&self, id: usize, buf: &[u8]) -> Result<Option<usize>> {
+    fn write_old(&mut self, id: usize, buf: &[u8]) -> Result<Option<usize>> {
         Err(Error::new(EBADF))
     }
     #[allow(unused_variables)]
-    fn write(&self, id: usize, buf: &[u8], offset: u64, fcntl_flags: u32) -> Result<Option<usize>> {
+    fn write(&mut self, id: usize, buf: &[u8], offset: u64, fcntl_flags: u32) -> Result<Option<usize>> {
         self.write_old(id, buf)
     }
 
     #[allow(unused_variables)]
     fn getdents<'buf>(
-        &self,
+        &mut self,
         id: usize,
         buf: DirentBuf<&'buf mut [u8]>,
         opaque_offset: u64,
@@ -62,77 +62,77 @@ pub trait SchemeBlock {
     }
 
     #[allow(unused_variables)]
-    fn fsize(&self, id: usize) -> Result<Option<u64>> {
+    fn fsize(&mut self, id: usize) -> Result<Option<u64>> {
         Err(Error::new(ESPIPE))
     }
 
     #[allow(unused_variables)]
-    fn fchmod(&self, id: usize, mode: u16) -> Result<Option<usize>> {
+    fn fchmod(&mut self, id: usize, mode: u16) -> Result<Option<usize>> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn fchown(&self, id: usize, uid: u32, gid: u32) -> Result<Option<usize>> {
+    fn fchown(&mut self, id: usize, uid: u32, gid: u32) -> Result<Option<usize>> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn fcntl(&self, id: usize, cmd: usize, arg: usize) -> Result<Option<usize>> {
+    fn fcntl(&mut self, id: usize, cmd: usize, arg: usize) -> Result<Option<usize>> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn fevent(&self, id: usize, flags: EventFlags) -> Result<Option<EventFlags>> {
+    fn fevent(&mut self, id: usize, flags: EventFlags) -> Result<Option<EventFlags>> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn fpath(&self, id: usize, buf: &mut [u8]) -> Result<Option<usize>> {
+    fn fpath(&mut self, id: usize, buf: &mut [u8]) -> Result<Option<usize>> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn frename(&self, id: usize, path: &str, uid: u32, gid: u32) -> Result<Option<usize>> {
+    fn frename(&mut self, id: usize, path: &str, uid: u32, gid: u32) -> Result<Option<usize>> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn fstat(&self, id: usize, stat: &mut Stat) -> Result<Option<usize>> {
+    fn fstat(&mut self, id: usize, stat: &mut Stat) -> Result<Option<usize>> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn fstatvfs(&self, id: usize, stat: &mut StatVfs) -> Result<Option<usize>> {
+    fn fstatvfs(&mut self, id: usize, stat: &mut StatVfs) -> Result<Option<usize>> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn fsync(&self, id: usize) -> Result<Option<usize>> {
+    fn fsync(&mut self, id: usize) -> Result<Option<usize>> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn ftruncate(&self, id: usize, len: usize) -> Result<Option<usize>> {
+    fn ftruncate(&mut self, id: usize, len: usize) -> Result<Option<usize>> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn futimens(&self, id: usize, times: &[TimeSpec]) -> Result<Option<usize>> {
+    fn futimens(&mut self, id: usize, times: &[TimeSpec]) -> Result<Option<usize>> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn close(&self, id: usize) -> Result<Option<usize>> {
+    fn close(&mut self, id: usize) -> Result<Option<usize>> {
         Err(Error::new(EBADF))
     }
 
     #[allow(unused_variables)]
-    fn mmap_prep(&self, id: usize, offset: u64, size: usize, flags: MapFlags) -> Result<Option<usize>> {
+    fn mmap_prep(&mut self, id: usize, offset: u64, size: usize, flags: MapFlags) -> Result<Option<usize>> {
         Err(Error::new(EOPNOTSUPP))
     }
 
     #[allow(unused_variables)]
-    fn munmap(&self, id: usize, offset: u64, size: usize, flags: MunmapFlags) -> Result<Option<usize>> {
+    fn munmap(&mut self, id: usize, offset: u64, size: usize, flags: MunmapFlags) -> Result<Option<usize>> {
         Err(Error::new(EOPNOTSUPP))
     }
 }
diff --git a/src/scheme_block_mut.rs b/src/scheme_block_mut.rs
deleted file mode 100644
index 481515a..0000000
--- a/src/scheme_block_mut.rs
+++ /dev/null
@@ -1,138 +0,0 @@
-use crate::*;
-use syscall::dirent::DirentBuf;
-use syscall::error::*;
-
-pub trait SchemeBlockMut {
-    #[allow(unused_variables)]
-    fn open(&mut self, path: &str, flags: usize, uid: u32, gid: u32) -> Result<Option<usize>> {
-        Err(Error::new(ENOENT))
-    }
-    #[allow(unused_variables)]
-    fn xopen(&mut self, path: &str, flags: usize, ctx: &CallerCtx) -> Result<Option<OpenResult>> {
-        convert_to_this_scheme_block(self.open(path, flags, ctx.uid, ctx.gid))
-    }
-
-    #[allow(unused_variables)]
-    fn rmdir(&mut self, path: &str, uid: u32, gid: u32) -> Result<Option<usize>> {
-        Err(Error::new(ENOENT))
-    }
-
-    #[allow(unused_variables)]
-    fn unlink(&mut self, path: &str, uid: u32, gid: u32) -> Result<Option<usize>> {
-        Err(Error::new(ENOENT))
-    }
-
-    /* Resource operations */
-    #[allow(unused_variables)]
-    fn dup(&mut self, old_id: usize, buf: &[u8]) -> Result<Option<usize>> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn xdup(&mut self, old_id: usize, buf: &[u8], ctx: &CallerCtx) -> Result<Option<OpenResult>> {
-        convert_to_this_scheme_block(self.dup(old_id, buf))
-    }
-
-    #[allow(unused_variables)]
-    fn read_old(&mut self, id: usize, buf: &mut [u8]) -> Result<Option<usize>> {
-        Err(Error::new(EBADF))
-    }
-    #[allow(unused_variables)]
-    fn read(&mut self, id: usize, buf: &mut [u8], offset: u64, fcntl_flags: u32) -> Result<Option<usize>> {
-        self.read_old(id, buf)
-    }
-
-    #[allow(unused_variables)]
-    fn write_old(&mut self, id: usize, buf: &[u8]) -> Result<Option<usize>> {
-        Err(Error::new(EBADF))
-    }
-    #[allow(unused_variables)]
-    fn write(&mut self, id: usize, buf: &[u8], offset: u64, fcntl_flags: u32) -> Result<Option<usize>> {
-        self.write_old(id, buf)
-    }
-
-    #[allow(unused_variables)]
-    fn getdents<'buf>(
-        &mut self,
-        id: usize,
-        buf: DirentBuf<&'buf mut [u8]>,
-        opaque_offset: u64,
-    ) -> Result<Option<DirentBuf<&'buf mut [u8]>>> {
-        Err(Error::new(EOPNOTSUPP))
-    }
-
-    #[allow(unused_variables)]
-    fn fsize(&mut self, id: usize) -> Result<Option<u64>> {
-        Err(Error::new(ESPIPE))
-    }
-
-    #[allow(unused_variables)]
-    fn fchmod(&mut self, id: usize, mode: u16) -> Result<Option<usize>> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn fchown(&mut self, id: usize, uid: u32, gid: u32) -> Result<Option<usize>> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn fcntl(&mut self, id: usize, cmd: usize, arg: usize) -> Result<Option<usize>> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn fevent(&mut self, id: usize, flags: EventFlags) -> Result<Option<EventFlags>> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn fpath(&mut self, id: usize, buf: &mut [u8]) -> Result<Option<usize>> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn frename(&mut self, id: usize, path: &str, uid: u32, gid: u32) -> Result<Option<usize>> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn fstat(&mut self, id: usize, stat: &mut Stat) -> Result<Option<usize>> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn fstatvfs(&mut self, id: usize, stat: &mut StatVfs) -> Result<Option<usize>> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn fsync(&mut self, id: usize) -> Result<Option<usize>> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn ftruncate(&mut self, id: usize, len: usize) -> Result<Option<usize>> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn futimens(&mut self, id: usize, times: &[TimeSpec]) -> Result<Option<usize>> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn close(&mut self, id: usize) -> Result<Option<usize>> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn mmap_prep(&mut self, id: usize, offset: u64, size: usize, flags: MapFlags) -> Result<Option<usize>> {
-        Err(Error::new(EOPNOTSUPP))
-    }
-
-    #[allow(unused_variables)]
-    fn munmap(&mut self, id: usize, offset: u64, size: usize, flags: MunmapFlags) -> Result<Option<usize>> {
-        Err(Error::new(EOPNOTSUPP))
-    }
-}
diff --git a/src/scheme_mut.rs b/src/scheme_mut.rs
deleted file mode 100644
index ebcd30d..0000000
--- a/src/scheme_mut.rs
+++ /dev/null
@@ -1,138 +0,0 @@
-use crate::*;
-use syscall::dirent::DirentBuf;
-use syscall::error::*;
-
-pub trait SchemeMut {
-    #[allow(unused_variables)]
-    fn open(&mut self, path: &str, flags: usize, uid: u32, gid: u32) -> Result<usize> {
-        Err(Error::new(ENOENT))
-    }
-    #[allow(unused_variables)]
-    fn xopen(&mut self, path: &str, flags: usize, ctx: &CallerCtx) -> Result<OpenResult> {
-        convert_to_this_scheme(self.open(path, flags, ctx.uid, ctx.gid))
-    }
-
-    #[allow(unused_variables)]
-    fn rmdir(&mut self, path: &str, uid: u32, gid: u32) -> Result<usize> {
-        Err(Error::new(ENOENT))
-    }
-
-    #[allow(unused_variables)]
-    fn unlink(&mut self, path: &str, uid: u32, gid: u32) -> Result<usize> {
-        Err(Error::new(ENOENT))
-    }
-
-    /* Resource operations */
-    #[allow(unused_variables)]
-    fn dup(&mut self, old_id: usize, buf: &[u8]) -> Result<usize> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn xdup(&mut self, old_id: usize, buf: &[u8], ctx: &CallerCtx) -> Result<OpenResult> {
-        convert_to_this_scheme(self.dup(old_id, buf))
-    }
-
-    #[allow(unused_variables)]
-    fn read_old(&mut self, id: usize, buf: &mut [u8]) -> Result<usize> {
-        Err(Error::new(EBADF))
-    }
-    #[allow(unused_variables)]
-    fn read(&mut self, id: usize, buf: &mut [u8], offset: u64, fcntl_flags: u32) -> Result<usize> {
-        self.read_old(id, buf)
-    }
-
-    #[allow(unused_variables)]
-    fn write_old(&mut self, id: usize, buf: &[u8]) -> Result<usize> {
-        Err(Error::new(EBADF))
-    }
-    #[allow(unused_variables)]
-    fn write(&mut self, id: usize, buf: &[u8], offset: u64, fcntl_flags: u32) -> Result<usize> {
-        self.write_old(id, buf)
-    }
-
-    #[allow(unused_variables)]
-    fn getdents<'buf>(
-        &mut self,
-        id: usize,
-        buf: DirentBuf<&'buf mut [u8]>,
-        opaque_offset: u64,
-    ) -> Result<DirentBuf<&'buf mut [u8]>> {
-        Err(Error::new(EOPNOTSUPP))
-    }
-
-    #[allow(unused_variables)]
-    fn fsize(&mut self, id: usize) -> Result<u64> {
-        Err(Error::new(ESPIPE))
-    }
-
-    #[allow(unused_variables)]
-    fn fchmod(&mut self, id: usize, mode: u16) -> Result<usize> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn fchown(&mut self, id: usize, uid: u32, gid: u32) -> Result<usize> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn fcntl(&mut self, id: usize, cmd: usize, arg: usize) -> Result<usize> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn fevent(&mut self, id: usize, flags: EventFlags) -> Result<EventFlags> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn fpath(&mut self, id: usize, buf: &mut [u8]) -> Result<usize> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn frename(&mut self, id: usize, path: &str, uid: u32, gid: u32) -> Result<usize> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn fstat(&mut self, id: usize, stat: &mut Stat) -> Result<usize> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn fstatvfs(&mut self, id: usize, stat: &mut StatVfs) -> Result<usize> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn fsync(&mut self, id: usize) -> Result<usize> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn ftruncate(&mut self, id: usize, len: usize) -> Result<usize> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn futimens(&mut self, id: usize, times: &[TimeSpec]) -> Result<usize> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn close(&mut self, id: usize) -> Result<usize> {
-        Err(Error::new(EBADF))
-    }
-
-    #[allow(unused_variables)]
-    fn mmap_prep(&mut self, id: usize, offset: u64, size: usize, flags: MapFlags) -> Result<usize> {
-        Err(Error::new(EOPNOTSUPP))
-    }
-
-    #[allow(unused_variables)]
-    fn munmap(&mut self, id: usize, offset: u64, size: usize, flags: MunmapFlags) -> Result<usize> {
-        Err(Error::new(EOPNOTSUPP))
-    }
-}
-- 
GitLab