diff options
author | Alyssa Ross <hi@alyssa.is> | 2020-06-14 15:33:40 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2020-06-15 09:37:48 +0000 |
commit | b7f9c8db01cd673a8b20bb5649f6cd06371b9695 (patch) | |
tree | 6099ff66d48e2e3f2af0090d04df64e974d55ad9 | |
parent | 5b422013619bb20b3595c2a89ad8a0a4875e41f9 (diff) | |
download | crosvm-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.rs | 23 |
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}; |