Add null: and zero:
This commit is contained in:
parent
b95a399a59
commit
56ac46e933
|
@ -20,9 +20,11 @@ use self::event::EventScheme;
|
||||||
use self::env::EnvScheme;
|
use self::env::EnvScheme;
|
||||||
use self::initfs::InitFsScheme;
|
use self::initfs::InitFsScheme;
|
||||||
use self::irq::{IRQ_SCHEME_ID, IrqScheme};
|
use self::irq::{IRQ_SCHEME_ID, IrqScheme};
|
||||||
|
use self::null::NullScheme;
|
||||||
use self::pipe::{PIPE_SCHEME_ID, PipeScheme};
|
use self::pipe::{PIPE_SCHEME_ID, PipeScheme};
|
||||||
use self::root::{ROOT_SCHEME_ID, RootScheme};
|
use self::root::{ROOT_SCHEME_ID, RootScheme};
|
||||||
use self::sys::SysScheme;
|
use self::sys::SysScheme;
|
||||||
|
use self::zero::ZeroScheme;
|
||||||
|
|
||||||
/// Debug scheme
|
/// Debug scheme
|
||||||
pub mod debug;
|
pub mod debug;
|
||||||
|
@ -39,6 +41,9 @@ pub mod initfs;
|
||||||
/// IRQ handling
|
/// IRQ handling
|
||||||
pub mod irq;
|
pub mod irq;
|
||||||
|
|
||||||
|
/// Null scheme
|
||||||
|
pub mod null;
|
||||||
|
|
||||||
/// Anonymouse pipe
|
/// Anonymouse pipe
|
||||||
pub mod pipe;
|
pub mod pipe;
|
||||||
|
|
||||||
|
@ -51,6 +56,9 @@ pub mod sys;
|
||||||
/// Userspace schemes
|
/// Userspace schemes
|
||||||
pub mod user;
|
pub mod user;
|
||||||
|
|
||||||
|
/// Zero scheme
|
||||||
|
pub mod zero;
|
||||||
|
|
||||||
/// Limit on number of schemes
|
/// Limit on number of schemes
|
||||||
pub const SCHEME_MAX_SCHEMES: usize = 65536;
|
pub const SCHEME_MAX_SCHEMES: usize = 65536;
|
||||||
|
|
||||||
|
@ -132,8 +140,10 @@ fn init_schemes() -> RwLock<SchemeList> {
|
||||||
list.insert(Box::new(*b"env"), Arc::new(Box::new(EnvScheme::new()))).expect("failed to insert env scheme");
|
list.insert(Box::new(*b"env"), Arc::new(Box::new(EnvScheme::new()))).expect("failed to insert env scheme");
|
||||||
list.insert(Box::new(*b"initfs"), Arc::new(Box::new(InitFsScheme::new()))).expect("failed to insert initfs scheme");
|
list.insert(Box::new(*b"initfs"), Arc::new(Box::new(InitFsScheme::new()))).expect("failed to insert initfs scheme");
|
||||||
IRQ_SCHEME_ID.store(list.insert(Box::new(*b"irq"), Arc::new(Box::new(IrqScheme))).expect("failed to insert irq scheme"), Ordering::SeqCst);
|
IRQ_SCHEME_ID.store(list.insert(Box::new(*b"irq"), Arc::new(Box::new(IrqScheme))).expect("failed to insert irq scheme"), Ordering::SeqCst);
|
||||||
|
list.insert(Box::new(*b"null"), Arc::new(Box::new(NullScheme))).expect("failed to insert null scheme");
|
||||||
PIPE_SCHEME_ID.store(list.insert(Box::new(*b"pipe"), Arc::new(Box::new(PipeScheme))).expect("failed to insert pipe scheme"), Ordering::SeqCst);
|
PIPE_SCHEME_ID.store(list.insert(Box::new(*b"pipe"), Arc::new(Box::new(PipeScheme))).expect("failed to insert pipe scheme"), Ordering::SeqCst);
|
||||||
list.insert(Box::new(*b"sys"), Arc::new(Box::new(SysScheme::new()))).expect("failed to insert sys scheme");
|
list.insert(Box::new(*b"sys"), Arc::new(Box::new(SysScheme::new()))).expect("failed to insert sys scheme");
|
||||||
|
list.insert(Box::new(*b"zero"), Arc::new(Box::new(ZeroScheme))).expect("failed to insert zero scheme");
|
||||||
RwLock::new(list)
|
RwLock::new(list)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
37
kernel/scheme/null.rs
Normal file
37
kernel/scheme/null.rs
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
use syscall::error::*;
|
||||||
|
use syscall::scheme::Scheme;
|
||||||
|
|
||||||
|
pub struct NullScheme;
|
||||||
|
|
||||||
|
impl Scheme for NullScheme {
|
||||||
|
fn open(&self, _path: &[u8], _flags: usize, _uid: u32, _gid: u32) -> Result<usize> {
|
||||||
|
Ok(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn dup(&self, _file: usize, _buf: &[u8]) -> Result<usize> {
|
||||||
|
Ok(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Read the file `number` into the `buffer`
|
||||||
|
///
|
||||||
|
/// Returns the number of bytes read
|
||||||
|
fn read(&self, _file: usize, _buf: &mut [u8]) -> Result<usize> {
|
||||||
|
Ok(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Write the `buffer` to the `file`
|
||||||
|
///
|
||||||
|
/// Returns the number of bytes written
|
||||||
|
fn write(&self, _file: usize, buffer: &[u8]) -> Result<usize> {
|
||||||
|
Ok(buffer.len())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn fsync(&self, _file: usize) -> Result<usize> {
|
||||||
|
Ok(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Close the file `number`
|
||||||
|
fn close(&self, _file: usize) -> Result<usize> {
|
||||||
|
Ok(0)
|
||||||
|
}
|
||||||
|
}
|
42
kernel/scheme/zero.rs
Normal file
42
kernel/scheme/zero.rs
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
use syscall::error::*;
|
||||||
|
use syscall::scheme::Scheme;
|
||||||
|
|
||||||
|
pub struct ZeroScheme;
|
||||||
|
|
||||||
|
impl Scheme for ZeroScheme {
|
||||||
|
fn open(&self, _path: &[u8], _flags: usize, _uid: u32, _gid: u32) -> Result<usize> {
|
||||||
|
Ok(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn dup(&self, _file: usize, _buf: &[u8]) -> Result<usize> {
|
||||||
|
Ok(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Read the file `number` into the `buffer`
|
||||||
|
///
|
||||||
|
/// Returns the number of bytes read
|
||||||
|
fn read(&self, _file: usize, buf: &mut [u8]) -> Result<usize> {
|
||||||
|
let mut i = 0;
|
||||||
|
while i < buf.len() {
|
||||||
|
buf[i] = 0;
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
Ok(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Write the `buffer` to the `file`
|
||||||
|
///
|
||||||
|
/// Returns the number of bytes written
|
||||||
|
fn write(&self, _file: usize, buffer: &[u8]) -> Result<usize> {
|
||||||
|
Ok(buffer.len())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn fsync(&self, _file: usize) -> Result<usize> {
|
||||||
|
Ok(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Close the file `number`
|
||||||
|
fn close(&self, _file: usize) -> Result<usize> {
|
||||||
|
Ok(0)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue