summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2020-06-14 15:33:40 +0000
committerAlyssa Ross <hi@alyssa.is>2020-06-15 09:37:48 +0000
commitb7f9c8db01cd673a8b20bb5649f6cd06371b9695 (patch)
tree6099ff66d48e2e3f2af0090d04df64e974d55ad9
parent5b422013619bb20b3595c2a89ad8a0a4875e41f9 (diff)
downloadcrosvm-b7f9c8db01cd673a8b20bb5649f6cd06371b9695.tar
crosvm-b7f9c8db01cd673a8b20bb5649f6cd06371b9695.tar.gz
crosvm-b7f9c8db01cd673a8b20bb5649f6cd06371b9695.tar.bz2
crosvm-b7f9c8db01cd673a8b20bb5649f6cd06371b9695.tar.lz
crosvm-b7f9c8db01cd673a8b20bb5649f6cd06371b9695.tar.xz
crosvm-b7f9c8db01cd673a8b20bb5649f6cd06371b9695.tar.zst
crosvm-b7f9c8db01cd673a8b20bb5649f6cd06371b9695.zip
impl MsgOnSocket for PathBuf
-rw-r--r--msg_socket/src/msg_on_socket.rs23
1 files changed, 22 insertions, 1 deletions
diff --git a/msg_socket/src/msg_on_socket.rs b/msg_socket/src/msg_on_socket.rs
index 06b2e3c..9f87c78 100644
--- a/msg_socket/src/msg_on_socket.rs
+++ b/msg_socket/src/msg_on_socket.rs
@@ -6,13 +6,15 @@ mod slice;
 mod tuple;
 
 use std::borrow::Cow;
+use std::ffi::OsString;
 use std::fmt::{self, Display};
 use std::fs::File;
 use std::mem::{size_of, transmute_copy, MaybeUninit};
 use std::net::{TcpListener, TcpStream, UdpSocket};
 use std::num::Wrapping;
-use std::os::unix::io::{AsRawFd, FromRawFd, RawFd};
 use std::os::unix::net::{UnixDatagram, UnixListener, UnixStream};
+use std::os::unix::prelude::*;
+use std::path::PathBuf;
 use std::result;
 use std::sync::Arc;
 
@@ -509,6 +511,25 @@ impl MsgOnSocket for String {
     }
 }
 
+impl MsgOnSocket for PathBuf {
+    fn uses_fd() -> bool {
+        false
+    }
+
+    fn msg_size(&self) -> usize {
+        Cow::Borrowed(self.as_os_str().as_bytes()).msg_size()
+    }
+
+    unsafe fn read_from_buffer(buffer: &[u8], fds: &[RawFd]) -> MsgResult<(Self, usize)> {
+        let (bytes, fd_count) = Vec::read_from_buffer(buffer, fds)?;
+        Ok((OsString::from_vec(bytes).into(), fd_count))
+    }
+
+    fn write_to_buffer(&self, buffer: &mut [u8], fds: &mut [RawFd]) -> MsgResult<usize> {
+        Cow::Borrowed(self.as_os_str().as_bytes()).write_to_buffer(buffer, fds)
+    }
+}
+
 #[test]
 fn round_trip_string() {
     use crate::{MsgReceiver, MsgSender};