Make it an error to supply a dup buffer to schemes that do not handle it

This commit is contained in:
Jeremy Soller
2017-07-22 12:54:28 -06:00
parent 4ae6ed9d4c
commit fc914e0cae
12 changed files with 60 additions and 12 deletions

View File

@@ -47,7 +47,11 @@ impl Scheme for DebugScheme {
Ok(id)
}
fn dup(&self, id: usize, _buf: &[u8]) -> Result<usize> {
fn dup(&self, id: usize, buf: &[u8]) -> Result<usize> {
if ! buf.is_empty() {
return Err(Error::new(ENOENT));
}
let flags = {
let handles = self.handles.read();
*handles.get(&id).ok_or(Error::new(EBADF))?

View File

@@ -90,7 +90,11 @@ impl Scheme for EnvScheme {
}
}
fn dup(&self, id: usize, _buf: &[u8]) -> Result<usize> {
fn dup(&self, id: usize, buf: &[u8]) -> Result<usize> {
if ! buf.is_empty() {
return Err(Error::new(ENOENT));
}
let new_handle = {
let handles = self.handles.read();
let handle = handles.get(&id).ok_or(Error::new(EBADF))?;

View File

@@ -39,7 +39,11 @@ impl Scheme for EventScheme {
Ok(id)
}
fn dup(&self, id: usize, _buf: &[u8]) -> Result<usize> {
fn dup(&self, id: usize, buf: &[u8]) -> Result<usize> {
if ! buf.is_empty() {
return Err(Error::new(ENOENT));
}
let handle = {
let handles = self.handles.read();
let handle_weak = handles.get(&id).ok_or(Error::new(EBADF))?;

View File

@@ -65,7 +65,11 @@ impl Scheme for InitFsScheme {
Err(Error::new(ENOENT))
}
fn dup(&self, id: usize, _buf: &[u8]) -> Result<usize> {
fn dup(&self, id: usize, buf: &[u8]) -> Result<usize> {
if ! buf.is_empty() {
return Err(Error::new(ENOENT));
}
let (path, flags, data, mode, seek) = {
let handles = self.handles.read();
let handle = handles.get(&id).ok_or(Error::new(EBADF))?;

View File

@@ -48,7 +48,11 @@ impl Scheme for IrqScheme {
}
}
fn dup(&self, file: usize, _buf: &[u8]) -> Result<usize> {
fn dup(&self, file: usize, buf: &[u8]) -> Result<usize> {
if ! buf.is_empty() {
return Err(Error::new(ENOENT));
}
Ok(file)
}

View File

@@ -49,7 +49,11 @@ impl Scheme for DiskScheme {
Ok(id)
}
fn dup(&self, id: usize, _buf: &[u8]) -> Result<usize> {
fn dup(&self, id: usize, buf: &[u8]) -> Result<usize> {
if ! buf.is_empty() {
return Err(Error::new(ENOENT));
}
let (path, data, mode, seek) = {
let handles = self.handles.read();
let handle = handles.get(&id).ok_or(Error::new(EBADF))?;

View File

@@ -8,7 +8,11 @@ impl Scheme for NullScheme {
Ok(0)
}
fn dup(&self, _file: usize, _buf: &[u8]) -> Result<usize> {
fn dup(&self, _file: usize, buf: &[u8]) -> Result<usize> {
if ! buf.is_empty() {
return Err(Error::new(ENOENT));
}
Ok(0)
}

View File

@@ -51,7 +51,11 @@ impl PipeScheme {
}
impl Scheme for PipeScheme {
fn dup(&self, id: usize, _buf: &[u8]) -> Result<usize> {
fn dup(&self, id: usize, buf: &[u8]) -> Result<usize> {
if ! buf.is_empty() {
return Err(Error::new(ENOENT));
}
let mut pipes = pipes_mut();
let read_option = if let Some(pipe) = pipes.0.get(&id) {

View File

@@ -71,7 +71,11 @@ impl Scheme for RootScheme {
}
}
fn dup(&self, file: usize, _buf: &[u8]) -> Result<usize> {
fn dup(&self, file: usize, buf: &[u8]) -> Result<usize> {
if ! buf.is_empty() {
return Err(Error::new(ENOENT));
}
let mut handles = self.handles.write();
let inner = {
let inner = handles.get(&file).ok_or(Error::new(EBADF))?;

View File

@@ -100,7 +100,11 @@ impl Scheme for SysScheme {
Err(Error::new(ENOENT))
}
fn dup(&self, id: usize, _buf: &[u8]) -> Result<usize> {
fn dup(&self, id: usize, buf: &[u8]) -> Result<usize> {
if ! buf.is_empty() {
return Err(Error::new(ENOENT));
}
let (path, data, mode, seek) = {
let handles = self.handles.read();
let handle = handles.get(&id).ok_or(Error::new(EBADF))?;

View File

@@ -45,7 +45,11 @@ impl Scheme for TimeScheme {
Ok(id)
}
fn dup(&self, id: usize, _buf: &[u8]) -> Result<usize> {
fn dup(&self, id: usize, buf: &[u8]) -> Result<usize> {
if ! buf.is_empty() {
return Err(Error::new(ENOENT));
}
let clock = {
let handles = self.handles.read();
*handles.get(&id).ok_or(Error::new(EBADF))?

View File

@@ -8,7 +8,11 @@ impl Scheme for ZeroScheme {
Ok(0)
}
fn dup(&self, _file: usize, _buf: &[u8]) -> Result<usize> {
fn dup(&self, _file: usize, buf: &[u8]) -> Result<usize> {
if ! buf.is_empty() {
return Err(Error::new(ENOENT));
}
Ok(0)
}