Skip to content

Commit 0153e64

Browse files
author
Dave Huseby
committed
Fixes #31229
1 parent 50df6b9 commit 0153e64

File tree

3 files changed

+37
-18
lines changed

3 files changed

+37
-18
lines changed

src/libstd/sys/unix/fs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ impl DirEntry {
224224
fn name_bytes(&self) -> &[u8] {
225225
unsafe {
226226
::slice::from_raw_parts(self.entry.d_name.as_ptr() as *const u8,
227-
self.entry.d_namelen as usize)
227+
self.entry.d_namlen as usize)
228228
}
229229
}
230230
#[cfg(any(target_os = "android",

src/libstd/sys/unix/stack_overflow.rs

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -135,17 +135,42 @@ mod imp {
135135
Handler { _data: MAIN_ALTSTACK };
136136
}
137137

138-
pub unsafe fn make_handler() -> Handler {
139-
let alt_stack = mmap(ptr::null_mut(),
140-
SIGSTKSZ,
141-
PROT_READ | PROT_WRITE,
142-
MAP_PRIVATE | MAP_ANON,
143-
-1,
144-
0);
145-
if alt_stack == MAP_FAILED {
138+
#[cfg(any(target_os = "linux",
139+
target_os = "macos",
140+
target_os = "bitrig",
141+
target_os = "netbsd",
142+
target_os = "openbsd"))]
143+
unsafe fn get_stack() -> *mut libc::c_void {
144+
let stack = mmap(ptr::null_mut(),
145+
SIGSTKSZ,
146+
PROT_READ | PROT_WRITE,
147+
MAP_PRIVATE | MAP_ANON,
148+
-1,
149+
0);
150+
if stack == MAP_FAILED {
151+
panic!("failed to allocate an alternative stack");
152+
}
153+
stack
154+
}
155+
156+
#[cfg(any(target_os = "dragonfly",
157+
target_os = "freebsd"))]
158+
unsafe fn get_stack() -> *mut i8 {
159+
let stack = mmap(ptr::null_mut(),
160+
SIGSTKSZ,
161+
PROT_READ | PROT_WRITE,
162+
MAP_PRIVATE | MAP_ANON,
163+
-1,
164+
0);
165+
if stack == MAP_FAILED {
146166
panic!("failed to allocate an alternative stack");
147167
}
168+
stack as *mut i8
169+
}
148170

171+
172+
pub unsafe fn make_handler() -> Handler {
173+
let alt_stack = get_stack();
149174
let mut stack: libc::stack_t = mem::zeroed();
150175

151176
stack.ss_sp = alt_stack;
@@ -154,7 +179,7 @@ mod imp {
154179

155180
sigaltstack(&stack, ptr::null_mut());
156181

157-
Handler { _data: alt_stack }
182+
Handler { _data: alt_stack as *mut libc::c_void }
158183
}
159184

160185
pub unsafe fn drop_handler(handler: &mut Handler) {

src/libtest/lib.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -939,18 +939,12 @@ fn get_concurrency() -> usize {
939939
fn num_cpus() -> usize {
940940
let mut cpus: libc::c_uint = 0;
941941
let mut cpus_size = std::mem::size_of_val(&cpus);
942-
let mut mib = [libc::CTL_HW, libc::HW_AVAILCPU, 0, 0];
943942

944943
unsafe {
945-
libc::sysctl(mib.as_mut_ptr(),
946-
2,
947-
&mut cpus as *mut _ as *mut _,
948-
&mut cpus_size as *mut _ as *mut _,
949-
0 as *mut _,
950-
0);
944+
cpus = libc::sysconf(libc::_SC_NPROCESSORS_ONLN) as libc::c_uint;
951945
}
952946
if cpus < 1 {
953-
mib[1] = libc::HW_NCPU;
947+
let mut mib = [libc::CTL_HW, libc::HW_NCPU, 0, 0];
954948
unsafe {
955949
libc::sysctl(mib.as_mut_ptr(),
956950
2,

0 commit comments

Comments
 (0)