Skip to content
Snippets Groups Projects
Verified Commit d82eb57e authored by Jeremy Soller's avatar Jeremy Soller
Browse files

Update live: to new seek function

parent 7989aa03
No related branches found
No related tags found
No related merge requests found
...@@ -9,7 +9,7 @@ use spin::RwLock; ...@@ -9,7 +9,7 @@ use spin::RwLock;
use syscall::data::Stat; use syscall::data::Stat;
use syscall::error::*; use syscall::error::*;
use syscall::flag::{MODE_FILE, SEEK_SET, SEEK_CUR, SEEK_END}; use syscall::flag::{MODE_FILE, SEEK_SET, SEEK_CUR, SEEK_END};
use syscall::scheme::Scheme; use syscall::scheme::{calc_seek_offset_usize, Scheme};
struct Handle { struct Handle {
path: &'static [u8], path: &'static [u8],
...@@ -94,19 +94,13 @@ impl Scheme for DiskScheme { ...@@ -94,19 +94,13 @@ impl Scheme for DiskScheme {
Ok(i) Ok(i)
} }
fn seek(&self, id: usize, pos: usize, whence: usize) -> Result<usize> { fn seek(&self, id: usize, pos: isize, whence: usize) -> Result<isize> {
let mut handles = self.handles.write(); let mut handles = self.handles.write();
let handle = handles.get_mut(&id).ok_or(Error::new(EBADF))?; let handle = handles.get_mut(&id).ok_or(Error::new(EBADF))?;
let data = handle.data.read(); let data = handle.data.read();
let new_offset = calc_seek_offset_usize(handle.seek, pos, whence, data.len())?;
handle.seek = match whence { handle.seek = new_offset as usize;
SEEK_SET => cmp::min(data.len(), pos), Ok(new_offset)
SEEK_CUR => cmp::max(0, cmp::min(data.len() as isize, handle.seek as isize + pos as isize)) as usize,
SEEK_END => cmp::max(0, cmp::min(data.len() as isize, data.len() as isize + pos as isize)) as usize,
_ => return Err(Error::new(EINVAL))
};
Ok(handle.seek)
} }
fn fcntl(&self, id: usize, _cmd: usize, _arg: usize) -> Result<usize> { fn fcntl(&self, id: usize, _cmd: usize, _arg: usize) -> Result<usize> {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment