diff options
Diffstat (limited to 'src/sleep_file.rs')
-rw-r--r-- | src/sleep_file.rs | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/sleep_file.rs b/src/sleep_file.rs index 71e95ba..90e08c4 100644 --- a/src/sleep_file.rs +++ b/src/sleep_file.rs @@ -1,6 +1,6 @@ use std::io::prelude::*; -use std::io::SeekFrom; +use std::os::unix::fs::FileExt; use std::path::Path; use std::fs::File; use integer_encoding::FixedInt; @@ -139,9 +139,10 @@ impl SleepStorage for SleepFile { bail!("Tried to read beyond end of SLEEP file"); } let mut entry = vec![0; entry_size]; - self.file - .seek(SeekFrom::Start(32 + (entry_size as u64) * index))?; - self.file.read_exact(&mut entry)?; + let got = self.file.read_at(&mut entry, 32 + (entry_size as u64) * index)?; + if got != entry.len() { + bail!("Short file read"); + } Ok(entry) } @@ -150,9 +151,10 @@ impl SleepStorage for SleepFile { if data.len() != self.entry_size as usize { bail!("Tried to write mis-sized data"); } - self.file - .seek(SeekFrom::Start(32 + (self.entry_size as u64) * index))?; - self.file.write_all(&data)?; + let put = self.file.write_at(&data, 32 + (self.entry_size as u64) * index)?; + if put != data.len() { + bail!("Short file write"); + } Ok(()) } |