Skip to content

Commit 6201b60

Browse files
committed
Impl AsFd for types that implement AsRawFd
1 parent 5f60fec commit 6201b60

File tree

3 files changed

+33
-5
lines changed

3 files changed

+33
-5
lines changed

gio/src/socket.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::os::raw::c_int;
55
#[cfg(all(not(windows), feature = "dox"))]
66
use std::os::raw::c_void;
77
#[cfg(unix)]
8-
use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
8+
use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
99
#[cfg(windows)]
1010
use std::os::windows::io::{AsRawSocket, FromRawSocket, IntoRawSocket, RawSocket};
1111
#[cfg(any(feature = "v2_60", feature = "dox"))]
@@ -58,6 +58,16 @@ impl AsRawFd for Socket {
5858
}
5959
}
6060

61+
#[cfg(any(unix, feature = "dox"))]
62+
impl AsFd for Socket {
63+
fn as_fd(&self) -> BorrowedFd<'_> {
64+
unsafe {
65+
let raw_fd = self.as_raw_fd();
66+
BorrowedFd::borrow_raw(raw_fd)
67+
}
68+
}
69+
}
70+
6171
#[cfg(any(windows, feature = "dox"))]
6272
impl AsRawSocket for Socket {
6373
fn as_raw_socket(&self) -> RawSocket {

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, FromRawFd, IntoRawFd, OwnedFd, RawFd};
55

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

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

@@ -53,6 +53,15 @@ impl AsRawFd for UnixInputStream {
5353
}
5454
}
5555

56+
impl AsFd for UnixInputStream {
57+
fn as_fd(&self) -> BorrowedFd<'_> {
58+
unsafe {
59+
let raw_fd = self.as_raw_fd();
60+
BorrowedFd::borrow_raw(raw_fd)
61+
}
62+
}
63+
}
64+
5665
pub trait UnixInputStreamExtManual: Sized {
5766
#[doc(alias = "g_unix_input_stream_get_fd")]
5867
#[doc(alias = "get_fd")]

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, FromRawFd, IntoRawFd, OwnedFd, RawFd};
55

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

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

@@ -53,6 +53,15 @@ impl AsRawFd for UnixOutputStream {
5353
}
5454
}
5555

56+
impl AsFd for UnixOutputStream {
57+
fn as_fd(&self) -> BorrowedFd<'_> {
58+
unsafe {
59+
let raw_fd = self.as_raw_fd();
60+
BorrowedFd::borrow_raw(raw_fd)
61+
}
62+
}
63+
}
64+
5665
pub trait UnixOutputStreamExtManual: Sized {
5766
#[doc(alias = "g_unix_output_stream_get_fd")]
5867
#[doc(alias = "get_fd")]

0 commit comments

Comments
 (0)