|
| 1 | +use dox::mem; |
| 2 | + |
1 | 3 | pub type rlim_t = c_ulong; |
2 | 4 | pub type sa_family_t = u16; |
3 | 5 | pub type pthread_key_t = ::c_uint; |
|
66 | 68 | pub sll_halen: ::c_uchar, |
67 | 69 | pub sll_addr: [::c_uchar; 8] |
68 | 70 | } |
| 71 | + |
| 72 | + pub struct fd_set { |
| 73 | + fds_bits: [::c_ulong; FD_SETSIZE / ULONG_SIZE], |
| 74 | + } |
69 | 75 | } |
70 | 76 |
|
| 77 | +// intentionally not public, only used for fd_set |
| 78 | +#[cfg(target_pointer_width = "32")] |
| 79 | +const ULONG_SIZE: usize = 32; |
| 80 | +#[cfg(target_pointer_width = "64")] |
| 81 | +const ULONG_SIZE: usize = 64; |
| 82 | + |
71 | 83 | pub const EXIT_FAILURE: ::c_int = 1; |
72 | 84 | pub const EXIT_SUCCESS: ::c_int = 0; |
73 | 85 | pub const RAND_MAX: ::c_int = 2147483647; |
@@ -287,6 +299,53 @@ pub const LOCK_UN: ::c_int = 8; |
287 | 299 |
|
288 | 300 | pub const SIGSTKSZ: ::size_t = 8192; |
289 | 301 |
|
| 302 | +pub const SA_NODEFER: ::c_int = 0x40000000; |
| 303 | +pub const SA_RESETHAND: ::c_int = 0x80000000; |
| 304 | +pub const SA_RESTART: ::c_int = 0x10000000; |
| 305 | +pub const SA_NOCLDSTOP: ::c_int = 0x00000001; |
| 306 | + |
| 307 | +pub const FD_SETSIZE: usize = 1024; |
| 308 | + |
| 309 | +f! { |
| 310 | + pub fn FD_CLR(fd: ::c_int, set: *mut fd_set) -> () { |
| 311 | + let fd = fd as usize; |
| 312 | + let size = mem::size_of_val(&(*set).fds_bits[0]); |
| 313 | + (*set).fds_bits[fd / size] &= !(1 << (fd % size)); |
| 314 | + return |
| 315 | + } |
| 316 | + |
| 317 | + pub fn FD_ISSET(fd: ::c_int, set: *mut fd_set) -> bool { |
| 318 | + let fd = fd as usize; |
| 319 | + let size = mem::size_of_val(&(*set).fds_bits[0]); |
| 320 | + return ((*set).fds_bits[fd / size] & (1 << (fd % size))) != 0 |
| 321 | + } |
| 322 | + |
| 323 | + pub fn FD_SET(fd: ::c_int, set: *mut fd_set) -> () { |
| 324 | + let fd = fd as usize; |
| 325 | + let size = mem::size_of_val(&(*set).fds_bits[0]); |
| 326 | + (*set).fds_bits[fd / size] |= 1 << (fd % size); |
| 327 | + return |
| 328 | + } |
| 329 | + |
| 330 | + pub fn FD_ZERO(set: *mut fd_set) -> () { |
| 331 | + for slot in (*set).fds_bits.iter_mut() { |
| 332 | + *slot = 0; |
| 333 | + } |
| 334 | + } |
| 335 | + |
| 336 | + pub fn WIFEXITED(status: ::c_int) -> bool { |
| 337 | + (status & 0xff) == 0 |
| 338 | + } |
| 339 | + |
| 340 | + pub fn WEXITSTATUS(status: ::c_int) -> ::c_int { |
| 341 | + (status >> 8) & 0xff |
| 342 | + } |
| 343 | + |
| 344 | + pub fn WTERMSIG(status: ::c_int) -> ::c_int { |
| 345 | + status & 0x7f |
| 346 | + } |
| 347 | +} |
| 348 | + |
290 | 349 | extern { |
291 | 350 | pub fn fdatasync(fd: ::c_int) -> ::c_int; |
292 | 351 | pub fn mincore(addr: *mut ::c_void, len: ::size_t, |
|
0 commit comments