fix clippy warnings
[nihav.git] / nihav-core / src / io / byteio.rs
index b3d06216d842c2a9790aff6dd7cb499bfd2d2ea0..61b8816f2dd78ae2d7bc0db5f1f2bcad3fa244e8 100644 (file)
@@ -624,7 +624,7 @@ impl<T: Read+Seek> ByteIO for FileReader<T> {
     }
 
     fn tell(&mut self) -> u64 {
-        self.file.seek(SeekFrom::Current(0)).unwrap()
+        self.file.stream_position().unwrap()
     }
 
     fn seek(&mut self, pos: SeekFrom) -> ByteIOResult<u64> {
@@ -681,7 +681,7 @@ impl<T: Read+Seek> BoundedFileReader<T> {
     /// Destroys the reader and releases the reader resource for a further use.
     pub fn finish(self) -> Box<T> { self.file }
     fn real_tell(&mut self) -> u64 {
-        self.file.seek(SeekFrom::Current(0)).unwrap()
+        self.file.stream_position().unwrap()
     }
     fn max_read_len(&mut self, len: usize) -> usize {
         if let Some(epos) = self.end {
@@ -717,6 +717,12 @@ impl<T: Read+Seek> ByteIO for BoundedFileReader<T> {
     }
 
     fn read_buf(&mut self, buf: &mut [u8]) -> ByteIOResult<usize> {
+        if let Some(epos) = self.end {
+            if self.real_tell() >= epos {
+                self.eof = true;
+                return Err(ByteIOError::EOF);
+            }
+        }
         let len = self.max_read_len(buf.len());
         match self.file.read_exact(&mut buf[..len]) {
             Ok(()) if len == buf.len() => Ok(buf.len()),
@@ -736,16 +742,24 @@ impl<T: Read+Seek> ByteIO for BoundedFileReader<T> {
     }
 
     fn read_buf_some(&mut self, buf: &mut [u8]) -> ByteIOResult<usize> {
+        if let Some(epos) = self.end {
+            if self.real_tell() >= epos {
+                self.eof = true;
+                return Err(ByteIOError::EOF);
+            }
+        }
         let len = self.max_read_len(buf.len());
         let ret = self.file.read(&mut buf[..len]);
         if ret.is_err() { return Err(ByteIOError::ReadError); }
         let sz = ret.unwrap();
         if sz < len {
-            if let Err(_err) = self.file.read(&mut buf[sz..][..1]) {
-                self.eof = true;
-            } else {
+            if let Ok(1) = self.file.read(&mut buf[sz..][..1]) {
                 return Ok(sz + 1);
             }
+            self.eof = true;
+            if sz == 0 {
+                return Err(ByteIOError::EOF);
+            }
         }
         Ok(sz)
     }
@@ -765,7 +779,7 @@ impl<T: Read+Seek> ByteIO for BoundedFileReader<T> {
     }
 
     fn tell(&mut self) -> u64 {
-        self.file.seek(SeekFrom::Current(0)).unwrap() - self.start
+        self.file.stream_position().unwrap() - self.start
     }
 
     fn seek(&mut self, pos: SeekFrom) -> ByteIOResult<u64> {
@@ -1174,7 +1188,7 @@ impl<T: Write+Seek> ByteIO for FileWriter<T> {
     }
 
     fn tell(&mut self) -> u64 {
-        self.file.seek(SeekFrom::Current(0)).unwrap()
+        self.file.stream_position().unwrap()
     }
 
     fn seek(&mut self, pos: SeekFrom) -> ByteIOResult<u64> {