]>
Commit | Line | Data |
---|---|---|
7453a54e SL |
1 | use dox::mem; |
2 | ||
92a42be0 SL |
3 | pub type c_char = i8; |
4 | pub type wchar_t = i32; | |
5 | pub type off_t = i64; | |
6 | pub type useconds_t = u32; | |
7 | pub type blkcnt_t = i64; | |
8 | pub type socklen_t = u32; | |
9 | pub type sa_family_t = u8; | |
10 | pub type pthread_t = ::uintptr_t; | |
9cc50fc6 | 11 | pub type nfds_t = ::c_uint; |
92a42be0 SL |
12 | |
13 | s! { | |
14 | pub struct sockaddr { | |
15 | pub sa_len: u8, | |
16 | pub sa_family: sa_family_t, | |
17 | pub sa_data: [::c_char; 14], | |
18 | } | |
19 | ||
92a42be0 SL |
20 | pub struct sockaddr_in6 { |
21 | pub sin6_len: u8, | |
22 | pub sin6_family: sa_family_t, | |
23 | pub sin6_port: ::in_port_t, | |
24 | pub sin6_flowinfo: u32, | |
25 | pub sin6_addr: ::in6_addr, | |
26 | pub sin6_scope_id: u32, | |
27 | } | |
28 | ||
29 | pub struct sockaddr_un { | |
30 | pub sun_len: u8, | |
31 | pub sun_family: sa_family_t, | |
32 | pub sun_path: [c_char; 104] | |
33 | } | |
34 | ||
35 | pub struct passwd { | |
36 | pub pw_name: *mut ::c_char, | |
37 | pub pw_passwd: *mut ::c_char, | |
38 | pub pw_uid: ::uid_t, | |
39 | pub pw_gid: ::gid_t, | |
40 | pub pw_change: ::time_t, | |
41 | pub pw_class: *mut ::c_char, | |
42 | pub pw_gecos: *mut ::c_char, | |
43 | pub pw_dir: *mut ::c_char, | |
44 | pub pw_shell: *mut ::c_char, | |
45 | pub pw_expire: ::time_t, | |
46 | ||
9cc50fc6 SL |
47 | #[cfg(not(any(target_os = "macos", |
48 | target_os = "ios", | |
49 | target_os = "netbsd", | |
50 | target_os = "openbsd")))] | |
92a42be0 SL |
51 | pub pw_fields: ::c_int, |
52 | } | |
53 | ||
54 | pub struct ifaddrs { | |
55 | pub ifa_next: *mut ifaddrs, | |
56 | pub ifa_name: *mut ::c_char, | |
57 | pub ifa_flags: ::c_uint, | |
58 | pub ifa_addr: *mut ::sockaddr, | |
59 | pub ifa_netmask: *mut ::sockaddr, | |
60 | pub ifa_dstaddr: *mut ::sockaddr, | |
61 | pub ifa_data: *mut ::c_void | |
62 | } | |
63 | ||
64 | pub struct fd_set { | |
7453a54e | 65 | #[cfg(all(target_pointer_width = "64", |
54a0048b | 66 | any(target_os = "freebsd", target_os = "dragonfly")))] |
7453a54e SL |
67 | fds_bits: [i64; FD_SETSIZE / 64], |
68 | #[cfg(not(all(target_pointer_width = "64", | |
54a0048b | 69 | any(target_os = "freebsd", target_os = "dragonfly"))))] |
92a42be0 SL |
70 | fds_bits: [i32; FD_SETSIZE / 32], |
71 | } | |
72 | ||
73 | pub struct tm { | |
74 | pub tm_sec: ::c_int, | |
75 | pub tm_min: ::c_int, | |
76 | pub tm_hour: ::c_int, | |
77 | pub tm_mday: ::c_int, | |
78 | pub tm_mon: ::c_int, | |
79 | pub tm_year: ::c_int, | |
80 | pub tm_wday: ::c_int, | |
81 | pub tm_yday: ::c_int, | |
82 | pub tm_isdst: ::c_int, | |
83 | pub tm_gmtoff: ::c_long, | |
84 | pub tm_zone: *mut ::c_char, | |
85 | } | |
9cc50fc6 SL |
86 | |
87 | pub struct utsname { | |
54a0048b | 88 | #[cfg(not(target_os = "dragonfly"))] |
9cc50fc6 | 89 | pub sysname: [::c_char; 256], |
54a0048b SL |
90 | #[cfg(target_os = "dragonfly")] |
91 | pub sysname: [::c_char; 32], | |
92 | #[cfg(not(target_os = "dragonfly"))] | |
9cc50fc6 | 93 | pub nodename: [::c_char; 256], |
54a0048b SL |
94 | #[cfg(target_os = "dragonfly")] |
95 | pub nodename: [::c_char; 32], | |
96 | #[cfg(not(target_os = "dragonfly"))] | |
9cc50fc6 | 97 | pub release: [::c_char; 256], |
54a0048b SL |
98 | #[cfg(target_os = "dragonfly")] |
99 | pub release: [::c_char; 32], | |
100 | #[cfg(not(target_os = "dragonfly"))] | |
9cc50fc6 | 101 | pub version: [::c_char; 256], |
54a0048b SL |
102 | #[cfg(target_os = "dragonfly")] |
103 | pub version: [::c_char; 32], | |
104 | #[cfg(not(target_os = "dragonfly"))] | |
9cc50fc6 | 105 | pub machine: [::c_char; 256], |
54a0048b SL |
106 | #[cfg(target_os = "dragonfly")] |
107 | pub machine: [::c_char; 32], | |
9cc50fc6 SL |
108 | } |
109 | ||
110 | pub struct msghdr { | |
111 | pub msg_name: *mut ::c_void, | |
112 | pub msg_namelen: ::socklen_t, | |
113 | pub msg_iov: *mut ::iovec, | |
114 | pub msg_iovlen: ::c_int, | |
115 | pub msg_control: *mut ::c_void, | |
116 | pub msg_controllen: ::socklen_t, | |
117 | pub msg_flags: ::c_int, | |
118 | } | |
119 | ||
9cc50fc6 SL |
120 | pub struct fsid_t { |
121 | __fsid_val: [::int32_t; 2], | |
122 | } | |
5bcae85e SL |
123 | |
124 | pub struct if_nameindex { | |
125 | pub if_index: ::c_uint, | |
126 | pub if_name: *mut ::c_char, | |
127 | } | |
92a42be0 SL |
128 | } |
129 | ||
54a0048b SL |
130 | pub const LC_ALL: ::c_int = 0; |
131 | pub const LC_COLLATE: ::c_int = 1; | |
132 | pub const LC_CTYPE: ::c_int = 2; | |
133 | pub const LC_MONETARY: ::c_int = 3; | |
134 | pub const LC_NUMERIC: ::c_int = 4; | |
135 | pub const LC_TIME: ::c_int = 5; | |
136 | pub const LC_MESSAGES: ::c_int = 6; | |
137 | ||
92a42be0 SL |
138 | pub const FIOCLEX: ::c_ulong = 0x20006601; |
139 | pub const FIONBIO: ::c_ulong = 0x8004667e; | |
140 | ||
9cc50fc6 SL |
141 | pub const PATH_MAX: ::c_int = 1024; |
142 | ||
92a42be0 SL |
143 | pub const SA_ONSTACK: ::c_int = 0x0001; |
144 | pub const SA_SIGINFO: ::c_int = 0x0040; | |
145 | pub const SA_RESTART: ::c_int = 0x0002; | |
146 | pub const SA_RESETHAND: ::c_int = 0x0004; | |
147 | pub const SA_NOCLDSTOP: ::c_int = 0x0008; | |
148 | pub const SA_NODEFER: ::c_int = 0x0010; | |
149 | pub const SA_NOCLDWAIT: ::c_int = 0x0020; | |
150 | ||
7453a54e SL |
151 | pub const SS_ONSTACK: ::c_int = 1; |
152 | pub const SS_DISABLE: ::c_int = 4; | |
153 | ||
92a42be0 SL |
154 | pub const SIGCHLD: ::c_int = 20; |
155 | pub const SIGBUS: ::c_int = 10; | |
9cc50fc6 SL |
156 | pub const SIGUSR1: ::c_int = 30; |
157 | pub const SIGUSR2: ::c_int = 31; | |
158 | pub const SIGCONT: ::c_int = 19; | |
159 | pub const SIGSTOP: ::c_int = 17; | |
160 | pub const SIGTSTP: ::c_int = 18; | |
161 | pub const SIGURG: ::c_int = 16; | |
162 | pub const SIGIO: ::c_int = 23; | |
163 | pub const SIGSYS: ::c_int = 12; | |
164 | pub const SIGTTIN: ::c_int = 21; | |
165 | pub const SIGTTOU: ::c_int = 22; | |
166 | pub const SIGXCPU: ::c_int = 24; | |
167 | pub const SIGXFSZ: ::c_int = 25; | |
168 | pub const SIGVTALRM: ::c_int = 26; | |
169 | pub const SIGPROF: ::c_int = 27; | |
170 | pub const SIGWINCH: ::c_int = 28; | |
a7813a04 | 171 | pub const SIGINFO: ::c_int = 29; |
9cc50fc6 | 172 | |
92a42be0 | 173 | pub const SIG_SETMASK: ::c_int = 3; |
9cc50fc6 SL |
174 | pub const SIG_BLOCK: ::c_int = 0x1; |
175 | pub const SIG_UNBLOCK: ::c_int = 0x2; | |
92a42be0 SL |
176 | |
177 | pub const IPV6_MULTICAST_LOOP: ::c_int = 11; | |
178 | pub const IPV6_V6ONLY: ::c_int = 27; | |
179 | ||
92a42be0 | 180 | pub const ST_RDONLY: ::c_ulong = 1; |
92a42be0 | 181 | |
9cc50fc6 SL |
182 | pub const EV_ADD: ::uint16_t = 0x1; |
183 | pub const EV_CLEAR: ::uint16_t = 0x20; | |
184 | pub const EV_DELETE: ::uint16_t = 0x2; | |
185 | pub const EV_DISABLE: ::uint16_t = 0x8; | |
186 | pub const EV_ENABLE: ::uint16_t = 0x4; | |
187 | pub const EV_EOF: ::uint16_t = 0x8000; | |
188 | pub const EV_ERROR: ::uint16_t = 0x4000; | |
189 | pub const EV_FLAG1: ::uint16_t = 0x2000; | |
190 | pub const EV_ONESHOT: ::uint16_t = 0x10; | |
191 | pub const EV_SYSFLAGS: ::uint16_t = 0xf000; | |
192 | ||
193 | pub const NOTE_ATTRIB: ::uint32_t = 0x8; | |
194 | pub const NOTE_CHILD: ::uint32_t = 0x4; | |
195 | pub const NOTE_DELETE: ::uint32_t = 0x1; | |
196 | pub const NOTE_EXEC: ::uint32_t = 0x20000000; | |
197 | pub const NOTE_EXIT: ::uint32_t = 0x80000000; | |
198 | pub const NOTE_EXTEND: ::uint32_t = 0x4; | |
199 | pub const NOTE_FORK: ::uint32_t = 0x40000000; | |
200 | pub const NOTE_LINK: ::uint32_t = 0x10; | |
201 | pub const NOTE_LOWAT: ::uint32_t = 0x1; | |
202 | pub const NOTE_PDATAMASK: ::uint32_t = 0x000fffff; | |
203 | pub const NOTE_RENAME: ::uint32_t = 0x20; | |
204 | pub const NOTE_REVOKE: ::uint32_t = 0x40; | |
205 | pub const NOTE_TRACK: ::uint32_t = 0x1; | |
206 | pub const NOTE_TRACKERR: ::uint32_t = 0x2; | |
207 | pub const NOTE_WRITE: ::uint32_t = 0x2; | |
208 | ||
209 | pub const NCCS: usize = 20; | |
210 | ||
211 | pub const O_ASYNC: ::c_int = 0x40; | |
212 | pub const O_FSYNC: ::c_int = 0x80; | |
213 | pub const O_NDELAY: ::c_int = 0x4; | |
214 | pub const O_NOFOLLOW: ::c_int = 0x100; | |
215 | ||
9cc50fc6 | 216 | pub const F_GETOWN: ::c_int = 5; |
9cc50fc6 SL |
217 | pub const F_SETOWN: ::c_int = 6; |
218 | ||
219 | pub const MNT_FORCE: ::c_int = 0x80000; | |
220 | ||
221 | pub const Q_SYNC: ::c_int = 0x600; | |
222 | pub const Q_QUOTAON: ::c_int = 0x100; | |
223 | pub const Q_QUOTAOFF: ::c_int = 0x200; | |
9cc50fc6 SL |
224 | |
225 | pub const TCIOFF: ::c_int = 3; | |
226 | pub const TCION: ::c_int = 4; | |
227 | pub const TCOOFF: ::c_int = 1; | |
228 | pub const TCOON: ::c_int = 2; | |
229 | pub const TCIFLUSH: ::c_int = 1; | |
230 | pub const TCOFLUSH: ::c_int = 2; | |
231 | pub const TCIOFLUSH: ::c_int = 3; | |
232 | pub const TCSANOW: ::c_int = 0; | |
233 | pub const TCSADRAIN: ::c_int = 1; | |
234 | pub const TCSAFLUSH: ::c_int = 2; | |
9cc50fc6 SL |
235 | pub const VEOF: usize = 0; |
236 | pub const VEOL: usize = 1; | |
237 | pub const VEOL2: usize = 2; | |
238 | pub const VERASE: usize = 3; | |
239 | pub const VWERASE: usize = 4; | |
240 | pub const VKILL: usize = 5; | |
241 | pub const VREPRINT: usize = 6; | |
242 | pub const VINTR: usize = 8; | |
243 | pub const VQUIT: usize = 9; | |
244 | pub const VSUSP: usize = 10; | |
245 | pub const VSTART: usize = 12; | |
246 | pub const VSTOP: usize = 13; | |
247 | pub const VLNEXT: usize = 14; | |
248 | pub const VDISCARD: usize = 15; | |
249 | pub const VMIN: usize = 16; | |
250 | pub const VTIME: usize = 17; | |
251 | pub const IGNBRK: ::tcflag_t = 0x00000001; | |
252 | pub const BRKINT: ::tcflag_t = 0x00000002; | |
253 | pub const IGNPAR: ::tcflag_t = 0x00000004; | |
254 | pub const PARMRK: ::tcflag_t = 0x00000008; | |
255 | pub const INPCK: ::tcflag_t = 0x00000010; | |
256 | pub const ISTRIP: ::tcflag_t = 0x00000020; | |
257 | pub const INLCR: ::tcflag_t = 0x00000040; | |
258 | pub const IGNCR: ::tcflag_t = 0x00000080; | |
259 | pub const ICRNL: ::tcflag_t = 0x00000100; | |
260 | pub const IXON: ::tcflag_t = 0x00000200; | |
261 | pub const IXOFF: ::tcflag_t = 0x00000400; | |
262 | pub const IXANY: ::tcflag_t = 0x00000800; | |
263 | pub const IMAXBEL: ::tcflag_t = 0x00002000; | |
264 | pub const OPOST: ::tcflag_t = 0x1; | |
265 | pub const ONLCR: ::tcflag_t = 0x2; | |
266 | pub const CSIZE: ::tcflag_t = 0x00000300; | |
267 | pub const CS5: ::tcflag_t = 0x00000000; | |
268 | pub const CS6: ::tcflag_t = 0x00000100; | |
269 | pub const CS7: ::tcflag_t = 0x00000200; | |
270 | pub const CS8: ::tcflag_t = 0x00000300; | |
271 | pub const CSTOPB: ::tcflag_t = 0x00000400; | |
272 | pub const CREAD: ::tcflag_t = 0x00000800; | |
273 | pub const PARENB: ::tcflag_t = 0x00001000; | |
274 | pub const PARODD: ::tcflag_t = 0x00002000; | |
275 | pub const HUPCL: ::tcflag_t = 0x00004000; | |
276 | pub const CLOCAL: ::tcflag_t = 0x00008000; | |
277 | pub const ECHOKE: ::tcflag_t = 0x00000001; | |
278 | pub const ECHOE: ::tcflag_t = 0x00000002; | |
279 | pub const ECHOK: ::tcflag_t = 0x00000004; | |
280 | pub const ECHO: ::tcflag_t = 0x00000008; | |
281 | pub const ECHONL: ::tcflag_t = 0x00000010; | |
282 | pub const ECHOPRT: ::tcflag_t = 0x00000020; | |
283 | pub const ECHOCTL: ::tcflag_t = 0x00000040; | |
284 | pub const ISIG: ::tcflag_t = 0x00000080; | |
285 | pub const ICANON: ::tcflag_t = 0x00000100; | |
286 | pub const IEXTEN: ::tcflag_t = 0x00000400; | |
287 | pub const EXTPROC: ::tcflag_t = 0x00000800; | |
288 | pub const TOSTOP: ::tcflag_t = 0x00400000; | |
289 | pub const FLUSHO: ::tcflag_t = 0x00800000; | |
290 | pub const PENDIN: ::tcflag_t = 0x20000000; | |
291 | pub const NOFLSH: ::tcflag_t = 0x80000000; | |
92a42be0 | 292 | |
5bcae85e SL |
293 | pub const WNOHANG: ::c_int = 0x00000001; |
294 | pub const WUNTRACED: ::c_int = 0x00000002; | |
7453a54e SL |
295 | |
296 | pub const RTLD_NOW: ::c_int = 0x2; | |
54a0048b | 297 | pub const RTLD_DEFAULT: *mut ::c_void = -2isize as *mut ::c_void; |
7453a54e | 298 | |
a7813a04 XL |
299 | pub const LOG_CRON: ::c_int = 9 << 3; |
300 | pub const LOG_AUTHPRIV: ::c_int = 10 << 3; | |
301 | pub const LOG_FTP: ::c_int = 11 << 3; | |
302 | pub const LOG_PERROR: ::c_int = 0x20; | |
303 | ||
304 | pub const PIPE_BUF: usize = 512; | |
305 | ||
92a42be0 SL |
306 | f! { |
307 | pub fn FD_CLR(fd: ::c_int, set: *mut fd_set) -> () { | |
7453a54e | 308 | let bits = mem::size_of_val(&(*set).fds_bits[0]) * 8; |
92a42be0 | 309 | let fd = fd as usize; |
7453a54e | 310 | (*set).fds_bits[fd / bits] &= !(1 << (fd % bits)); |
92a42be0 SL |
311 | return |
312 | } | |
313 | ||
314 | pub fn FD_ISSET(fd: ::c_int, set: *mut fd_set) -> bool { | |
7453a54e | 315 | let bits = mem::size_of_val(&(*set).fds_bits[0]) * 8; |
92a42be0 | 316 | let fd = fd as usize; |
7453a54e | 317 | return ((*set).fds_bits[fd / bits] & (1 << (fd % bits))) != 0 |
92a42be0 SL |
318 | } |
319 | ||
320 | pub fn FD_SET(fd: ::c_int, set: *mut fd_set) -> () { | |
7453a54e | 321 | let bits = mem::size_of_val(&(*set).fds_bits[0]) * 8; |
92a42be0 | 322 | let fd = fd as usize; |
7453a54e | 323 | (*set).fds_bits[fd / bits] |= 1 << (fd % bits); |
92a42be0 SL |
324 | return |
325 | } | |
326 | ||
327 | pub fn FD_ZERO(set: *mut fd_set) -> () { | |
328 | for slot in (*set).fds_bits.iter_mut() { | |
329 | *slot = 0; | |
330 | } | |
331 | } | |
332 | ||
5bcae85e SL |
333 | pub fn WTERMSIG(status: ::c_int) -> ::c_int { |
334 | status & 0o177 | |
335 | } | |
336 | ||
92a42be0 | 337 | pub fn WIFEXITED(status: ::c_int) -> bool { |
5bcae85e | 338 | (status & 0o177) == 0 |
92a42be0 SL |
339 | } |
340 | ||
341 | pub fn WEXITSTATUS(status: ::c_int) -> ::c_int { | |
342 | status >> 8 | |
343 | } | |
344 | ||
a7813a04 XL |
345 | pub fn WCOREDUMP(status: ::c_int) -> bool { |
346 | (status & 0o200) != 0 | |
347 | } | |
92a42be0 SL |
348 | } |
349 | ||
350 | extern { | |
92a42be0 SL |
351 | pub fn setgroups(ngroups: ::c_int, |
352 | ptr: *const ::gid_t) -> ::c_int; | |
353 | pub fn ioctl(fd: ::c_int, request: ::c_ulong, ...) -> ::c_int; | |
9cc50fc6 SL |
354 | pub fn kqueue() -> ::c_int; |
355 | pub fn unmount(target: *const ::c_char, arg: ::c_int) -> ::c_int; | |
356 | pub fn syscall(num: ::c_int, ...) -> ::c_int; | |
7453a54e SL |
357 | #[cfg_attr(target_os = "netbsd", link_name = "__getpwuid_r50")] |
358 | pub fn getpwuid_r(uid: ::uid_t, | |
359 | pwd: *mut passwd, | |
360 | buf: *mut ::c_char, | |
361 | buflen: ::size_t, | |
362 | result: *mut *mut passwd) -> ::c_int; | |
a7813a04 XL |
363 | pub fn getprogname() -> *const ::c_char; |
364 | pub fn setprogname(name: *const ::c_char); | |
365 | pub fn getloadavg(loadavg: *mut ::c_double, nelem: ::c_int) -> ::c_int; | |
5bcae85e SL |
366 | pub fn if_nameindex() -> *mut if_nameindex; |
367 | pub fn if_freenameindex(ptr: *mut if_nameindex); | |
92a42be0 SL |
368 | } |
369 | ||
370 | cfg_if! { | |
371 | if #[cfg(any(target_os = "macos", target_os = "ios"))] { | |
372 | mod apple; | |
373 | pub use self::apple::*; | |
374 | } else if #[cfg(any(target_os = "openbsd", target_os = "netbsd", | |
375 | target_os = "bitrig"))] { | |
376 | mod openbsdlike; | |
377 | pub use self::openbsdlike::*; | |
378 | } else if #[cfg(any(target_os = "freebsd", target_os = "dragonfly"))] { | |
379 | mod freebsdlike; | |
380 | pub use self::freebsdlike::*; | |
381 | } else { | |
54a0048b | 382 | // Unknown target_os |
92a42be0 SL |
383 | } |
384 | } |