From ed7c9e8a10a7f814c383d2cefff02895c33bda28 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sat, 21 Oct 2023 20:36:55 +0100 Subject: [PATCH 1/2] netbsd/openbsd adding more accessors to siginfo_t. close #3397 --- libc-test/build.rs | 2 +- src/unix/bsd/netbsdlike/netbsd/mod.rs | 33 ++++++++++++++++++++++ src/unix/bsd/netbsdlike/openbsd/mod.rs | 39 +++++++++++++++++++++++++- 3 files changed, 72 insertions(+), 2 deletions(-) diff --git a/libc-test/build.rs b/libc-test/build.rs index 2f993486ef31..59d32513dc0e 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -638,7 +638,7 @@ fn test_windows(target: &str) { // Windows uppercase structs don't have `struct` in front: t if is_struct => { - if ty.clone().chars().next().unwrap().is_uppercase() { + if ty.chars().next().unwrap().is_uppercase() { t.to_string() } else if t == "stat" { "struct __stat64".to_string() diff --git a/src/unix/bsd/netbsdlike/netbsd/mod.rs b/src/unix/bsd/netbsdlike/netbsd/mod.rs index de5ec3863e71..ac79b9f45ac4 100644 --- a/src/unix/bsd/netbsdlike/netbsd/mod.rs +++ b/src/unix/bsd/netbsdlike/netbsd/mod.rs @@ -60,6 +60,39 @@ impl siginfo_t { self.si_addr } + pub unsafe fn si_code(&self) -> ::c_int { + self.si_code + } + + pub unsafe fn si_errno(&self) -> ::c_int { + self.si_errno + } + + pub unsafe fn si_pid(&self) -> ::pid_t { + #[repr(C)] + struct siginfo_timer { + _si_signo: ::c_int, + _si_errno: ::c_int, + _si_code: ::c_int, + __pad1: ::c_int, + _pid: ::pid_t, + } + (*(self as *const siginfo_t as *const siginfo_timer))._pid + } + + pub unsafe fn si_uid(&self) -> ::uid_t { + #[repr(C)] + struct siginfo_timer { + _si_signo: ::c_int, + _si_errno: ::c_int, + _si_code: ::c_int, + __pad1: ::c_int, + _pid: ::pid_t, + _uid: ::uid_t, + } + (*(self as *const siginfo_t as *const siginfo_timer))._uid + } + pub unsafe fn si_value(&self) -> ::sigval { #[repr(C)] struct siginfo_timer { diff --git a/src/unix/bsd/netbsdlike/openbsd/mod.rs b/src/unix/bsd/netbsdlike/openbsd/mod.rs index 3b87dc211f23..49c6f934bd54 100644 --- a/src/unix/bsd/netbsdlike/openbsd/mod.rs +++ b/src/unix/bsd/netbsdlike/openbsd/mod.rs @@ -540,12 +540,46 @@ impl siginfo_t { self.si_addr } - pub unsafe fn si_value(&self) -> ::sigval { + pub unsafe fn si_code(&self) -> ::c_int { + self.si_code + } + + pub unsafe fn si_errno(&self) -> ::c_int { + self.si_errno + } + + pub unsafe fn si_pid(&self) -> ::pid_t { + #[repr(C)] + struct siginfo_timer { + _si_signo: ::c_int, + _si_code: ::c_int, + _si_errno: ::c_int, + _pad: [::c_int; SI_PAD], + _pid: ::pid_t, + } + (*(self as *const siginfo_t as *const siginfo_timer))._pid + } + + pub unsafe fn si_uid(&self) -> ::uid_t { #[repr(C)] struct siginfo_timer { _si_signo: ::c_int, + _si_code: ::c_int, _si_errno: ::c_int, + _pad: [::c_int; SI_PAD], + _pid: ::pid_t, + _uid: ::uid_t, + } + (*(self as *const siginfo_t as *const siginfo_timer))._uid + } + + pub unsafe fn si_value(&self) -> ::sigval { + #[repr(C)] + struct siginfo_timer { + _si_signo: ::c_int, _si_code: ::c_int, + _si_errno: ::c_int, + _pad: [::c_int; SI_PAD], _pid: ::pid_t, _uid: ::uid_t, value: ::sigval, @@ -1576,6 +1610,9 @@ pub const NTFS_MFLAG_ALLNAMES: ::c_int = 0x2; pub const TMPFS_ARGS_VERSION: ::c_int = 1; +const SI_MAXSZ: ::size_t = 128; +const SI_PAD: ::size_t = (SI_MAXSZ / ::mem::size_of::<::c_int>()) - 3; + pub const MAP_STACK: ::c_int = 0x4000; pub const MAP_CONCEAL: ::c_int = 0x8000; From a685037a420d3a5fbc61390c1cee7e4842f17e34 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Wed, 1 Nov 2023 18:47:36 -0700 Subject: [PATCH 2/2] redox: Add remaining `grp.h` functions --- libc-test/semver/redox.txt | 5 +++++ src/unix/redox/mod.rs | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/libc-test/semver/redox.txt b/libc-test/semver/redox.txt index 6e73d0ac25f7..5f85e1aa7f3d 100644 --- a/libc-test/semver/redox.txt +++ b/libc-test/semver/redox.txt @@ -180,6 +180,7 @@ bsearch chroot clearerr difftime +endgrent endpwent endservent epoll_create @@ -191,7 +192,10 @@ explicit_bzero fchdir fmemopen getdtablesize +getgrent +getgrgid getgrgid_r +getgrnam getgrnam_r getgrouplist getline @@ -212,6 +216,7 @@ pipe2 pthread_condattr_setclock qsort reallocarray +setgrent setpwent setrlimit setservent diff --git a/src/unix/redox/mod.rs b/src/unix/redox/mod.rs index 900337b4f7e2..cd219a777288 100644 --- a/src/unix/redox/mod.rs +++ b/src/unix/redox/mod.rs @@ -1080,6 +1080,10 @@ extern "C" { pub fn getdtablesize() -> ::c_int; // grp.h + pub fn getgrent() -> *mut ::group; + pub fn setgrent(); + pub fn endgrent(); + pub fn getgrgid(gid: ::gid_t) -> *mut ::group; pub fn getgrgid_r( gid: ::gid_t, grp: *mut ::group, @@ -1087,6 +1091,7 @@ extern "C" { buflen: ::size_t, result: *mut *mut ::group, ) -> ::c_int; + pub fn getgrnam(name: *const ::c_char) -> *mut ::group; pub fn getgrnam_r( name: *const ::c_char, grp: *mut ::group,