Skip to content

Commit 6008a5d

Browse files
committed
Impl AsFd for types that implement AsRawFd
1 parent f5849f1 commit 6008a5d

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

gio/src/socket.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Take a look at the license at the top of the repository in the LICENSE file.
22

33
#[cfg(unix)]
4-
use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
4+
use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
55
#[cfg(windows)]
66
use std::os::windows::io::{AsRawSocket, FromRawSocket, IntoRawSocket, RawSocket};
77
#[cfg(feature = "v2_60")]
@@ -54,6 +54,17 @@ impl AsRawFd for Socket {
5454
}
5555
}
5656

57+
#[cfg(unix)]
58+
#[cfg_attr(docsrs, doc(cfg(unix)))]
59+
impl AsFd for Socket {
60+
fn as_fd(&self) -> BorrowedFd<'_> {
61+
unsafe {
62+
let raw_fd = self.as_raw_fd();
63+
BorrowedFd::borrow_raw(raw_fd)
64+
}
65+
}
66+
}
67+
5768
#[cfg(windows)]
5869
#[cfg_attr(docsrs, doc(cfg(windows)))]
5970
impl AsRawSocket for Socket {

gio/src/unix_input_stream.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
// Take a look at the license at the top of the repository in the LICENSE file.
22

33
#[cfg(unix)]
4-
use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
4+
use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, IntoRawFd, OwnedFd, RawFd};
55

66
use glib::{prelude::*, translate::*};
77
#[cfg(all(not(unix), docsrs))]
8-
use socket::{AsRawFd, IntoRawFd, RawFd};
8+
use socket::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
99

1010
use crate::{ffi, InputStream, UnixInputStream};
1111

@@ -40,6 +40,15 @@ impl AsRawFd for UnixInputStream {
4040
}
4141
}
4242

43+
impl AsFd for UnixInputStream {
44+
fn as_fd(&self) -> BorrowedFd<'_> {
45+
unsafe {
46+
let raw_fd = self.as_raw_fd();
47+
BorrowedFd::borrow_raw(raw_fd)
48+
}
49+
}
50+
}
51+
4352
mod sealed {
4453
pub trait Sealed {}
4554
impl<T: super::IsA<super::UnixInputStream>> Sealed for T {}

gio/src/unix_output_stream.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
// Take a look at the license at the top of the repository in the LICENSE file.
22

33
#[cfg(unix)]
4-
use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
4+
use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, IntoRawFd, OwnedFd, RawFd};
55

66
use glib::{prelude::*, translate::*};
77
#[cfg(all(not(unix), docsrs))]
8-
use socket::{AsRawFd, IntoRawFd, RawFd};
8+
use socket::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
99

1010
use crate::{ffi, OutputStream, UnixOutputStream};
1111

@@ -40,6 +40,15 @@ impl AsRawFd for UnixOutputStream {
4040
}
4141
}
4242

43+
impl AsFd for UnixOutputStream {
44+
fn as_fd(&self) -> BorrowedFd<'_> {
45+
unsafe {
46+
let raw_fd = self.as_raw_fd();
47+
BorrowedFd::borrow_raw(raw_fd)
48+
}
49+
}
50+
}
51+
4352
mod sealed {
4453
pub trait Sealed {}
4554
impl<T: super::IsA<super::UnixOutputStream>> Sealed for T {}

0 commit comments

Comments
 (0)