Add xopen and xdup.
This commit is contained in:
@@ -15,6 +15,7 @@ sed 's/trait Scheme/trait SchemeBlock/' scheme.rs \
|
||||
| sed 's/\.map(|o| o as usize)/.map(|o| o.map(|o| o as usize))/' \
|
||||
| sed 's/Ok(0)/Ok(Some(0))/g' \
|
||||
| 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"
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
use core::{slice, str};
|
||||
|
||||
use crate::Result;
|
||||
|
||||
pub use self::scheme::Scheme;
|
||||
pub use self::scheme_mut::SchemeMut;
|
||||
pub use self::scheme_block::SchemeBlock;
|
||||
@@ -16,3 +18,21 @@ mod scheme_mut;
|
||||
mod scheme_block;
|
||||
mod scheme_block_mut;
|
||||
mod seek;
|
||||
|
||||
pub struct CallerCtx {
|
||||
pub pid: usize,
|
||||
pub uid: u32,
|
||||
pub gid: u32,
|
||||
}
|
||||
|
||||
pub enum OpenResult {
|
||||
ThisScheme { number: usize },
|
||||
OtherScheme { fd: usize },
|
||||
}
|
||||
|
||||
pub(crate) fn convert_to_this_scheme(r: Result<usize>) -> Result<OpenResult> {
|
||||
r.map(|number| OpenResult::ThisScheme { number })
|
||||
}
|
||||
pub(crate) fn convert_to_this_scheme_block(r: Result<Option<usize>>) -> Result<Option<OpenResult>> {
|
||||
r.map(|o| o.map(|number| OpenResult::ThisScheme { number }))
|
||||
}
|
||||
|
||||
+12
-1
@@ -1,10 +1,12 @@
|
||||
use core::{mem, slice};
|
||||
|
||||
use crate::CallerCtx;
|
||||
use crate::OpenResult;
|
||||
use crate::data::*;
|
||||
use crate::error::*;
|
||||
use crate::flag::*;
|
||||
use crate::number::*;
|
||||
use crate::scheme::str_from_raw_parts;
|
||||
use crate::scheme::*;
|
||||
|
||||
pub trait Scheme {
|
||||
fn handle(&self, packet: &mut Packet) {
|
||||
@@ -81,6 +83,10 @@ pub trait Scheme {
|
||||
fn open(&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> {
|
||||
convert_to_this_scheme(self.open(path, flags, ctx.uid, ctx.gid))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn chmod(&self, path: &str, mode: u16, uid: u32, gid: u32) -> Result<usize> {
|
||||
@@ -103,6 +109,11 @@ pub trait Scheme {
|
||||
Err(Error::new(EBADF))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn xdup(&self, old_id: usize, buf: &[u8], ctx: &CallerCtx) -> Result<OpenResult> {
|
||||
convert_to_this_scheme(self.dup(old_id, buf))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn read(&self, id: usize, buf: &mut [u8]) -> Result<usize> {
|
||||
Err(Error::new(EBADF))
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
use core::{mem, slice};
|
||||
|
||||
use crate::CallerCtx;
|
||||
use crate::OpenResult;
|
||||
use crate::data::*;
|
||||
use crate::error::*;
|
||||
use crate::flag::*;
|
||||
use crate::number::*;
|
||||
use crate::scheme::str_from_raw_parts;
|
||||
use crate::scheme::*;
|
||||
|
||||
pub trait SchemeBlock {
|
||||
fn handle(&self, packet: &Packet) -> Option<usize> {
|
||||
@@ -81,6 +83,10 @@ pub trait SchemeBlock {
|
||||
fn open(&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>> {
|
||||
convert_to_this_scheme_block(self.open(path, flags, ctx.uid, ctx.gid))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn chmod(&self, path: &str, mode: u16, uid: u32, gid: u32) -> Result<Option<usize>> {
|
||||
@@ -103,6 +109,11 @@ pub trait SchemeBlock {
|
||||
Err(Error::new(EBADF))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn xdup(&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(&self, id: usize, buf: &mut [u8]) -> Result<Option<usize>> {
|
||||
Err(Error::new(EBADF))
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
use core::{mem, slice};
|
||||
|
||||
use crate::CallerCtx;
|
||||
use crate::OpenResult;
|
||||
use crate::data::*;
|
||||
use crate::error::*;
|
||||
use crate::flag::*;
|
||||
use crate::number::*;
|
||||
use crate::scheme::str_from_raw_parts;
|
||||
use crate::scheme::*;
|
||||
|
||||
pub trait SchemeBlockMut {
|
||||
fn handle(&mut self, packet: &Packet) -> Option<usize> {
|
||||
@@ -81,6 +83,10 @@ pub trait SchemeBlockMut {
|
||||
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 chmod(&mut self, path: &str, mode: u16, uid: u32, gid: u32) -> Result<Option<usize>> {
|
||||
@@ -103,6 +109,11 @@ pub trait SchemeBlockMut {
|
||||
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(&mut self, id: usize, buf: &mut [u8]) -> Result<Option<usize>> {
|
||||
Err(Error::new(EBADF))
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
use core::{mem, slice};
|
||||
|
||||
use crate::CallerCtx;
|
||||
use crate::OpenResult;
|
||||
use crate::data::*;
|
||||
use crate::error::*;
|
||||
use crate::flag::*;
|
||||
use crate::number::*;
|
||||
use crate::scheme::str_from_raw_parts;
|
||||
use crate::scheme::*;
|
||||
|
||||
pub trait SchemeMut {
|
||||
fn handle(&mut self, packet: &mut Packet) {
|
||||
@@ -81,6 +83,10 @@ pub trait SchemeMut {
|
||||
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 chmod(&mut self, path: &str, mode: u16, uid: u32, gid: u32) -> Result<usize> {
|
||||
@@ -103,6 +109,11 @@ pub trait SchemeMut {
|
||||
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(&mut self, id: usize, buf: &mut [u8]) -> Result<usize> {
|
||||
Err(Error::new(EBADF))
|
||||
|
||||
Reference in New Issue
Block a user