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