diff --git a/src/header/bits_sigset-t/cbindgen.toml b/src/header/bits_sigset-t/cbindgen.toml new file mode 100644 index 0000000000..5cd5ba7970 --- /dev/null +++ b/src/header/bits_sigset-t/cbindgen.toml @@ -0,0 +1,18 @@ +# POSIX header spec: https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/signal.h.html +# +# This type is split out to prevent importing all of signal.h into other headers. +# +# POSIX headers that require sigset_t: +# - poll.h +# - signal.h (where it should be defined) +# - sys/select.h +sys_includes = [] +include_guard = "_RELIBC_BITS_SIGSET_T_H" +language = "C" +style = "type" +no_includes = true +cpp_compat = true +[export] +include = ["sigset_t"] +[enum] +prefix_with_name = true diff --git a/src/header/bits_sigset-t/mod.rs b/src/header/bits_sigset-t/mod.rs new file mode 100644 index 0000000000..fea419ee95 --- /dev/null +++ b/src/header/bits_sigset-t/mod.rs @@ -0,0 +1,4 @@ +use crate::platform::types::c_ulonglong; + +#[allow(non_camel_case_types)] +pub type sigset_t = c_ulonglong; diff --git a/src/header/mod.rs b/src/header/mod.rs index 5afeb0c2d1..4bdb6b19e8 100644 --- a/src/header/mod.rs +++ b/src/header/mod.rs @@ -11,6 +11,8 @@ pub mod bits_locale_t; pub mod bits_pthread; #[path = "bits_safamily-t/mod.rs"] pub mod bits_safamily_t; +#[path = "bits_sigset-t/mod.rs"] +pub mod bits_sigset_t; #[path = "bits_socklen-t/mod.rs"] pub mod bits_socklen_t; pub mod bits_timespec; diff --git a/src/header/poll/mod.rs b/src/header/poll/mod.rs index 024a8d600e..8f42cf8366 100644 --- a/src/header/poll/mod.rs +++ b/src/header/poll/mod.rs @@ -7,9 +7,9 @@ use core::{mem, ptr, slice}; use crate::{ fs::File, header::{ + bits_sigset_t::sigset_t, bits_timespec::timespec, errno::EBADF, - signal::sigset_t, sys_epoll::{ EPOLL_CLOEXEC, EPOLL_CTL_ADD, EPOLLERR, EPOLLHUP, EPOLLIN, EPOLLNVAL, EPOLLOUT, EPOLLPRI, EPOLLRDBAND, EPOLLRDNORM, EPOLLWRBAND, EPOLLWRNORM, epoll_create1, epoll_ctl, diff --git a/src/header/pty/mod.rs b/src/header/pty/mod.rs index 19b2442221..995aef8aec 100644 --- a/src/header/pty/mod.rs +++ b/src/header/pty/mod.rs @@ -5,7 +5,9 @@ use core::{mem, ptr, slice}; use crate::{ - header::{fcntl, limits, pthread, signal, sys_ioctl, sys_wait, termios, unistd, utmp}, + header::{ + bits_sigset_t, fcntl, limits, pthread, signal, sys_ioctl, sys_wait, termios, unistd, utmp, + }, platform::{ self, types::{c_char, c_int, c_void}, @@ -69,8 +71,8 @@ pub unsafe extern "C" fn forkpty( let mut p: [c_int; 2] = [0; 2]; let mut cs = 0; let mut pid = -1; - let mut set = signal::sigset_t::default(); - let mut oldset = signal::sigset_t::default(); + let mut set = bits_sigset_t::sigset_t::default(); + let mut oldset = bits_sigset_t::sigset_t::default(); if unsafe { openpty(&raw mut m, &raw mut s, name, tio, ws) } < 0 { return -1; diff --git a/src/header/signal/cbindgen.toml b/src/header/signal/cbindgen.toml index e2e7cd120e..7363f32543 100644 --- a/src/header/signal/cbindgen.toml +++ b/src/header/signal/cbindgen.toml @@ -9,6 +9,7 @@ sys_includes = ["sys/types.h"] include_guard = "_RELIBC_SIGNAL_H" after_includes = """ +#include // for sigset_t #include // for timespec from time.h #define SIG_DFL ((void (*)(int))0) @@ -17,7 +18,6 @@ after_includes = """ #define SIG_HOLD ((void (*)(int))2) typedef struct siginfo siginfo_t; -typedef unsigned long long sigset_t; typedef struct ucontext ucontext_t; typedef struct mcontext mcontext_t; typedef long sig_atomic_t; diff --git a/src/header/signal/mod.rs b/src/header/signal/mod.rs index a1913a0c09..f0495739ed 100644 --- a/src/header/signal/mod.rs +++ b/src/header/signal/mod.rs @@ -8,7 +8,7 @@ use cbitset::BitSet; use crate::{ error::{Errno, ResultExt}, - header::{bits_timespec::timespec, errno, setjmp}, + header::{bits_sigset_t::sigset_t, bits_timespec::timespec, errno, setjmp}, platform::{ self, ERRNO, Pal, PalSignal, Sys, types::{ @@ -102,8 +102,6 @@ pub union sigval { pub sival_ptr: *mut c_void, } -/// cbindgen:ignore -pub type sigset_t = c_ulonglong; /// See . /// cbindgen:ignore pub type siginfo_t = siginfo; diff --git a/src/header/sys_epoll/mod.rs b/src/header/sys_epoll/mod.rs index 7cad658c7a..715d7b9d63 100644 --- a/src/header/sys_epoll/mod.rs +++ b/src/header/sys_epoll/mod.rs @@ -6,7 +6,7 @@ use core::ptr; use crate::{ error::ResultExt, - header::signal::sigset_t, + header::bits_sigset_t::sigset_t, platform::{ PalEpoll, Sys, types::{c_int, c_void}, diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs index 573d69ad93..f80965dbe9 100644 --- a/src/header/unistd/mod.rs +++ b/src/header/unistd/mod.rs @@ -15,10 +15,12 @@ use crate::{ c_str::CStr, error::{Errno, ResultExt}, header::{ + bits_sigset_t::sigset_t, bits_timespec::timespec, crypt::{crypt_data, crypt_r}, errno::{self, ENAMETOOLONG}, fcntl, limits, + signal::{sigprocmask, sigsuspend}, stdlib::getenv, sys_ioctl, sys_resource, sys_select::timeval, @@ -50,8 +52,6 @@ use super::{ stdio::snprintf, }; -use crate::header::signal::{sigprocmask, sigset_t, sigsuspend}; - mod brk; mod getopt; mod getpass; diff --git a/src/platform/linux/epoll.rs b/src/platform/linux/epoll.rs index a42eaeaf96..ce5b9be3da 100644 --- a/src/platform/linux/epoll.rs +++ b/src/platform/linux/epoll.rs @@ -3,8 +3,11 @@ use core::mem; use super::{Sys, e_raw}; use crate::{ error::Result, - header::{signal::sigset_t, sys_epoll::epoll_event}, - platform::{PalEpoll, types::*}, + header::{bits_sigset_t::sigset_t, sys_epoll::epoll_event}, + platform::{ + PalEpoll, + types::{c_int, size_t}, + }, }; impl PalEpoll for Sys { diff --git a/src/platform/linux/signal.rs b/src/platform/linux/signal.rs index 3f511b6323..ef748a36e7 100644 --- a/src/platform/linux/signal.rs +++ b/src/platform/linux/signal.rs @@ -15,10 +15,11 @@ use crate::header::sys_time::itimerval; use crate::{ error::{Errno, Result}, header::{ + bits_sigset_t::sigset_t, bits_timespec::timespec, signal::{ - SA_RESTORER, SI_QUEUE, SIGALRM, SIGEV_SIGNAL, sigaction, sigevent, siginfo_t, sigset_t, - sigval, stack_t, + SA_RESTORER, SI_QUEUE, SIGALRM, SIGEV_SIGNAL, sigaction, sigevent, siginfo_t, sigval, + stack_t, }, time, }, diff --git a/src/platform/pal/epoll.rs b/src/platform/pal/epoll.rs index c7d00f21b8..0d417d7df7 100644 --- a/src/platform/pal/epoll.rs +++ b/src/platform/pal/epoll.rs @@ -1,6 +1,6 @@ use crate::{ error::Result, - header::{signal::sigset_t, sys_epoll::epoll_event}, + header::{bits_sigset_t::sigset_t, sys_epoll::epoll_event}, platform::{Pal, types::c_int}, }; diff --git a/src/platform/pal/signal.rs b/src/platform/pal/signal.rs index 94b3a3ae58..1eeba0fa1e 100644 --- a/src/platform/pal/signal.rs +++ b/src/platform/pal/signal.rs @@ -7,8 +7,9 @@ use crate::header::sys_time::itimerval; use crate::{ error::{Errno, Result}, header::{ + bits_sigset_t::sigset_t, bits_timespec::timespec, - signal::{sigaction, siginfo_t, sigset_t, sigval, stack_t}, + signal::{sigaction, siginfo_t, sigval, stack_t}, }, }; diff --git a/src/platform/redox/epoll.rs b/src/platform/redox/epoll.rs index b73660d697..060b645767 100644 --- a/src/platform/redox/epoll.rs +++ b/src/platform/redox/epoll.rs @@ -6,7 +6,7 @@ use super::{ use crate::{ error::Errno, fs::File, - header::{errno::*, fcntl::*, signal::sigset_t, sys_epoll::*}, + header::{bits_sigset_t::sigset_t, errno::*, fcntl::*, sys_epoll::*}, io::prelude::*, }; use core::{mem, slice}; diff --git a/src/platform/redox/event.rs b/src/platform/redox/event.rs index 5d77de41cf..b02f641ce9 100644 --- a/src/platform/redox/event.rs +++ b/src/platform/redox/event.rs @@ -1,9 +1,9 @@ use core::mem::size_of; use crate::header::{ + bits_sigset_t::sigset_t, bits_timespec::timespec, fcntl::{O_CLOEXEC, O_CREAT, O_RDWR}, - signal::sigset_t, }; use super::libredox::RawResult; diff --git a/src/platform/redox/signal.rs b/src/platform/redox/signal.rs index 7987528708..faa03ea09e 100644 --- a/src/platform/redox/signal.rs +++ b/src/platform/redox/signal.rs @@ -7,12 +7,12 @@ use crate::header::sys_time::{ITIMER_REAL, itimerval}; use crate::{ error::{Errno, Result}, header::{ + bits_sigset_t::sigset_t, bits_timespec::timespec, errno::{EINVAL, ENOSYS}, signal::{ SIG_BLOCK, SIG_DFL, SIG_IGN, SIG_SETMASK, SIG_UNBLOCK, SIGALRM, SIGEV_SIGNAL, - SS_DISABLE, SS_ONSTACK, sigaction, sigevent, siginfo_t, sigset_t, sigval, stack_t, - ucontext_t, + SS_DISABLE, SS_ONSTACK, sigaction, sigevent, siginfo_t, sigval, stack_t, ucontext_t, }, time::{itimerspec, timer_internal_t}, },