Skip to content

Commit

Permalink
calls: Update params in select()
Browse files Browse the repository at this point in the history
  • Loading branch information
XuShaohua committed Aug 4, 2024
1 parent 2ba6bd5 commit a19db2a
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 55 deletions.
32 changes: 21 additions & 11 deletions src/calls/select.rs
Original file line number Diff line number Diff line change
@@ -1,22 +1,32 @@
/// Sychronous I/O multiplexing.
pub unsafe fn select(
nfds: i32,
readfds: &mut fd_set_t,
writefds: &mut fd_set_t,
exceptfds: &mut fd_set_t,
timeout: &mut timeval_t,
read_fds: Option<&mut fd_set_t>,
write_fds: Option<&mut fd_set_t>,
except_fds: Option<&mut fd_set_t>,
timeout: Option<&timeval_t>,
) -> Result<i32, Errno> {
use core::ptr::{null, null_mut};

let nfds = nfds as usize;
let readfds_ptr = readfds as *mut fd_set_t as usize;
let writefds_ptr = writefds as *mut fd_set_t as usize;
let exceptfds_ptr = exceptfds as *mut fd_set_t as usize;
let timeout_ptr = timeout as *mut timeval_t as usize;
let read_fds_ptr = read_fds.map_or(null_mut::<fd_set_t>() as usize, |read_fds| {
read_fds as *mut fd_set_t as usize
});
let write_fds_ptr = write_fds.map_or(null_mut::<fd_set_t>() as usize, |write_fds| {
write_fds as *mut fd_set_t as usize
});
let except_fds_ptr = except_fds.map_or(null_mut::<fd_set_t>() as usize, |except_fds| {
except_fds as *mut fd_set_t as usize
});
let timeout_ptr = timeout.map_or(null::<timeval_t> as usize, |timeout| {
timeout as *const timeval_t as usize
});
syscall5(
SYS_SELECT,
nfds,
readfds_ptr,
writefds_ptr,
exceptfds_ptr,
read_fds_ptr,
write_fds_ptr,
except_fds_ptr,
timeout_ptr,
)
.map(|ret| ret as i32)
Expand Down
32 changes: 21 additions & 11 deletions src/platform/linux-ppc64/call.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7318,22 +7318,32 @@ pub unsafe fn seccomp(operation: u32, flags: u32, args: usize) -> Result<(), Err
/// Sychronous I/O multiplexing.
pub unsafe fn select(
nfds: i32,
readfds: &mut fd_set_t,
writefds: &mut fd_set_t,
exceptfds: &mut fd_set_t,
timeout: &mut timeval_t,
read_fds: Option<&mut fd_set_t>,
write_fds: Option<&mut fd_set_t>,
except_fds: Option<&mut fd_set_t>,
timeout: Option<&timeval_t>,
) -> Result<i32, Errno> {
use core::ptr::{null, null_mut};

let nfds = nfds as usize;
let readfds_ptr = readfds as *mut fd_set_t as usize;
let writefds_ptr = writefds as *mut fd_set_t as usize;
let exceptfds_ptr = exceptfds as *mut fd_set_t as usize;
let timeout_ptr = timeout as *mut timeval_t as usize;
let read_fds_ptr = read_fds.map_or(null_mut::<fd_set_t>() as usize, |read_fds| {
read_fds as *mut fd_set_t as usize
});
let write_fds_ptr = write_fds.map_or(null_mut::<fd_set_t>() as usize, |write_fds| {
write_fds as *mut fd_set_t as usize
});
let except_fds_ptr = except_fds.map_or(null_mut::<fd_set_t>() as usize, |except_fds| {
except_fds as *mut fd_set_t as usize
});
let timeout_ptr = timeout.map_or(null::<timeval_t> as usize, |timeout| {
timeout as *const timeval_t as usize
});
syscall5(
SYS_SELECT,
nfds,
readfds_ptr,
writefds_ptr,
exceptfds_ptr,
read_fds_ptr,
write_fds_ptr,
except_fds_ptr,
timeout_ptr,
)
.map(|ret| ret as i32)
Expand Down
32 changes: 21 additions & 11 deletions src/platform/linux-s390x/call.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7112,22 +7112,32 @@ pub unsafe fn seccomp(operation: u32, flags: u32, args: usize) -> Result<(), Err
/// Sychronous I/O multiplexing.
pub unsafe fn select(
nfds: i32,
readfds: &mut fd_set_t,
writefds: &mut fd_set_t,
exceptfds: &mut fd_set_t,
timeout: &mut timeval_t,
read_fds: Option<&mut fd_set_t>,
write_fds: Option<&mut fd_set_t>,
except_fds: Option<&mut fd_set_t>,
timeout: Option<&timeval_t>,
) -> Result<i32, Errno> {
use core::ptr::{null, null_mut};

let nfds = nfds as usize;
let readfds_ptr = readfds as *mut fd_set_t as usize;
let writefds_ptr = writefds as *mut fd_set_t as usize;
let exceptfds_ptr = exceptfds as *mut fd_set_t as usize;
let timeout_ptr = timeout as *mut timeval_t as usize;
let read_fds_ptr = read_fds.map_or(null_mut::<fd_set_t>() as usize, |read_fds| {
read_fds as *mut fd_set_t as usize
});
let write_fds_ptr = write_fds.map_or(null_mut::<fd_set_t>() as usize, |write_fds| {
write_fds as *mut fd_set_t as usize
});
let except_fds_ptr = except_fds.map_or(null_mut::<fd_set_t>() as usize, |except_fds| {
except_fds as *mut fd_set_t as usize
});
let timeout_ptr = timeout.map_or(null::<timeval_t> as usize, |timeout| {
timeout as *const timeval_t as usize
});
syscall5(
SYS_SELECT,
nfds,
readfds_ptr,
writefds_ptr,
exceptfds_ptr,
read_fds_ptr,
write_fds_ptr,
except_fds_ptr,
timeout_ptr,
)
.map(|ret| ret as i32)
Expand Down
32 changes: 21 additions & 11 deletions src/platform/linux-x86/call.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7294,22 +7294,32 @@ pub unsafe fn seccomp(operation: u32, flags: u32, args: usize) -> Result<(), Err
/// Sychronous I/O multiplexing.
pub unsafe fn select(
nfds: i32,
readfds: &mut fd_set_t,
writefds: &mut fd_set_t,
exceptfds: &mut fd_set_t,
timeout: &mut timeval_t,
read_fds: Option<&mut fd_set_t>,
write_fds: Option<&mut fd_set_t>,
except_fds: Option<&mut fd_set_t>,
timeout: Option<&timeval_t>,
) -> Result<i32, Errno> {
use core::ptr::{null, null_mut};

let nfds = nfds as usize;
let readfds_ptr = readfds as *mut fd_set_t as usize;
let writefds_ptr = writefds as *mut fd_set_t as usize;
let exceptfds_ptr = exceptfds as *mut fd_set_t as usize;
let timeout_ptr = timeout as *mut timeval_t as usize;
let read_fds_ptr = read_fds.map_or(null_mut::<fd_set_t>() as usize, |read_fds| {
read_fds as *mut fd_set_t as usize
});
let write_fds_ptr = write_fds.map_or(null_mut::<fd_set_t>() as usize, |write_fds| {
write_fds as *mut fd_set_t as usize
});
let except_fds_ptr = except_fds.map_or(null_mut::<fd_set_t>() as usize, |except_fds| {
except_fds as *mut fd_set_t as usize
});
let timeout_ptr = timeout.map_or(null::<timeval_t> as usize, |timeout| {
timeout as *const timeval_t as usize
});
syscall5(
SYS_SELECT,
nfds,
readfds_ptr,
writefds_ptr,
exceptfds_ptr,
read_fds_ptr,
write_fds_ptr,
except_fds_ptr,
timeout_ptr,
)
.map(|ret| ret as i32)
Expand Down
32 changes: 21 additions & 11 deletions src/platform/linux-x86_64/call.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7163,22 +7163,32 @@ pub unsafe fn seccomp(operation: u32, flags: u32, args: usize) -> Result<(), Err
/// Sychronous I/O multiplexing.
pub unsafe fn select(
nfds: i32,
readfds: &mut fd_set_t,
writefds: &mut fd_set_t,
exceptfds: &mut fd_set_t,
timeout: &mut timeval_t,
read_fds: Option<&mut fd_set_t>,
write_fds: Option<&mut fd_set_t>,
except_fds: Option<&mut fd_set_t>,
timeout: Option<&timeval_t>,
) -> Result<i32, Errno> {
use core::ptr::{null, null_mut};

let nfds = nfds as usize;
let readfds_ptr = readfds as *mut fd_set_t as usize;
let writefds_ptr = writefds as *mut fd_set_t as usize;
let exceptfds_ptr = exceptfds as *mut fd_set_t as usize;
let timeout_ptr = timeout as *mut timeval_t as usize;
let read_fds_ptr = read_fds.map_or(null_mut::<fd_set_t>() as usize, |read_fds| {
read_fds as *mut fd_set_t as usize
});
let write_fds_ptr = write_fds.map_or(null_mut::<fd_set_t>() as usize, |write_fds| {
write_fds as *mut fd_set_t as usize
});
let except_fds_ptr = except_fds.map_or(null_mut::<fd_set_t>() as usize, |except_fds| {
except_fds as *mut fd_set_t as usize
});
let timeout_ptr = timeout.map_or(null::<timeval_t> as usize, |timeout| {
timeout as *const timeval_t as usize
});
syscall5(
SYS_SELECT,
nfds,
readfds_ptr,
writefds_ptr,
exceptfds_ptr,
read_fds_ptr,
write_fds_ptr,
except_fds_ptr,
timeout_ptr,
)
.map(|ret| ret as i32)
Expand Down

0 comments on commit a19db2a

Please sign in to comment.