xref: /rust-libc-0.2.174/src/solid/mod.rs (revision c55dfcf6)
1 //! Interface to the [SOLID] C library
2 //!
3 //! [SOLID]: https://solid.kmckk.com/
4 
5 use c_void;
6 
7 pub type c_schar = i8;
8 pub type c_uchar = u8;
9 pub type c_short = i16;
10 pub type c_ushort = u16;
11 pub type c_int = i32;
12 pub type c_uint = u32;
13 pub type c_float = f32;
14 pub type c_double = f64;
15 pub type c_longlong = i64;
16 pub type c_ulonglong = u64;
17 pub type intmax_t = i64;
18 pub type uintmax_t = u64;
19 
20 pub type uintptr_t = usize;
21 pub type intptr_t = isize;
22 pub type ptrdiff_t = isize;
23 pub type size_t = ::uintptr_t;
24 pub type ssize_t = ::intptr_t;
25 
26 pub type clock_t = c_uint;
27 pub type time_t = i64;
28 pub type clockid_t = c_int;
29 pub type timer_t = c_int;
30 pub type suseconds_t = c_int;
31 pub type useconds_t = c_uint;
32 
33 pub type sighandler_t = size_t;
34 
35 // sys/ansi.h
36 pub type __caddr_t = *mut c_char;
37 pub type __gid_t = u32;
38 pub type __in_addr_t = u32;
39 pub type __in_port_t = u16;
40 pub type __mode_t = u32;
41 pub type __off_t = i64;
42 pub type __pid_t = i32;
43 pub type __sa_family_t = u8;
44 pub type __socklen_t = c_uint;
45 pub type __uid_t = u32;
46 pub type __fsblkcnt_t = u64;
47 pub type __fsfilcnt_t = u64;
48 
49 // locale.h
50 pub type locale_t = usize;
51 
52 // nl_types.h
53 pub type nl_item = c_long;
54 
55 // sys/types.h
56 pub type __va_list = *mut c_char;
57 pub type u_int8_t = u8;
58 pub type u_int16_t = u16;
59 pub type u_int32_t = u32;
60 pub type u_int64_t = u64;
61 pub type u_char = c_uchar;
62 pub type u_short = c_ushort;
63 pub type u_int = c_uint;
64 pub type u_long = c_ulong;
65 pub type unchar = c_uchar;
66 pub type ushort = c_ushort;
67 pub type uint = c_uint;
68 pub type ulong = c_ulong;
69 pub type u_quad_t = u64;
70 pub type quad_t = i64;
71 pub type qaddr_t = *mut quad_t;
72 pub type longlong_t = i64;
73 pub type u_longlong_t = u64;
74 pub type blkcnt_t = i64;
75 pub type blksize_t = i32;
76 pub type fsblkcnt_t = __fsblkcnt_t;
77 pub type fsfilcnt_t = __fsfilcnt_t;
78 pub type caddr_t = __caddr_t;
79 pub type daddr_t = i64;
80 pub type dev_t = u64;
81 pub type fixpt_t = u32;
82 pub type gid_t = __gid_t;
83 pub type idtype_t = c_int;
84 pub type id_t = u32;
85 pub type ino_t = u64;
86 pub type key_t = c_long;
87 pub type mode_t = __mode_t;
88 pub type nlink_t = u32;
89 pub type off_t = __off_t;
90 pub type pid_t = __pid_t;
91 pub type lwpid_t = i32;
92 pub type rlim_t = u64;
93 pub type segsz_t = i32;
94 pub type swblk_t = i32;
95 pub type mqd_t = c_int;
96 pub type cpuid_t = c_ulong;
97 pub type psetid_t = c_int;
98 
99 s! {
100     // stat.h
101     pub struct stat {
102         pub st_dev: dev_t,
103         pub st_ino: ino_t,
104         pub st_mode: c_short,
105         pub st_nlink: c_short,
106         pub st_uid: c_short,
107         pub st_gid: c_short,
108         pub st_rdev: dev_t,
109         pub st_size: off_t,
110         pub st_atime: time_t,
111         pub st_mtime: time_t,
112         pub st_ctime: time_t,
113         pub st_blksize: blksize_t,
114     }
115 
116     // time.h
117     pub struct tm {
118         pub tm_sec: c_int,
119         pub tm_min: c_int,
120         pub tm_hour: c_int,
121         pub tm_mday: c_int,
122         pub tm_mon: c_int,
123         pub tm_year: c_int,
124         pub tm_wday: c_int,
125         pub tm_yday: c_int,
126         pub tm_isdst: c_int,
127         pub tm_gmtoff: c_long,
128         pub tm_zone: *mut c_char,
129     }
130 
131     // stdlib.h
132     pub struct qdiv_t {
133         pub quot: quad_t,
134         pub rem: quad_t,
135     }
136     pub struct lldiv_t {
137         pub quot: c_longlong,
138         pub rem: c_longlong,
139     }
140     pub struct div_t {
141         pub quot: c_int,
142         pub rem: c_int,
143     }
144     pub struct ldiv_t {
145         pub quot: c_long,
146         pub rem: c_long,
147     }
148 
149     // locale.h
150     pub struct lconv {
151         pub decimal_point: *mut c_char,
152         pub thousands_sep: *mut c_char,
153         pub grouping: *mut c_char,
154         pub int_curr_symbol: *mut c_char,
155         pub currency_symbol: *mut c_char,
156         pub mon_decimal_point: *mut c_char,
157         pub mon_thousands_sep: *mut c_char,
158         pub mon_grouping: *mut c_char,
159         pub positive_sign: *mut c_char,
160         pub negative_sign: *mut c_char,
161         pub int_frac_digits: c_char,
162         pub frac_digits: c_char,
163         pub p_cs_precedes: c_char,
164         pub p_sep_by_space: c_char,
165         pub n_cs_precedes: c_char,
166         pub n_sep_by_space: c_char,
167         pub p_sign_posn: c_char,
168         pub n_sign_posn: c_char,
169         pub int_p_cs_precedes: c_char,
170         pub int_n_cs_precedes: c_char,
171         pub int_p_sep_by_space: c_char,
172         pub int_n_sep_by_space: c_char,
173         pub int_p_sign_posn: c_char,
174         pub int_n_sign_posn: c_char,
175     }
176 
177     pub struct iovec {
178         pub iov_base: *mut c_void,
179         pub iov_len: size_t,
180     }
181 
182     pub struct timeval {
183         pub tv_sec: c_long,
184         pub tv_usec: c_long,
185     }
186 }
187 
188 pub const INT_MIN: c_int = -2147483648;
189 pub const INT_MAX: c_int = 2147483647;
190 
191 pub const EXIT_FAILURE: c_int = 1;
192 pub const EXIT_SUCCESS: c_int = 0;
193 pub const RAND_MAX: c_int = 0x7fffffff;
194 pub const EOF: c_int = -1;
195 pub const SEEK_SET: c_int = 0;
196 pub const SEEK_CUR: c_int = 1;
197 pub const SEEK_END: c_int = 2;
198 pub const _IOFBF: c_int = 0;
199 pub const _IONBF: c_int = 2;
200 pub const _IOLBF: c_int = 1;
201 pub const BUFSIZ: c_uint = 1024;
202 pub const FOPEN_MAX: c_uint = 20;
203 pub const FILENAME_MAX: c_uint = 1024;
204 
205 pub const O_RDONLY: c_int = 1;
206 pub const O_WRONLY: c_int = 2;
207 pub const O_RDWR: c_int = 4;
208 pub const O_APPEND: c_int = 8;
209 pub const O_CREAT: c_int = 0x10;
210 pub const O_EXCL: c_int = 0x400;
211 pub const O_TEXT: c_int = 0x100;
212 pub const O_BINARY: c_int = 0x200;
213 pub const O_TRUNC: c_int = 0x20;
214 pub const S_IEXEC: c_short = 0o0100;
215 pub const S_IWRITE: c_short = 0o0200;
216 pub const S_IREAD: c_short = 0o0400;
217 pub const S_IFCHR: c_short = 0o2_0000;
218 pub const S_IFDIR: c_short = 0o4_0000;
219 pub const S_IFMT: c_short = 0o16_0000;
220 pub const S_IFIFO: c_short = 0o1_0000;
221 pub const S_IFBLK: c_short = 0o6_0000;
222 pub const S_IFREG: c_short = 0o10_0000;
223 
224 pub const LC_ALL: c_int = 0;
225 pub const LC_COLLATE: c_int = 1;
226 pub const LC_CTYPE: c_int = 2;
227 pub const LC_MONETARY: c_int = 3;
228 pub const LC_NUMERIC: c_int = 4;
229 pub const LC_TIME: c_int = 5;
230 pub const LC_MESSAGES: c_int = 6;
231 pub const _LC_LAST: c_int = 7;
232 
233 pub const EPERM: c_int = 1;
234 pub const ENOENT: c_int = 2;
235 pub const ESRCH: c_int = 3;
236 pub const EINTR: c_int = 4;
237 pub const EIO: c_int = 5;
238 pub const ENXIO: c_int = 6;
239 pub const E2BIG: c_int = 7;
240 pub const ENOEXEC: c_int = 8;
241 pub const EBADF: c_int = 9;
242 pub const ECHILD: c_int = 10;
243 pub const EAGAIN: c_int = 11;
244 pub const ENOMEM: c_int = 12;
245 pub const EACCES: c_int = 13;
246 pub const EFAULT: c_int = 14;
247 pub const ENOTBLK: c_int = 15;
248 pub const EBUSY: c_int = 16;
249 pub const EEXIST: c_int = 17;
250 pub const EXDEV: c_int = 18;
251 pub const ENODEV: c_int = 19;
252 pub const ENOTDIR: c_int = 20;
253 pub const EISDIR: c_int = 21;
254 pub const EINVAL: c_int = 22;
255 pub const ENFILE: c_int = 23;
256 pub const EMFILE: c_int = 24;
257 pub const ENOTTY: c_int = 25;
258 pub const ETXTBSY: c_int = 26;
259 pub const EFBIG: c_int = 27;
260 pub const ENOSPC: c_int = 28;
261 pub const ESPIPE: c_int = 29;
262 pub const EROFS: c_int = 30;
263 pub const EMLINK: c_int = 31;
264 pub const EPIPE: c_int = 32;
265 pub const EDOM: c_int = 33;
266 pub const ERANGE: c_int = 34;
267 
268 pub const EDEADLK: c_int = 35;
269 pub const ENAMETOOLONG: c_int = 36;
270 pub const ENOLCK: c_int = 37;
271 pub const ENOSYS: c_int = 38;
272 pub const ENOTEMPTY: c_int = 39;
273 pub const ELOOP: c_int = 40;
274 pub const EWOULDBLOCK: c_int = EAGAIN;
275 pub const ENOMSG: c_int = 42;
276 pub const EIDRM: c_int = 43;
277 pub const ECHRNG: c_int = 44;
278 pub const EL2NSYNC: c_int = 45;
279 pub const EL3HLT: c_int = 46;
280 pub const EL3RST: c_int = 47;
281 pub const ELNRNG: c_int = 48;
282 pub const EUNATCH: c_int = 49;
283 pub const ENOCSI: c_int = 50;
284 pub const EL2HLT: c_int = 51;
285 pub const EBADE: c_int = 52;
286 pub const EBADR: c_int = 53;
287 pub const EXFULL: c_int = 54;
288 pub const ENOANO: c_int = 55;
289 pub const EBADRQC: c_int = 56;
290 pub const EBADSLT: c_int = 57;
291 
292 pub const EDEADLOCK: c_int = EDEADLK;
293 
294 pub const EBFONT: c_int = 59;
295 pub const ENOSTR: c_int = 60;
296 pub const ENODATA: c_int = 61;
297 pub const ETIME: c_int = 62;
298 pub const ENOSR: c_int = 63;
299 pub const ENONET: c_int = 64;
300 pub const ENOPKG: c_int = 65;
301 pub const EREMOTE: c_int = 66;
302 pub const ENOLINK: c_int = 67;
303 pub const EADV: c_int = 68;
304 pub const ESRMNT: c_int = 69;
305 pub const ECOMM: c_int = 70;
306 pub const EPROTO: c_int = 71;
307 pub const EMULTIHOP: c_int = 72;
308 pub const EDOTDOT: c_int = 73;
309 pub const EBADMSG: c_int = 74;
310 pub const EOVERFLOW: c_int = 75;
311 pub const ENOTUNIQ: c_int = 76;
312 pub const EBADFD: c_int = 77;
313 pub const EREMCHG: c_int = 78;
314 pub const ELIBACC: c_int = 79;
315 pub const ELIBBAD: c_int = 80;
316 pub const ELIBSCN: c_int = 81;
317 pub const ELIBMAX: c_int = 82;
318 pub const ELIBEXEC: c_int = 83;
319 pub const EILSEQ: c_int = 84;
320 pub const ERESTART: c_int = 85;
321 pub const ESTRPIPE: c_int = 86;
322 pub const EUSERS: c_int = 87;
323 pub const ENOTSOCK: c_int = 88;
324 pub const EDESTADDRREQ: c_int = 89;
325 pub const EMSGSIZE: c_int = 90;
326 pub const EPROTOTYPE: c_int = 91;
327 pub const ENOPROTOOPT: c_int = 92;
328 pub const EPROTONOSUPPORT: c_int = 93;
329 pub const ESOCKTNOSUPPORT: c_int = 94;
330 pub const EOPNOTSUPP: c_int = 95;
331 pub const EPFNOSUPPORT: c_int = 96;
332 pub const EAFNOSUPPORT: c_int = 97;
333 pub const EADDRINUSE: c_int = 98;
334 pub const EADDRNOTAVAIL: c_int = 99;
335 pub const ENETDOWN: c_int = 100;
336 pub const ENETUNREACH: c_int = 101;
337 pub const ENETRESET: c_int = 102;
338 pub const ECONNABORTED: c_int = 103;
339 pub const ECONNRESET: c_int = 104;
340 pub const ENOBUFS: c_int = 105;
341 pub const EISCONN: c_int = 106;
342 pub const ENOTCONN: c_int = 107;
343 pub const ESHUTDOWN: c_int = 108;
344 pub const ETOOMANYREFS: c_int = 109;
345 pub const ETIMEDOUT: c_int = 110;
346 pub const ECONNREFUSED: c_int = 111;
347 pub const EHOSTDOWN: c_int = 112;
348 pub const EHOSTUNREACH: c_int = 113;
349 pub const EALREADY: c_int = 114;
350 pub const EINPROGRESS: c_int = 115;
351 pub const ESTALE: c_int = 116;
352 pub const EUCLEAN: c_int = 117;
353 pub const ENOTNAM: c_int = 118;
354 pub const ENAVAIL: c_int = 119;
355 pub const EISNAM: c_int = 120;
356 pub const EREMOTEIO: c_int = 121;
357 pub const EDQUOT: c_int = 122;
358 
359 pub const ENOMEDIUM: c_int = 123;
360 pub const EMEDIUMTYPE: c_int = 124;
361 pub const ECANCELED: c_int = 125;
362 pub const ENOKEY: c_int = 126;
363 pub const EKEYEXPIRED: c_int = 127;
364 pub const EKEYREVOKED: c_int = 128;
365 pub const EKEYREJECTED: c_int = 129;
366 
367 pub const EOWNERDEAD: c_int = 130;
368 pub const ENOTRECOVERABLE: c_int = 131;
369 
370 pub const ENOTSUP: c_int = 132;
371 pub const EFTYPE: c_int = 133;
372 
373 // signal codes
374 pub const SIGHUP: c_int = 1;
375 pub const SIGINT: c_int = 2;
376 pub const SIGQUIT: c_int = 3;
377 pub const SIGILL: c_int = 4;
378 pub const SIGTRAP: c_int = 5;
379 pub const SIGABRT: c_int = 6;
380 pub const SIGIOT: c_int = SIGABRT;
381 pub const SIGEMT: c_int = 7;
382 pub const SIGFPE: c_int = 8;
383 pub const SIGKILL: c_int = 9;
384 pub const SIGBUS: c_int = 10;
385 pub const SIGSEGV: c_int = 11;
386 pub const SIGSYS: c_int = 12;
387 pub const SIGPIPE: c_int = 13;
388 pub const SIGALRM: c_int = 14;
389 pub const SIGTERM: c_int = 15;
390 pub const SIGURG: c_int = 16;
391 pub const SIGSTOP: c_int = 17;
392 pub const SIGTSTP: c_int = 18;
393 pub const SIGCONT: c_int = 19;
394 pub const SIGCHLD: c_int = 20;
395 pub const SIGTTIN: c_int = 21;
396 pub const SIGTTOU: c_int = 22;
397 pub const SIGIO: c_int = 23;
398 pub const SIGXCPU: c_int = 24;
399 pub const SIGXFSZ: c_int = 25;
400 pub const SIGVTALRM: c_int = 26;
401 pub const SIGPROF: c_int = 27;
402 pub const SIGWINCH: c_int = 28;
403 pub const SIGINFO: c_int = 29;
404 pub const SIGUSR1: c_int = 30;
405 pub const SIGUSR2: c_int = 31;
406 pub const SIGPWR: c_int = 32;
407 
408 #[cfg_attr(feature = "extra_traits", derive(Debug))]
409 pub enum FILE {}
410 impl ::Copy for FILE {}
411 impl ::Clone for FILE {
412     fn clone(&self) -> FILE {
413         *self
414     }
415 }
416 #[cfg_attr(feature = "extra_traits", derive(Debug))]
417 pub enum fpos_t {}
418 impl ::Copy for fpos_t {}
419 impl ::Clone for fpos_t {
420     fn clone(&self) -> fpos_t {
421         *self
422     }
423 }
424 
425 extern "C" {
426     // ctype.h
427     pub fn isalnum(c: c_int) -> c_int;
428     pub fn isalpha(c: c_int) -> c_int;
429     pub fn iscntrl(c: c_int) -> c_int;
430     pub fn isdigit(c: c_int) -> c_int;
431     pub fn isgraph(c: c_int) -> c_int;
432     pub fn islower(c: c_int) -> c_int;
433     pub fn isprint(c: c_int) -> c_int;
434     pub fn ispunct(c: c_int) -> c_int;
435     pub fn isspace(c: c_int) -> c_int;
436     pub fn isupper(c: c_int) -> c_int;
437     pub fn isxdigit(c: c_int) -> c_int;
438     pub fn isblank(c: c_int) -> c_int;
439     pub fn tolower(c: c_int) -> c_int;
440     pub fn toupper(c: c_int) -> c_int;
441 
442     // stdio.h
443     pub fn __get_stdio_file(fileno: c_int) -> *mut FILE;
444     pub fn clearerr(arg1: *mut FILE);
445     pub fn fclose(arg1: *mut FILE) -> c_int;
446     pub fn feof(arg1: *mut FILE) -> c_int;
447     pub fn ferror(arg1: *mut FILE) -> c_int;
448     pub fn fflush(arg1: *mut FILE) -> c_int;
449     pub fn fgetc(arg1: *mut FILE) -> c_int;
450     pub fn fgets(arg1: *mut c_char, arg2: c_int, arg3: *mut FILE) -> *mut c_char;
451     pub fn fopen(arg1: *const c_char, arg2: *const c_char) -> *mut FILE;
452     pub fn fprintf(arg1: *mut FILE, arg2: *const c_char, ...) -> c_int;
453     pub fn fputc(arg1: c_int, arg2: *mut FILE) -> c_int;
454     pub fn fputs(arg1: *const c_char, arg2: *mut FILE) -> c_int;
455     pub fn fread(arg1: *mut c_void, arg2: size_t, arg3: size_t, arg4: *mut FILE) -> size_t;
456     pub fn freopen(arg1: *const c_char, arg2: *const c_char, arg3: *mut FILE) -> *mut FILE;
457     pub fn fscanf(arg1: *mut FILE, arg2: *const c_char, ...) -> c_int;
458     pub fn fseek(arg1: *mut FILE, arg2: c_long, arg3: c_int) -> c_int;
459     pub fn ftell(arg1: *mut FILE) -> c_long;
460     pub fn fwrite(arg1: *const c_void, arg2: size_t, arg3: size_t, arg4: *mut FILE) -> size_t;
461     pub fn getc(arg1: *mut FILE) -> c_int;
462     pub fn getchar() -> c_int;
463     pub fn perror(arg1: *const c_char);
464     pub fn printf(arg1: *const c_char, ...) -> c_int;
465     pub fn putc(arg1: c_int, arg2: *mut FILE) -> c_int;
466     pub fn putchar(arg1: c_int) -> c_int;
467     pub fn puts(arg1: *const c_char) -> c_int;
468     pub fn remove(arg1: *const c_char) -> c_int;
469     pub fn rewind(arg1: *mut FILE);
470     pub fn scanf(arg1: *const c_char, ...) -> c_int;
471     pub fn setbuf(arg1: *mut FILE, arg2: *mut c_char);
472     pub fn setvbuf(arg1: *mut FILE, arg2: *mut c_char, arg3: c_int, arg4: size_t) -> c_int;
473     pub fn sscanf(arg1: *const c_char, arg2: *const c_char, ...) -> c_int;
474     pub fn tmpfile() -> *mut FILE;
475     pub fn ungetc(arg1: c_int, arg2: *mut FILE) -> c_int;
476     pub fn vfprintf(arg1: *mut FILE, arg2: *const c_char, arg3: __va_list) -> c_int;
477     pub fn vprintf(arg1: *const c_char, arg2: __va_list) -> c_int;
478     pub fn gets(arg1: *mut c_char) -> *mut c_char;
479     pub fn sprintf(arg1: *mut c_char, arg2: *const c_char, ...) -> c_int;
480     pub fn tmpnam(arg1: *const c_char) -> *mut c_char;
481     pub fn vsprintf(arg1: *mut c_char, arg2: *const c_char, arg3: __va_list) -> c_int;
482     pub fn rename(arg1: *const c_char, arg2: *const c_char) -> c_int;
483     pub fn asiprintf(arg1: *mut *mut c_char, arg2: *const c_char, ...) -> c_int;
484     pub fn fiprintf(arg1: *mut FILE, arg2: *const c_char, ...) -> c_int;
485     pub fn fiscanf(arg1: *mut FILE, arg2: *const c_char, ...) -> c_int;
486     pub fn iprintf(arg1: *const c_char, ...) -> c_int;
487     pub fn iscanf(arg1: *const c_char, ...) -> c_int;
488     pub fn siprintf(arg1: *mut c_char, arg2: *const c_char, ...) -> c_int;
489     pub fn siscanf(arg1: *mut c_char, arg2: *const c_char, ...) -> c_int;
490     pub fn sniprintf(arg1: *mut c_char, arg2: size_t, arg3: *const c_char, ...) -> c_int;
491     pub fn vasiprintf(arg1: *mut *mut c_char, arg2: *const c_char, arg3: __va_list) -> c_int;
492     pub fn vfiprintf(arg1: *mut FILE, arg2: *const c_char, arg3: __va_list) -> c_int;
493     pub fn vfiscanf(arg1: *mut FILE, arg2: *const c_char, arg3: __va_list) -> c_int;
494     pub fn viprintf(arg1: *const c_char, arg2: __va_list) -> c_int;
495     pub fn viscanf(arg1: *const c_char, arg2: __va_list) -> c_int;
496     pub fn vsiprintf(arg1: *mut c_char, arg2: *const c_char, arg3: __va_list) -> c_int;
497     pub fn vsiscanf(arg1: *const c_char, arg2: *const c_char, arg3: __va_list) -> c_int;
498     pub fn vsniprintf(
499         arg1: *mut c_char,
500         arg2: size_t,
501         arg3: *const c_char,
502         arg4: __va_list,
503     ) -> c_int;
504     pub fn vdiprintf(arg1: c_int, arg2: *const c_char, arg3: __va_list) -> c_int;
505     pub fn diprintf(arg1: c_int, arg2: *const c_char, ...) -> c_int;
506     pub fn fgetpos(arg1: *mut FILE, arg2: *mut fpos_t) -> c_int;
507     pub fn fsetpos(arg1: *mut FILE, arg2: *const fpos_t) -> c_int;
508     pub fn fdopen(arg1: c_int, arg2: *const c_char) -> *mut FILE;
509     pub fn fileno(arg1: *mut FILE) -> c_int;
510     pub fn flockfile(arg1: *mut FILE);
511     pub fn ftrylockfile(arg1: *mut FILE) -> c_int;
512     pub fn funlockfile(arg1: *mut FILE);
513     pub fn getc_unlocked(arg1: *mut FILE) -> c_int;
514     pub fn getchar_unlocked() -> c_int;
515     pub fn putc_unlocked(arg1: c_int, arg2: *mut FILE) -> c_int;
516     pub fn putchar_unlocked(arg1: c_int) -> c_int;
517     pub fn snprintf(arg1: *mut c_char, arg2: size_t, arg3: *const c_char, ...) -> c_int;
518     pub fn vsnprintf(
519         arg1: *mut c_char,
520         arg2: size_t,
521         arg3: *const c_char,
522         arg4: __va_list,
523     ) -> c_int;
524     pub fn getw(arg1: *mut FILE) -> c_int;
525     pub fn putw(arg1: c_int, arg2: *mut FILE) -> c_int;
526     pub fn tempnam(arg1: *const c_char, arg2: *const c_char) -> *mut c_char;
527     pub fn fseeko(stream: *mut FILE, offset: off_t, whence: c_int) -> c_int;
528     pub fn ftello(stream: *mut FILE) -> off_t;
529 
530     // stdlib.h
531     pub fn atof(arg1: *const c_char) -> f64;
532     pub fn strtod(arg1: *const c_char, arg2: *mut *mut c_char) -> f64;
533     pub fn drand48() -> f64;
534     pub fn erand48(arg1: *mut c_ushort) -> f64;
535     pub fn strtof(arg1: *const c_char, arg2: *mut *mut c_char) -> f32;
536     pub fn strtold(arg1: *const c_char, arg2: *mut *mut c_char) -> f64;
537     pub fn strtod_l(arg1: *const c_char, arg2: *mut *mut c_char, arg3: locale_t) -> f64;
538     pub fn strtof_l(arg1: *const c_char, arg2: *mut *mut c_char, arg3: locale_t) -> f32;
539     pub fn strtold_l(arg1: *const c_char, arg2: *mut *mut c_char, arg3: locale_t) -> f64;
540     pub fn _Exit(arg1: c_int) -> !;
541     pub fn abort() -> !;
542     pub fn abs(arg1: c_int) -> c_int;
543     pub fn atexit(arg1: ::Option<unsafe extern "C" fn()>) -> c_int;
544     pub fn atoi(arg1: *const c_char) -> c_int;
545     pub fn atol(arg1: *const c_char) -> c_long;
546     pub fn itoa(arg1: c_int, arg2: *mut c_char, arg3: c_int) -> *mut c_char;
547     pub fn ltoa(arg1: c_long, arg2: *mut c_char, arg3: c_int) -> *mut c_char;
548     pub fn ultoa(arg1: c_ulong, arg2: *mut c_char, arg3: c_int) -> *mut c_char;
549     pub fn bsearch(
550         arg1: *const c_void,
551         arg2: *const c_void,
552         arg3: size_t,
553         arg4: size_t,
554         arg5: ::Option<unsafe extern "C" fn(arg1: *const c_void, arg2: *const c_void) -> c_int>,
555     ) -> *mut c_void;
556     pub fn calloc(arg1: size_t, arg2: size_t) -> *mut c_void;
557     pub fn div(arg1: c_int, arg2: c_int) -> div_t;
558     pub fn exit(arg1: c_int) -> !;
559     pub fn free(arg1: *mut c_void);
560     pub fn getenv(arg1: *const c_char) -> *mut c_char;
561     pub fn labs(arg1: c_long) -> c_long;
562     pub fn ldiv(arg1: c_long, arg2: c_long) -> ldiv_t;
563     pub fn malloc(arg1: size_t) -> *mut c_void;
564     pub fn qsort(
565         arg1: *mut c_void,
566         arg2: size_t,
567         arg3: size_t,
568         arg4: ::Option<unsafe extern "C" fn(arg1: *const c_void, arg2: *const c_void) -> c_int>,
569     );
570     pub fn rand() -> c_int;
571     pub fn realloc(arg1: *mut c_void, arg2: size_t) -> *mut c_void;
572     pub fn srand(arg1: c_uint);
573     pub fn strtol(arg1: *const c_char, arg2: *mut *mut c_char, arg3: c_int) -> c_long;
574     pub fn strtoul(arg1: *const c_char, arg2: *mut *mut c_char, arg3: c_int) -> c_ulong;
575     pub fn mblen(arg1: *const c_char, arg2: size_t) -> c_int;
576     pub fn mbstowcs(arg1: *mut wchar_t, arg2: *const c_char, arg3: size_t) -> size_t;
577     pub fn wctomb(arg1: *mut c_char, arg2: wchar_t) -> c_int;
578     pub fn mbtowc(arg1: *mut wchar_t, arg2: *const c_char, arg3: size_t) -> c_int;
579     pub fn wcstombs(arg1: *mut c_char, arg2: *const wchar_t, arg3: size_t) -> size_t;
580     pub fn rand_r(arg1: *mut c_uint) -> c_int;
581     pub fn jrand48(arg1: *mut c_ushort) -> c_long;
582     pub fn lcong48(arg1: *mut c_ushort);
583     pub fn lrand48() -> c_long;
584     pub fn mrand48() -> c_long;
585     pub fn nrand48(arg1: *mut c_ushort) -> c_long;
586     pub fn seed48(arg1: *mut c_ushort) -> *mut c_ushort;
587     pub fn srand48(arg1: c_long);
588     pub fn putenv(arg1: *mut c_char) -> c_int;
589     pub fn a64l(arg1: *const c_char) -> c_long;
590     pub fn l64a(arg1: c_long) -> *mut c_char;
591     pub fn random() -> c_long;
592     pub fn setstate(arg1: *mut c_char) -> *mut c_char;
593     pub fn initstate(arg1: c_uint, arg2: *mut c_char, arg3: size_t) -> *mut c_char;
594     pub fn srandom(arg1: c_uint);
595     pub fn mkostemp(arg1: *mut c_char, arg2: c_int) -> c_int;
596     pub fn mkostemps(arg1: *mut c_char, arg2: c_int, arg3: c_int) -> c_int;
597     pub fn mkdtemp(arg1: *mut c_char) -> *mut c_char;
598     pub fn mkstemp(arg1: *mut c_char) -> c_int;
599     pub fn mktemp(arg1: *mut c_char) -> *mut c_char;
600     pub fn atoll(arg1: *const c_char) -> c_longlong;
601     pub fn llabs(arg1: c_longlong) -> c_longlong;
602     pub fn lldiv(arg1: c_longlong, arg2: c_longlong) -> lldiv_t;
603     pub fn strtoll(arg1: *const c_char, arg2: *mut *mut c_char, arg3: c_int) -> c_longlong;
604     pub fn strtoull(arg1: *const c_char, arg2: *mut *mut c_char, arg3: c_int) -> c_ulonglong;
605     pub fn aligned_alloc(arg1: size_t, arg2: size_t) -> *mut c_void;
606     pub fn at_quick_exit(arg1: ::Option<unsafe extern "C" fn()>) -> c_int;
607     pub fn quick_exit(arg1: c_int);
608     pub fn setenv(arg1: *const c_char, arg2: *const c_char, arg3: c_int) -> c_int;
609     pub fn unsetenv(arg1: *const c_char) -> c_int;
610     pub fn humanize_number(
611         arg1: *mut c_char,
612         arg2: size_t,
613         arg3: i64,
614         arg4: *const c_char,
615         arg5: c_int,
616         arg6: c_int,
617     ) -> c_int;
618     pub fn dehumanize_number(arg1: *const c_char, arg2: *mut i64) -> c_int;
619     pub fn getenv_r(arg1: *const c_char, arg2: *mut c_char, arg3: size_t) -> c_int;
620     pub fn heapsort(
621         arg1: *mut c_void,
622         arg2: size_t,
623         arg3: size_t,
624         arg4: ::Option<unsafe extern "C" fn(arg1: *const c_void, arg2: *const c_void) -> c_int>,
625     ) -> c_int;
626     pub fn mergesort(
627         arg1: *mut c_void,
628         arg2: size_t,
629         arg3: size_t,
630         arg4: ::Option<unsafe extern "C" fn(arg1: *const c_void, arg2: *const c_void) -> c_int>,
631     ) -> c_int;
632     pub fn radixsort(
633         arg1: *mut *const c_uchar,
634         arg2: c_int,
635         arg3: *const c_uchar,
636         arg4: c_uint,
637     ) -> c_int;
638     pub fn sradixsort(
639         arg1: *mut *const c_uchar,
640         arg2: c_int,
641         arg3: *const c_uchar,
642         arg4: c_uint,
643     ) -> c_int;
644     pub fn getprogname() -> *const c_char;
645     pub fn setprogname(arg1: *const c_char);
646     pub fn qabs(arg1: quad_t) -> quad_t;
647     pub fn strtoq(arg1: *const c_char, arg2: *mut *mut c_char, arg3: c_int) -> quad_t;
648     pub fn strtouq(arg1: *const c_char, arg2: *mut *mut c_char, arg3: c_int) -> u_quad_t;
649     pub fn strsuftoll(
650         arg1: *const c_char,
651         arg2: *const c_char,
652         arg3: c_longlong,
653         arg4: c_longlong,
654     ) -> c_longlong;
655     pub fn strsuftollx(
656         arg1: *const c_char,
657         arg2: *const c_char,
658         arg3: c_longlong,
659         arg4: c_longlong,
660         arg5: *mut c_char,
661         arg6: size_t,
662     ) -> c_longlong;
663     pub fn l64a_r(arg1: c_long, arg2: *mut c_char, arg3: c_int) -> c_int;
664     pub fn qdiv(arg1: quad_t, arg2: quad_t) -> qdiv_t;
665     pub fn strtol_l(
666         arg1: *const c_char,
667         arg2: *mut *mut c_char,
668         arg3: c_int,
669         arg4: locale_t,
670     ) -> c_long;
671     pub fn strtoul_l(
672         arg1: *const c_char,
673         arg2: *mut *mut c_char,
674         arg3: c_int,
675         arg4: locale_t,
676     ) -> c_ulong;
677     pub fn strtoll_l(
678         arg1: *const c_char,
679         arg2: *mut *mut c_char,
680         arg3: c_int,
681         arg4: locale_t,
682     ) -> c_longlong;
683     pub fn strtoull_l(
684         arg1: *const c_char,
685         arg2: *mut *mut c_char,
686         arg3: c_int,
687         arg4: locale_t,
688     ) -> c_ulonglong;
689     pub fn strtoq_l(
690         arg1: *const c_char,
691         arg2: *mut *mut c_char,
692         arg3: c_int,
693         arg4: locale_t,
694     ) -> quad_t;
695     pub fn strtouq_l(
696         arg1: *const c_char,
697         arg2: *mut *mut c_char,
698         arg3: c_int,
699         arg4: locale_t,
700     ) -> u_quad_t;
701     pub fn _mb_cur_max_l(arg1: locale_t) -> size_t;
702     pub fn mblen_l(arg1: *const c_char, arg2: size_t, arg3: locale_t) -> c_int;
703     pub fn mbstowcs_l(
704         arg1: *mut wchar_t,
705         arg2: *const c_char,
706         arg3: size_t,
707         arg4: locale_t,
708     ) -> size_t;
709     pub fn wctomb_l(arg1: *mut c_char, arg2: wchar_t, arg3: locale_t) -> c_int;
710     pub fn mbtowc_l(arg1: *mut wchar_t, arg2: *const c_char, arg3: size_t, arg4: locale_t)
711         -> c_int;
712     pub fn wcstombs_l(
713         arg1: *mut c_char,
714         arg2: *const wchar_t,
715         arg3: size_t,
716         arg4: locale_t,
717     ) -> size_t;
718 
719     // string.h
720     pub fn memchr(arg1: *const c_void, arg2: c_int, arg3: size_t) -> *mut c_void;
721     pub fn memcmp(arg1: *const c_void, arg2: *const c_void, arg3: size_t) -> c_int;
722     pub fn memcpy(arg1: *mut c_void, arg2: *const c_void, arg3: size_t) -> *mut c_void;
723     pub fn memmove(arg1: *mut c_void, arg2: *const c_void, arg3: size_t) -> *mut c_void;
724     pub fn memset(arg1: *mut c_void, arg2: c_int, arg3: size_t) -> *mut c_void;
725     pub fn strcat(arg1: *mut c_char, arg2: *const c_char) -> *mut c_char;
726     pub fn strchr(arg1: *const c_char, arg2: c_int) -> *mut c_char;
727     pub fn strcmp(arg1: *const c_char, arg2: *const c_char) -> c_int;
728     pub fn strcoll(arg1: *const c_char, arg2: *const c_char) -> c_int;
729     pub fn strcpy(arg1: *mut c_char, arg2: *const c_char) -> *mut c_char;
730     pub fn strcspn(arg1: *const c_char, arg2: *const c_char) -> size_t;
731     pub fn strerror(arg1: c_int) -> *mut c_char;
732     pub fn strlen(arg1: *const c_char) -> size_t;
733     pub fn strncat(arg1: *mut c_char, arg2: *const c_char, arg3: size_t) -> *mut c_char;
734     pub fn strncmp(arg1: *const c_char, arg2: *const c_char, arg3: size_t) -> c_int;
735     pub fn strncpy(arg1: *mut c_char, arg2: *const c_char, arg3: size_t) -> *mut c_char;
736     pub fn strpbrk(arg1: *const c_char, arg2: *const c_char) -> *mut c_char;
737     pub fn strrchr(arg1: *const c_char, arg2: c_int) -> *mut c_char;
738     pub fn strspn(arg1: *const c_char, arg2: *const c_char) -> size_t;
739     pub fn strstr(arg1: *const c_char, arg2: *const c_char) -> *mut c_char;
740     pub fn strtok(arg1: *mut c_char, arg2: *const c_char) -> *mut c_char;
741     pub fn strtok_r(arg1: *mut c_char, arg2: *const c_char, arg3: *mut *mut c_char) -> *mut c_char;
742     pub fn strerror_r(arg1: c_int, arg2: *mut c_char, arg3: size_t) -> c_int;
743     pub fn strxfrm(arg1: *mut c_char, arg2: *const c_char, arg3: size_t) -> size_t;
744     pub fn memccpy(
745         arg1: *mut c_void,
746         arg2: *const c_void,
747         arg3: c_int,
748         arg4: size_t,
749     ) -> *mut c_void;
750     pub fn strdup(arg1: *const c_char) -> *mut c_char;
751     pub fn stpcpy(arg1: *mut c_char, arg2: *const c_char) -> *mut c_char;
752     pub fn stpncpy(arg1: *mut c_char, arg2: *const c_char, arg3: size_t) -> *mut c_char;
753     pub fn strnlen(arg1: *const c_char, arg2: size_t) -> size_t;
754     pub fn memmem(
755         arg1: *const c_void,
756         arg2: size_t,
757         arg3: *const c_void,
758         arg4: size_t,
759     ) -> *mut c_void;
760     pub fn strcasestr(arg1: *const c_char, arg2: *const c_char) -> *mut c_char;
761     pub fn strlcat(arg1: *mut c_char, arg2: *const c_char, arg3: size_t) -> size_t;
762     pub fn strlcpy(arg1: *mut c_char, arg2: *const c_char, arg3: size_t) -> size_t;
763     pub fn strsep(arg1: *mut *mut c_char, arg2: *const c_char) -> *mut c_char;
764     pub fn stresep(arg1: *mut *mut c_char, arg2: *const c_char, arg3: c_int) -> *mut c_char;
765     pub fn strndup(arg1: *const c_char, arg2: size_t) -> *mut c_char;
766     pub fn memrchr(arg1: *const c_void, arg2: c_int, arg3: size_t) -> *mut c_void;
767     pub fn explicit_memset(arg1: *mut c_void, arg2: c_int, arg3: size_t) -> *mut c_void;
768     pub fn consttime_memequal(arg1: *const c_void, arg2: *const c_void, arg3: size_t) -> c_int;
769     pub fn strcoll_l(arg1: *const c_char, arg2: *const c_char, arg3: locale_t) -> c_int;
770     pub fn strxfrm_l(
771         arg1: *mut c_char,
772         arg2: *const c_char,
773         arg3: size_t,
774         arg4: locale_t,
775     ) -> size_t;
776     pub fn strerror_l(arg1: c_int, arg2: locale_t) -> *mut c_char;
777 
778     // strings.h
779     pub fn bcmp(arg1: *const c_void, arg2: *const c_void, arg3: size_t) -> c_int;
780     pub fn bcopy(arg1: *const c_void, arg2: *mut c_void, arg3: size_t);
781     pub fn bzero(arg1: *mut c_void, arg2: size_t);
782     pub fn ffs(arg1: c_int) -> c_int;
783     pub fn popcount(arg1: c_uint) -> c_uint;
784     pub fn popcountl(arg1: c_ulong) -> c_uint;
785     pub fn popcountll(arg1: c_ulonglong) -> c_uint;
786     pub fn popcount32(arg1: u32) -> c_uint;
787     pub fn popcount64(arg1: u64) -> c_uint;
788     pub fn rindex(arg1: *const c_char, arg2: c_int) -> *mut c_char;
789     pub fn strcasecmp(arg1: *const c_char, arg2: *const c_char) -> c_int;
790     pub fn strncasecmp(arg1: *const c_char, arg2: *const c_char, arg3: size_t) -> c_int;
791 
792     // signal.h
793     pub fn signal(arg1: c_int, arg2: sighandler_t) -> sighandler_t;
794     pub fn raise(arg1: c_int) -> c_int;
795 
796     // time.h
797     pub fn asctime(arg1: *const tm) -> *mut c_char;
798     pub fn clock() -> clock_t;
799     pub fn ctime(arg1: *const time_t) -> *mut c_char;
800     pub fn difftime(arg1: time_t, arg2: time_t) -> f64;
801     pub fn gmtime(arg1: *const time_t) -> *mut tm;
802     pub fn localtime(arg1: *const time_t) -> *mut tm;
803     pub fn time(arg1: *mut time_t) -> time_t;
804     pub fn mktime(arg1: *mut tm) -> time_t;
805     pub fn strftime(
806         arg1: *mut c_char,
807         arg2: size_t,
808         arg3: *const c_char,
809         arg4: *const tm,
810     ) -> size_t;
811     pub fn utime(arg1: *const c_char, arg2: *mut time_t) -> c_int;
812     pub fn asctime_r(arg1: *const tm, arg2: *mut c_char) -> *mut c_char;
813     pub fn ctime_r(arg1: *const time_t, arg2: *mut c_char) -> *mut c_char;
814     pub fn gmtime_r(arg1: *const time_t, arg2: *mut tm) -> *mut tm;
815     pub fn localtime_r(arg1: *const time_t, arg2: *mut tm) -> *mut tm;
816 
817     // sys/stat.h
818     pub fn stat(arg1: *const c_char, arg2: *mut stat) -> c_int;
819     pub fn lstat(arg1: *const c_char, arg2: *mut stat) -> c_int;
820     pub fn fstat(arg1: c_int, arg2: *mut stat) -> c_int;
821     pub fn chmod(arg1: *const c_char, arg2: __mode_t) -> c_int;
822     pub fn mkdir(arg1: *const c_char, arg2: __mode_t) -> c_int;
823 
824     // fcntl.h
825     pub fn open(arg1: *const c_char, arg2: c_int, ...) -> c_int;
826     pub fn creat(arg1: *const c_char, arg2: c_int) -> c_int;
827     pub fn close(arg1: c_int) -> c_int;
828     pub fn read(arg1: c_int, arg2: *mut c_void, arg3: c_int) -> c_int;
829     pub fn write(arg1: c_int, arg2: *const c_void, arg3: c_int) -> c_int;
830     pub fn unlink(arg1: *const c_char) -> c_int;
831     pub fn tell(arg1: c_int) -> c_long;
832     pub fn dup(arg1: c_int) -> c_int;
833     pub fn dup2(arg1: c_int, arg2: c_int) -> c_int;
834     pub fn access(arg1: *const c_char, arg2: c_int) -> c_int;
835     pub fn rmdir(arg1: *const c_char) -> c_int;
836     pub fn chdir(arg1: *const c_char) -> c_int;
837     pub fn _exit(arg1: c_int);
838     pub fn getwd(arg1: *mut c_char) -> *mut c_char;
839     pub fn getcwd(arg1: *mut c_char, arg2: size_t) -> *mut c_char;
840     pub static mut optarg: *mut c_char;
841     pub static mut opterr: c_int;
842     pub static mut optind: c_int;
843     pub static mut optopt: c_int;
844     pub static mut optreset: c_int;
845     pub fn getopt(arg1: c_int, arg2: *mut *mut c_char, arg3: *const c_char) -> c_int;
846     pub static mut suboptarg: *mut c_char;
847     pub fn getsubopt(
848         arg1: *mut *mut c_char,
849         arg2: *const *mut c_char,
850         arg3: *mut *mut c_char,
851     ) -> c_int;
852     pub fn fcntl(arg1: c_int, arg2: c_int, ...) -> c_int;
853     pub fn getpid() -> pid_t;
854     pub fn sleep(arg1: c_uint) -> c_uint;
855     pub fn usleep(arg1: useconds_t) -> c_int;
856 
857     // locale.h
858     pub fn localeconv() -> *mut lconv;
859     pub fn setlocale(arg1: c_int, arg2: *const c_char) -> *mut c_char;
860     pub fn duplocale(arg1: locale_t) -> locale_t;
861     pub fn freelocale(arg1: locale_t);
862     pub fn localeconv_l(arg1: locale_t) -> *mut lconv;
863     pub fn newlocale(arg1: c_int, arg2: *const c_char, arg3: locale_t) -> locale_t;
864 
865     // langinfo.h
866     pub fn nl_langinfo(item: ::nl_item) -> *mut ::c_char;
867     pub fn nl_langinfo_l(item: ::nl_item, locale: locale_t) -> *mut ::c_char;
868 
869     // malloc.h
870     pub fn memalign(align: ::size_t, size: ::size_t) -> *mut ::c_void;
871 
872     // sys/types.h
873     pub fn lseek(arg1: c_int, arg2: __off_t, arg3: c_int) -> __off_t;
874 }
875 
876 cfg_if! {
877     if #[cfg(target_arch = "aarch64")] {
878         mod aarch64;
879         pub use self::aarch64::*;
880     } else if #[cfg(any(target_arch = "arm"))] {
881         mod arm;
882         pub use self::arm::*;
883     } else {
884         // Unknown target_arch
885     }
886 }
887