@@ -140,46 +140,39 @@ mod imp {
140140 target_os = "bitrig" ,
141141 target_os = "netbsd" ,
142142 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 {
143+ unsafe fn get_stack ( ) -> libc:: stack_t {
144+ let stackp = mmap ( ptr:: null_mut ( ) ,
145+ SIGSTKSZ ,
146+ PROT_READ | PROT_WRITE ,
147+ MAP_PRIVATE | MAP_ANON ,
148+ -1 ,
149+ 0 ) ;
150+ if stackp == MAP_FAILED {
151151 panic ! ( "failed to allocate an alternative stack" ) ;
152152 }
153- stack
153+ libc :: stack_t { ss_sp : stackp , ss_flags : 0 , ss_size : SIGSTKSZ }
154154 }
155155
156156 #[ cfg( any( target_os = "dragonfly" ,
157157 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 {
158+ unsafe fn get_stack ( ) -> libc :: stack_t {
159+ let stackp = mmap ( ptr:: null_mut ( ) ,
160+ SIGSTKSZ ,
161+ PROT_READ | PROT_WRITE ,
162+ MAP_PRIVATE | MAP_ANON ,
163+ -1 ,
164+ 0 ) ;
165+ if stackp == MAP_FAILED {
166166 panic ! ( "failed to allocate an alternative stack" ) ;
167167 }
168- stack as * mut i8
168+ libc :: stack_t { ss_sp : stackp as * mut i8 , ss_flags : 0 , ss_size : SIGSTKSZ }
169169 }
170170
171171
172172 pub unsafe fn make_handler ( ) -> Handler {
173- let alt_stack = get_stack ( ) ;
174- let mut stack: libc:: stack_t = mem:: zeroed ( ) ;
175-
176- stack. ss_sp = alt_stack;
177- stack. ss_flags = 0 ;
178- stack. ss_size = SIGSTKSZ ;
179-
173+ let stack = get_stack ( ) ;
180174 sigaltstack ( & stack, ptr:: null_mut ( ) ) ;
181-
182- Handler { _data : alt_stack as * mut libc:: c_void }
175+ Handler { _data : stack. ss_sp as * mut libc:: c_void }
183176 }
184177
185178 pub unsafe fn drop_handler ( handler : & mut Handler ) {
0 commit comments