|
3 | 3 | #[cfg(unix)]
|
4 | 4 | use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
|
5 | 5 | #[cfg(windows)]
|
6 |
| -use std::os::windows::io::{AsRawSocket, FromRawSocket, IntoRawSocket, RawSocket}; |
| 6 | +use std::os::windows::io::{ |
| 7 | + AsRawSocket, AsSocket, BorrowedSocket, FromRawSocket, IntoRawSocket, OwnedSocket, RawSocket, |
| 8 | +}; |
7 | 9 | #[cfg(feature = "v2_60")]
|
8 | 10 | use std::time::Duration;
|
9 | 11 | use std::{cell::RefCell, marker::PhantomData, mem::transmute, pin::Pin, ptr};
|
@@ -34,15 +36,17 @@ impl Socket {
|
34 | 36 | }
|
35 | 37 | #[cfg(windows)]
|
36 | 38 | #[cfg_attr(docsrs, doc(cfg(windows)))]
|
37 |
| - #[allow(clippy::missing_safety_doc)] |
38 |
| - pub unsafe fn from_socket(socket: impl IntoRawSocket) -> Result<Socket, glib::Error> { |
| 39 | + pub fn from_socket(socket: OwnedSocket) -> Result<Socket, glib::Error> { |
39 | 40 | let socket = socket.into_raw_socket();
|
40 | 41 | let mut error = ptr::null_mut();
|
41 |
| - let ret = ffi::g_socket_new_from_fd(socket as i32, &mut error); |
42 |
| - if error.is_null() { |
43 |
| - Ok(from_glib_full(ret)) |
44 |
| - } else { |
45 |
| - Err(from_glib_full(error)) |
| 42 | + unsafe { |
| 43 | + let ret = ffi::g_socket_new_from_fd(socket as i32, &mut error); |
| 44 | + if error.is_null() { |
| 45 | + Ok(from_glib_full(ret)) |
| 46 | + } else { |
| 47 | + let _ = OwnedSocket::from_raw_socket(socket); |
| 48 | + Err(from_glib_full(error)) |
| 49 | + } |
46 | 50 | }
|
47 | 51 | }
|
48 | 52 | }
|
@@ -74,6 +78,17 @@ impl AsRawSocket for Socket {
|
74 | 78 | }
|
75 | 79 | }
|
76 | 80 |
|
| 81 | +#[cfg(windows)] |
| 82 | +#[cfg_attr(docsrs, doc(cfg(windows)))] |
| 83 | +impl AsSocket for Socket { |
| 84 | + fn as_socket(&self) -> BorrowedSocket<'_> { |
| 85 | + unsafe { |
| 86 | + let raw_socket = self.as_raw_socket(); |
| 87 | + BorrowedSocket::borrow_raw(raw_socket) |
| 88 | + } |
| 89 | + } |
| 90 | +} |
| 91 | + |
77 | 92 | #[doc(alias = "GInputVector")]
|
78 | 93 | #[repr(transparent)]
|
79 | 94 | #[derive(Debug)]
|
|
0 commit comments