Skip to content

Commit 6fd7cc0

Browse files
committed
Fix Fd::new_owned: Make it unsafe & impl From<Pipe*> for Fd
Signed-off-by: Jiahao XU <[email protected]>
1 parent 28ad64d commit 6fd7cc0

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

src/native_mux_impl/stdio.rs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,29 @@ impl Fd {
6868
}
6969
}
7070

71-
fn new_owned<T: IntoRawFd>(fd: T) -> Self {
71+
unsafe fn new_owned<T: IntoRawFd>(fd: T) -> Self {
7272
let raw_fd = fd.into_raw_fd();
73-
// Safety: IntoRawFd::into_raw_fd must return a valid raw fd.
74-
unsafe { Fd::Owned(OwnedFd::from_raw_fd(raw_fd)) }
73+
Fd::Owned(OwnedFd::from_raw_fd(raw_fd))
74+
}
75+
}
76+
77+
impl From<PipeRead> for Fd {
78+
fn from(pipe_read: PipeRead) -> Self {
79+
// Safety:
80+
//
81+
// PipeRead::into_raw_fd returns a valid fd and transfers the
82+
// ownership of it.
83+
unsafe { Self::new_owned(pipe_read) }
84+
}
85+
}
86+
87+
impl From<PipeWrite> for Fd {
88+
fn from(pipe_write: PipeWrite) -> Self {
89+
// Safety:
90+
//
91+
// PipeWrite::into_raw_fd returns a valid fd and transfers the
92+
// ownership of it.
93+
unsafe { Self::new_owned(pipe_write) }
7594
}
7695
}
7796

@@ -82,7 +101,7 @@ impl Stdio {
82101
StdioImpl::Null => Ok((Fd::Null, None)),
83102
StdioImpl::Pipe => {
84103
let (read, write) = create_pipe()?;
85-
Ok((Fd::new_owned(read), Some(write)))
104+
Ok((read.into(), Some(write)))
86105
}
87106
StdioImpl::Fd(fd) => Ok((Fd::Borrowed(fd.as_raw_fd()), None)),
88107
}
@@ -94,7 +113,7 @@ impl Stdio {
94113
StdioImpl::Null => Ok((Fd::Null, None)),
95114
StdioImpl::Pipe => {
96115
let (read, write) = create_pipe()?;
97-
Ok((Fd::new_owned(write), Some(read)))
116+
Ok((write.into(), Some(read)))
98117
}
99118
StdioImpl::Fd(fd) => Ok((Fd::Borrowed(fd.as_raw_fd()), None)),
100119
}

0 commit comments

Comments
 (0)