Skip to content

Commit c7eaae3

Browse files
committed
needs-verification: unix_fd_list: Port to safe-io
1 parent 81dd85f commit c7eaae3

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

gio/src/unix_fd_list.rs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
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, IntoRawFd, RawFd};
4+
use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
55
use std::{mem, ptr};
66

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

1111
use crate::UnixFDList;
1212

@@ -25,25 +25,25 @@ impl UnixFDList {
2525

2626
pub trait UnixFDListExtManual: Sized {
2727
#[doc(alias = "g_unix_fd_list_append")]
28-
fn append<T: AsRawFd>(&self, fd: T) -> Result<i32, glib::Error>;
28+
fn append<T: AsFd>(&self, fd: &T) -> Result<i32, glib::Error>;
2929

3030
#[doc(alias = "g_unix_fd_list_get")]
31-
fn get(&self, index_: i32) -> Result<RawFd, glib::Error>;
31+
fn get(&self, index_: i32) -> Result<OwnedFd, glib::Error>;
3232

3333
#[doc(alias = "g_unix_fd_list_peek_fds")]
34-
fn peek_fds(&self) -> Vec<RawFd>;
34+
fn peek_fds(&self) -> Vec<BorrowedFd<'_>>;
3535

3636
#[doc(alias = "g_unix_fd_list_steal_fds")]
37-
fn steal_fds(&self) -> Vec<RawFd>;
37+
fn steal_fds(&self) -> Vec<OwnedFd>;
3838
}
3939

4040
impl<O: IsA<UnixFDList>> UnixFDListExtManual for O {
41-
fn append<T: AsRawFd>(&self, fd: T) -> Result<i32, glib::Error> {
41+
fn append<T: AsFd>(&self, fd: &T) -> Result<i32, glib::Error> {
4242
unsafe {
4343
let mut error = ptr::null_mut();
4444
let ret = ffi::g_unix_fd_list_append(
4545
self.as_ref().to_glib_none().0,
46-
fd.as_raw_fd(),
46+
fd.as_fd().as_raw_fd(),
4747
&mut error,
4848
);
4949
if error.is_null() {
@@ -54,37 +54,41 @@ impl<O: IsA<UnixFDList>> UnixFDListExtManual for O {
5454
}
5555
}
5656

57-
fn get(&self, index_: i32) -> Result<RawFd, glib::Error> {
57+
fn get(&self, index_: i32) -> Result<OwnedFd, glib::Error> {
5858
unsafe {
5959
let mut error = ptr::null_mut();
60-
let ret = ffi::g_unix_fd_list_get(self.as_ref().to_glib_none().0, index_, &mut error);
60+
let raw_fd =
61+
ffi::g_unix_fd_list_get(self.as_ref().to_glib_none().0, index_, &mut error);
62+
let fd = OwnedFd::from_raw_fd(raw_fd);
6163
if error.is_null() {
62-
Ok(ret)
64+
Ok(fd)
6365
} else {
6466
Err(from_glib_full(error))
6567
}
6668
}
6769
}
6870

69-
fn peek_fds(&self) -> Vec<RawFd> {
71+
fn peek_fds(&self) -> Vec<BorrowedFd<'_>> {
7072
unsafe {
7173
let mut length = mem::MaybeUninit::uninit();
72-
let ret = FromGlibContainer::from_glib_none_num(
74+
let ret: Vec<RawFd> = FromGlibContainer::from_glib_none_num(
7375
ffi::g_unix_fd_list_peek_fds(self.as_ref().to_glib_none().0, length.as_mut_ptr()),
7476
length.assume_init() as usize,
7577
);
76-
ret
78+
ret.into_iter()
79+
.map(|fd| BorrowedFd::borrow_raw(fd))
80+
.collect()
7781
}
7882
}
7983

80-
fn steal_fds(&self) -> Vec<RawFd> {
84+
fn steal_fds(&self) -> Vec<OwnedFd> {
8185
unsafe {
8286
let mut length = mem::MaybeUninit::uninit();
83-
let ret = FromGlibContainer::from_glib_full_num(
87+
let ret: Vec<RawFd> = FromGlibContainer::from_glib_full_num(
8488
ffi::g_unix_fd_list_steal_fds(self.as_ref().to_glib_none().0, length.as_mut_ptr()),
8589
length.assume_init() as usize,
8690
);
87-
ret
91+
ret.into_iter().map(|fd| OwnedFd::from_raw_fd(fd)).collect()
8892
}
8993
}
9094
}

0 commit comments

Comments
 (0)