From d82eb57e9c7e90219d50bc2ea71352d888bf28a9 Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jeremy@system76.com>
Date: Tue, 30 Jun 2020 09:08:55 -0600
Subject: [PATCH] Update live: to new seek function

---
 src/scheme/live.rs | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/src/scheme/live.rs b/src/scheme/live.rs
index fec8371c..fadcd6dc 100644
--- a/src/scheme/live.rs
+++ b/src/scheme/live.rs
@@ -9,7 +9,7 @@ use spin::RwLock;
 use syscall::data::Stat;
 use syscall::error::*;
 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 {
     path: &'static [u8],
@@ -94,19 +94,13 @@ impl Scheme for DiskScheme {
         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 handle = handles.get_mut(&id).ok_or(Error::new(EBADF))?;
         let data = handle.data.read();
-
-        handle.seek = match whence {
-            SEEK_SET => cmp::min(data.len(), pos),
-            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)
+        let new_offset = calc_seek_offset_usize(handle.seek, pos, whence, data.len())?;
+        handle.seek = new_offset as usize;
+        Ok(new_offset)
     }
 
     fn fcntl(&self, id: usize, _cmd: usize, _arg: usize) -> Result<usize> {
-- 
GitLab