summary refs log tree commit diff
path: root/sys_util/src/shm.rs
diff options
context:
space:
mode:
Diffstat (limited to 'sys_util/src/shm.rs')
-rw-r--r--sys_util/src/shm.rs59
1 files changed, 53 insertions, 6 deletions
diff --git a/sys_util/src/shm.rs b/sys_util/src/shm.rs
index a72fe70..bb008d9 100644
--- a/sys_util/src/shm.rs
+++ b/sys_util/src/shm.rs
@@ -4,7 +4,7 @@
 
 use std::ffi::CStr;
 use std::fs::File;
-use std::io::{Seek, SeekFrom};
+use std::io::{self, Read, Seek, SeekFrom, Write};
 use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
 
 use libc::{
@@ -178,12 +178,62 @@ impl SharedMemory {
     }
 }
 
+impl Read for SharedMemory {
+    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
+        self.fd.read(buf)
+    }
+}
+
+impl Read for &SharedMemory {
+    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
+        (&self.fd).read(buf)
+    }
+}
+
+impl Write for SharedMemory {
+    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+        self.fd.write(buf)
+    }
+
+    fn flush(&mut self) -> io::Result<()> {
+        self.fd.flush()
+    }
+}
+
+impl Write for &SharedMemory {
+    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+        (&self.fd).write(buf)
+    }
+
+    fn flush(&mut self) -> io::Result<()> {
+        (&self.fd).flush()
+    }
+}
+
+impl Seek for SharedMemory {
+    fn seek(&mut self, pos: SeekFrom) -> io::Result<u64> {
+        self.fd.seek(pos)
+    }
+}
+
+impl Seek for &SharedMemory {
+    fn seek(&mut self, pos: SeekFrom) -> io::Result<u64> {
+        (&self.fd).seek(pos)
+    }
+}
+
 impl AsRawFd for SharedMemory {
     fn as_raw_fd(&self) -> RawFd {
         self.fd.as_raw_fd()
     }
 }
 
+impl AsRawFd for &SharedMemory {
+    fn as_raw_fd(&self) -> RawFd {
+        self.fd.as_raw_fd()
+    }
+}
+
 impl Into<File> for SharedMemory {
     fn into(self) -> File {
         self.fd
@@ -213,7 +263,6 @@ mod tests {
 
     use std::ffi::CString;
     use std::fs::read_link;
-    use std::io::repeat;
 
     use data_model::VolatileMemory;
 
@@ -312,8 +361,7 @@ mod tests {
         mmap1
             .get_slice(0, 4096)
             .expect("failed to get mmap slice")
-            .read_from(&mut repeat(0x45))
-            .expect("failed to fill mmap slice");
+            .write_bytes(0x45);
 
         for i in 0..4096 {
             assert_eq!(mmap2.get_ref::<u8>(i).unwrap().load(), 0x45u8);
@@ -337,8 +385,7 @@ mod tests {
         mmap1
             .get_slice(0, 4096)
             .expect("failed to get mmap slice")
-            .read_from(&mut repeat(0x45))
-            .expect("failed to fill mmap slice");
+            .write_bytes(0x45);
 
         for i in 0..4096 {
             assert_eq!(mmap2.get_ref::<u8>(i).unwrap().load(), 0);