summary refs log tree commit diff
path: root/msg_socket/src/msg_on_socket.rs
diff options
context:
space:
mode:
authorDaniel Prilik <prilik@google.com>2019-04-01 16:44:10 -0700
committerchrome-bot <chrome-bot@chromium.org>2019-04-04 15:11:04 -0700
commit0b3a4af1051f70ee5d3dd215a81a9eef07df3f7e (patch)
tree6b6e00f2833f809c12cdad6bbc2818251623b5f0 /msg_socket/src/msg_on_socket.rs
parente8243e326ad918d4e5ab1633abaa769e811e8670 (diff)
downloadcrosvm-0b3a4af1051f70ee5d3dd215a81a9eef07df3f7e.tar
crosvm-0b3a4af1051f70ee5d3dd215a81a9eef07df3f7e.tar.gz
crosvm-0b3a4af1051f70ee5d3dd215a81a9eef07df3f7e.tar.bz2
crosvm-0b3a4af1051f70ee5d3dd215a81a9eef07df3f7e.tar.lz
crosvm-0b3a4af1051f70ee5d3dd215a81a9eef07df3f7e.tar.xz
crosvm-0b3a4af1051f70ee5d3dd215a81a9eef07df3f7e.tar.zst
crosvm-0b3a4af1051f70ee5d3dd215a81a9eef07df3f7e.zip
msg_socket: derive MsgOnSocket for bool
BUG=chromium:936567
TEST=cargo test -p msg_socket

Change-Id: I5f9228ceaa7a3fcfbe154bf173a76e0ee26b8c50
Reviewed-on: https://chromium-review.googlesource.com/1548694
Commit-Ready: Daniel Prilik <prilik@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'msg_socket/src/msg_on_socket.rs')
-rw-r--r--msg_socket/src/msg_on_socket.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/msg_socket/src/msg_on_socket.rs b/msg_socket/src/msg_on_socket.rs
index cf3aad0..cf5e528 100644
--- a/msg_socket/src/msg_on_socket.rs
+++ b/msg_socket/src/msg_on_socket.rs
@@ -257,6 +257,31 @@ impl MsgOnSocket for usize {
     }
 }
 
+// Encode bool as a u8 of value 0 or 1
+impl MsgOnSocket for bool {
+    fn msg_size() -> usize {
+        std::mem::size_of::<u8>()
+    }
+    unsafe fn read_from_buffer(buffer: &[u8], _fds: &[RawFd]) -> MsgResult<(Self, usize)> {
+        if buffer.len() < std::mem::size_of::<u8>() {
+            return Err(MsgError::WrongMsgBufferSize);
+        }
+        let t: u8 = buffer[0];
+        match t {
+            0 => Ok((false, 0)),
+            1 => Ok((true, 0)),
+            _ => Err(MsgError::InvalidType),
+        }
+    }
+    fn write_to_buffer(&self, buffer: &mut [u8], _fds: &mut [RawFd]) -> MsgResult<usize> {
+        if buffer.len() < std::mem::size_of::<u8>() {
+            return Err(MsgError::WrongMsgBufferSize);
+        }
+        buffer[0] = *self as u8;
+        Ok(0)
+    }
+}
+
 macro_rules! le_impl {
     ($type:ident, $le_type:ident) => {
         impl MsgOnSocket for $type {