From b7f9c8db01cd673a8b20bb5649f6cd06371b9695 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Sun, 14 Jun 2020 15:33:40 +0000 Subject: impl MsgOnSocket for PathBuf --- msg_socket/src/msg_on_socket.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) 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 { + Cow::Borrowed(self.as_os_str().as_bytes()).write_to_buffer(buffer, fds) + } +} + #[test] fn round_trip_string() { use crate::{MsgReceiver, MsgSender}; -- cgit 1.4.1