1 pub type int8_t = i8; 2 pub type int16_t = i16; 3 pub type int32_t = i32; 4 pub type int64_t = i64; 5 pub type uint8_t = u8; 6 pub type uint16_t = u16; 7 pub type uint32_t = u32; 8 pub type uint64_t = u64; 9 10 pub type c_schar = i8; 11 pub type c_uchar = u8; 12 pub type c_short = i16; 13 pub type c_ushort = u16; 14 pub type c_int = i32; 15 pub type c_uint = u32; 16 pub type c_float = f32; 17 pub type c_double = f64; 18 pub type c_longlong = i64; 19 pub type c_ulonglong = u64; 20 pub type intmax_t = i64; 21 pub type uintmax_t = u64; 22 23 pub type size_t = usize; 24 pub type ptrdiff_t = isize; 25 pub type intptr_t = isize; 26 pub type uintptr_t = usize; 27 pub type ssize_t = isize; 28 29 pub type in_addr_t = u32; 30 pub type in_port_t = u16; 31 pub type pthread_key_t = usize; 32 pub type pthread_t = usize; 33 pub type sa_family_t = u8; 34 pub type socklen_t = usize; 35 pub type time_t = i64; 36 37 s! { 38 pub struct addrinfo { 39 pub ai_flags: ::c_int, 40 pub ai_family: ::c_int, 41 pub ai_socktype: ::c_int, 42 pub ai_protocol: ::c_int, 43 pub ai_addrlen: ::socklen_t, 44 pub ai_addr: *mut ::sockaddr, 45 pub ai_canonname: *mut ::c_char, 46 pub ai_next: *mut addrinfo, 47 } 48 49 pub struct in_addr { 50 pub s_addr: in_addr_t, 51 } 52 53 pub struct in6_addr { 54 pub s6_addr: [u8; 16], 55 } 56 57 pub struct pthread_attr_t { 58 __detachstate: ::c_int, 59 __stacksize: usize, 60 } 61 62 pub struct sockaddr { 63 pub sa_family: sa_family_t, 64 pub sa_data: [::c_char; 0], 65 } 66 67 pub struct sockaddr_in { 68 pub sin_family: ::sa_family_t, 69 pub sin_port: ::in_port_t, 70 pub sin_addr: ::in_addr, 71 } 72 73 pub struct sockaddr_in6 { 74 pub sin6_family: sa_family_t, 75 pub sin6_port: ::in_port_t, 76 pub sin6_flowinfo: u32, 77 pub sin6_addr: ::in6_addr, 78 pub sin6_scope_id: u32, 79 } 80 81 pub struct sockaddr_storage { 82 pub ss_family: ::sa_family_t, 83 __ss_data: [u8; 32], 84 } 85 } 86 87 pub const INT_MIN: c_int = -2147483648; 88 pub const INT_MAX: c_int = 2147483647; 89 90 pub const _SC_NPROCESSORS_ONLN: ::c_int = 52; 91 pub const _SC_PAGESIZE: ::c_int = 54; 92 93 pub const AF_INET: ::c_int = 1; 94 pub const AF_INET6: ::c_int = 2; 95 96 pub const EACCES: ::c_int = 2; 97 pub const EADDRINUSE: ::c_int = 3; 98 pub const EADDRNOTAVAIL: ::c_int = 4; 99 pub const EAGAIN: ::c_int = 6; 100 pub const ECONNABORTED: ::c_int = 13; 101 pub const ECONNREFUSED: ::c_int = 14; 102 pub const ECONNRESET: ::c_int = 15; 103 pub const EEXIST: ::c_int = 20; 104 pub const EINTR: ::c_int = 27; 105 pub const EINVAL: ::c_int = 28; 106 pub const ENOENT: ::c_int = 44; 107 pub const ENOTCONN: ::c_int = 53; 108 pub const EPERM: ::c_int = 63; 109 pub const EPIPE: ::c_int = 64; 110 pub const ETIMEDOUT: ::c_int = 73; 111 pub const EWOULDBLOCK: ::c_int = EAGAIN; 112 113 pub const EAI_SYSTEM: ::c_int = 9; 114 115 pub const EXIT_FAILURE: ::c_int = 1; 116 pub const EXIT_SUCCESS: ::c_int = 0; 117 118 pub const PTHREAD_STACK_MIN: ::size_t = 1024; 119 120 pub const SOCK_DGRAM: ::c_int = 128; 121 pub const SOCK_STREAM: ::c_int = 130; 122 123 #[cfg_attr(feature = "extra_traits", derive(Debug))] 124 pub enum FILE {} 125 impl ::Copy for FILE {} 126 impl ::Clone for FILE { clone(&self) -> FILE127 fn clone(&self) -> FILE { *self } 128 } 129 #[cfg_attr(feature = "extra_traits", derive(Debug))] 130 pub enum fpos_t {} // TODO: fill this out with a struct 131 impl ::Copy for fpos_t {} 132 impl ::Clone for fpos_t { clone(&self) -> fpos_t133 fn clone(&self) -> fpos_t { *self } 134 } 135 136 extern { isalnum(c: c_int) -> c_int137 pub fn isalnum(c: c_int) -> c_int; isalpha(c: c_int) -> c_int138 pub fn isalpha(c: c_int) -> c_int; iscntrl(c: c_int) -> c_int139 pub fn iscntrl(c: c_int) -> c_int; isdigit(c: c_int) -> c_int140 pub fn isdigit(c: c_int) -> c_int; isgraph(c: c_int) -> c_int141 pub fn isgraph(c: c_int) -> c_int; islower(c: c_int) -> c_int142 pub fn islower(c: c_int) -> c_int; isprint(c: c_int) -> c_int143 pub fn isprint(c: c_int) -> c_int; ispunct(c: c_int) -> c_int144 pub fn ispunct(c: c_int) -> c_int; isspace(c: c_int) -> c_int145 pub fn isspace(c: c_int) -> c_int; isupper(c: c_int) -> c_int146 pub fn isupper(c: c_int) -> c_int; isxdigit(c: c_int) -> c_int147 pub fn isxdigit(c: c_int) -> c_int; tolower(c: c_int) -> c_int148 pub fn tolower(c: c_int) -> c_int; toupper(c: c_int) -> c_int149 pub fn toupper(c: c_int) -> c_int; fopen(filename: *const c_char, mode: *const c_char) -> *mut FILE150 pub fn fopen(filename: *const c_char, mode: *const c_char) -> *mut FILE; freopen(filename: *const c_char, mode: *const c_char, file: *mut FILE) -> *mut FILE151 pub fn freopen(filename: *const c_char, mode: *const c_char, 152 file: *mut FILE) -> *mut FILE; fflush(file: *mut FILE) -> c_int153 pub fn fflush(file: *mut FILE) -> c_int; fclose(file: *mut FILE) -> c_int154 pub fn fclose(file: *mut FILE) -> c_int; remove(filename: *const c_char) -> c_int155 pub fn remove(filename: *const c_char) -> c_int; rename(oldname: *const c_char, newname: *const c_char) -> c_int156 pub fn rename(oldname: *const c_char, newname: *const c_char) -> c_int; tmpfile() -> *mut FILE157 pub fn tmpfile() -> *mut FILE; setvbuf(stream: *mut FILE, buffer: *mut c_char, mode: c_int, size: size_t) -> c_int158 pub fn setvbuf(stream: *mut FILE, buffer: *mut c_char, mode: c_int, 159 size: size_t) -> c_int; setbuf(stream: *mut FILE, buf: *mut c_char)160 pub fn setbuf(stream: *mut FILE, buf: *mut c_char); getchar() -> c_int161 pub fn getchar() -> c_int; putchar(c: c_int) -> c_int162 pub fn putchar(c: c_int) -> c_int; fgetc(stream: *mut FILE) -> c_int163 pub fn fgetc(stream: *mut FILE) -> c_int; fgets(buf: *mut c_char, n: c_int, stream: *mut FILE) -> *mut c_char164 pub fn fgets(buf: *mut c_char, n: c_int, stream: *mut FILE) -> *mut c_char; fputc(c: c_int, stream: *mut FILE) -> c_int165 pub fn fputc(c: c_int, stream: *mut FILE) -> c_int; fputs(s: *const c_char, stream: *mut FILE) -> c_int166 pub fn fputs(s: *const c_char, stream: *mut FILE) -> c_int; puts(s: *const c_char) -> c_int167 pub fn puts(s: *const c_char) -> c_int; ungetc(c: c_int, stream: *mut FILE) -> c_int168 pub fn ungetc(c: c_int, stream: *mut FILE) -> c_int; fread(ptr: *mut c_void, size: size_t, nobj: size_t, stream: *mut FILE) -> size_t169 pub fn fread(ptr: *mut c_void, size: size_t, nobj: size_t, 170 stream: *mut FILE) -> size_t; fwrite(ptr: *const c_void, size: size_t, nobj: size_t, stream: *mut FILE) -> size_t171 pub fn fwrite(ptr: *const c_void, size: size_t, nobj: size_t, 172 stream: *mut FILE) -> size_t; fseek(stream: *mut FILE, offset: c_long, whence: c_int) -> c_int173 pub fn fseek(stream: *mut FILE, offset: c_long, whence: c_int) -> c_int; ftell(stream: *mut FILE) -> c_long174 pub fn ftell(stream: *mut FILE) -> c_long; rewind(stream: *mut FILE)175 pub fn rewind(stream: *mut FILE); fgetpos(stream: *mut FILE, ptr: *mut fpos_t) -> c_int176 pub fn fgetpos(stream: *mut FILE, ptr: *mut fpos_t) -> c_int; fsetpos(stream: *mut FILE, ptr: *const fpos_t) -> c_int177 pub fn fsetpos(stream: *mut FILE, ptr: *const fpos_t) -> c_int; feof(stream: *mut FILE) -> c_int178 pub fn feof(stream: *mut FILE) -> c_int; ferror(stream: *mut FILE) -> c_int179 pub fn ferror(stream: *mut FILE) -> c_int; perror(s: *const c_char)180 pub fn perror(s: *const c_char); atoi(s: *const c_char) -> c_int181 pub fn atoi(s: *const c_char) -> c_int; strtod(s: *const c_char, endp: *mut *mut c_char) -> c_double182 pub fn strtod(s: *const c_char, endp: *mut *mut c_char) -> c_double; strtol(s: *const c_char, endp: *mut *mut c_char, base: c_int) -> c_long183 pub fn strtol(s: *const c_char, endp: *mut *mut c_char, 184 base: c_int) -> c_long; strtoul(s: *const c_char, endp: *mut *mut c_char, base: c_int) -> c_ulong185 pub fn strtoul(s: *const c_char, endp: *mut *mut c_char, 186 base: c_int) -> c_ulong; calloc(nobj: size_t, size: size_t) -> *mut c_void187 pub fn calloc(nobj: size_t, size: size_t) -> *mut c_void; malloc(size: size_t) -> *mut c_void188 pub fn malloc(size: size_t) -> *mut c_void; realloc(p: *mut c_void, size: size_t) -> *mut c_void189 pub fn realloc(p: *mut c_void, size: size_t) -> *mut c_void; free(p: *mut c_void)190 pub fn free(p: *mut c_void); abort() -> !191 pub fn abort() -> !; exit(status: c_int) -> !192 pub fn exit(status: c_int) -> !; _exit(status: c_int) -> !193 pub fn _exit(status: c_int) -> !; atexit(cb: extern fn()) -> c_int194 pub fn atexit(cb: extern fn()) -> c_int; system(s: *const c_char) -> c_int195 pub fn system(s: *const c_char) -> c_int; getenv(s: *const c_char) -> *mut c_char196 pub fn getenv(s: *const c_char) -> *mut c_char; getline(lineptr: *mut *mut c_char, n: *mut size_t, stream: *mut FILE) -> ssize_t197 pub fn getline (lineptr: *mut *mut c_char, n: *mut size_t, 198 stream: *mut FILE) -> ssize_t; 199 strcpy(dst: *mut c_char, src: *const c_char) -> *mut c_char200 pub fn strcpy(dst: *mut c_char, src: *const c_char) -> *mut c_char; strncpy(dst: *mut c_char, src: *const c_char, n: size_t) -> *mut c_char201 pub fn strncpy(dst: *mut c_char, src: *const c_char, 202 n: size_t) -> *mut c_char; strcat(s: *mut c_char, ct: *const c_char) -> *mut c_char203 pub fn strcat(s: *mut c_char, ct: *const c_char) -> *mut c_char; strncat(s: *mut c_char, ct: *const c_char, n: size_t) -> *mut c_char204 pub fn strncat(s: *mut c_char, ct: *const c_char, n: size_t) -> *mut c_char; strcmp(cs: *const c_char, ct: *const c_char) -> c_int205 pub fn strcmp(cs: *const c_char, ct: *const c_char) -> c_int; strncmp(cs: *const c_char, ct: *const c_char, n: size_t) -> c_int206 pub fn strncmp(cs: *const c_char, ct: *const c_char, n: size_t) -> c_int; strcoll(cs: *const c_char, ct: *const c_char) -> c_int207 pub fn strcoll(cs: *const c_char, ct: *const c_char) -> c_int; strchr(cs: *const c_char, c: c_int) -> *mut c_char208 pub fn strchr(cs: *const c_char, c: c_int) -> *mut c_char; strrchr(cs: *const c_char, c: c_int) -> *mut c_char209 pub fn strrchr(cs: *const c_char, c: c_int) -> *mut c_char; strspn(cs: *const c_char, ct: *const c_char) -> size_t210 pub fn strspn(cs: *const c_char, ct: *const c_char) -> size_t; strcspn(cs: *const c_char, ct: *const c_char) -> size_t211 pub fn strcspn(cs: *const c_char, ct: *const c_char) -> size_t; strdup(cs: *const c_char) -> *mut c_char212 pub fn strdup(cs: *const c_char) -> *mut c_char; strpbrk(cs: *const c_char, ct: *const c_char) -> *mut c_char213 pub fn strpbrk(cs: *const c_char, ct: *const c_char) -> *mut c_char; strstr(cs: *const c_char, ct: *const c_char) -> *mut c_char214 pub fn strstr(cs: *const c_char, ct: *const c_char) -> *mut c_char; strcasecmp(s1: *const c_char, s2: *const c_char) -> c_int215 pub fn strcasecmp(s1: *const c_char, s2: *const c_char) -> c_int; strncasecmp(s1: *const c_char, s2: *const c_char, n: size_t) -> c_int216 pub fn strncasecmp(s1: *const c_char, s2: *const c_char, 217 n: size_t) -> c_int; strlen(cs: *const c_char) -> size_t218 pub fn strlen(cs: *const c_char) -> size_t; strnlen(cs: *const c_char, maxlen: size_t) -> size_t219 pub fn strnlen(cs: *const c_char, maxlen: size_t) -> size_t; strerror(n: c_int) -> *mut c_char220 pub fn strerror(n: c_int) -> *mut c_char; strtok(s: *mut c_char, t: *const c_char) -> *mut c_char221 pub fn strtok(s: *mut c_char, t: *const c_char) -> *mut c_char; strxfrm(s: *mut c_char, ct: *const c_char, n: size_t) -> size_t222 pub fn strxfrm(s: *mut c_char, ct: *const c_char, n: size_t) -> size_t; wcslen(buf: *const wchar_t) -> size_t223 pub fn wcslen(buf: *const wchar_t) -> size_t; wcstombs(dest: *mut c_char, src: *const wchar_t, n: size_t) -> ::size_t224 pub fn wcstombs(dest: *mut c_char, src: *const wchar_t, 225 n: size_t) -> ::size_t; 226 memchr(cx: *const c_void, c: c_int, n: size_t) -> *mut c_void227 pub fn memchr(cx: *const c_void, c: c_int, n: size_t) -> *mut c_void; memcmp(cx: *const c_void, ct: *const c_void, n: size_t) -> c_int228 pub fn memcmp(cx: *const c_void, ct: *const c_void, n: size_t) -> c_int; memcpy(dest: *mut c_void, src: *const c_void, n: size_t) -> *mut c_void229 pub fn memcpy(dest: *mut c_void, src: *const c_void, 230 n: size_t) -> *mut c_void; memmove(dest: *mut c_void, src: *const c_void, n: size_t) -> *mut c_void231 pub fn memmove(dest: *mut c_void, src: *const c_void, 232 n: size_t) -> *mut c_void; memset(dest: *mut c_void, c: c_int, n: size_t) -> *mut c_void233 pub fn memset(dest: *mut c_void, c: c_int, n: size_t) -> *mut c_void; 234 abs(i: c_int) -> c_int235 pub fn abs(i: c_int) -> c_int; atof(s: *const c_char) -> c_double236 pub fn atof(s: *const c_char) -> c_double; labs(i: c_long) -> c_long237 pub fn labs(i: c_long) -> c_long; rand() -> c_int238 pub fn rand() -> c_int; srand(seed: c_uint)239 pub fn srand(seed: c_uint); 240 arc4random_buf(buf: *const ::c_void, len: ::size_t)241 pub fn arc4random_buf(buf: *const ::c_void, len: ::size_t); freeaddrinfo(res: *mut addrinfo)242 pub fn freeaddrinfo(res: *mut addrinfo); gai_strerror(errcode: ::c_int) -> *const ::c_char243 pub fn gai_strerror(errcode: ::c_int) -> *const ::c_char; getaddrinfo( node: *const c_char, service: *const c_char, hints: *const addrinfo, res: *mut *mut addrinfo, ) -> ::c_int244 pub fn getaddrinfo( 245 node: *const c_char, 246 service: *const c_char, 247 hints: *const addrinfo, 248 res: *mut *mut addrinfo, 249 ) -> ::c_int; getsockopt( sockfd: ::c_int, level: ::c_int, optname: ::c_int, optval: *mut ::c_void, optlen: *mut ::socklen_t, ) -> ::c_int250 pub fn getsockopt( 251 sockfd: ::c_int, 252 level: ::c_int, 253 optname: ::c_int, 254 optval: *mut ::c_void, 255 optlen: *mut ::socklen_t, 256 ) -> ::c_int; posix_memalign( memptr: *mut *mut ::c_void, align: ::size_t, size: ::size_t, ) -> ::c_int257 pub fn posix_memalign( 258 memptr: *mut *mut ::c_void, 259 align: ::size_t, 260 size: ::size_t, 261 ) -> ::c_int; pthread_attr_destroy(attr: *mut ::pthread_attr_t) -> ::c_int262 pub fn pthread_attr_destroy(attr: *mut ::pthread_attr_t) -> ::c_int; pthread_attr_init(attr: *mut ::pthread_attr_t) -> ::c_int263 pub fn pthread_attr_init(attr: *mut ::pthread_attr_t) -> ::c_int; pthread_attr_setstacksize( attr: *mut ::pthread_attr_t, stack_size: ::size_t, ) -> ::c_int264 pub fn pthread_attr_setstacksize( 265 attr: *mut ::pthread_attr_t, 266 stack_size: ::size_t, 267 ) -> ::c_int; pthread_create( native: *mut ::pthread_t, attr: *const ::pthread_attr_t, f: extern fn(*mut ::c_void) -> *mut ::c_void, value: *mut ::c_void, ) -> ::c_int268 pub fn pthread_create( 269 native: *mut ::pthread_t, 270 attr: *const ::pthread_attr_t, 271 f: extern fn(*mut ::c_void) -> *mut ::c_void, 272 value: *mut ::c_void, 273 ) -> ::c_int; pthread_detach(thread: ::pthread_t) -> ::c_int274 pub fn pthread_detach(thread: ::pthread_t) -> ::c_int; pthread_getspecific(key: pthread_key_t) -> *mut ::c_void275 pub fn pthread_getspecific(key: pthread_key_t) -> *mut ::c_void; pthread_join( native: ::pthread_t, value: *mut *mut ::c_void, ) -> ::c_int276 pub fn pthread_join( 277 native: ::pthread_t, 278 value: *mut *mut ::c_void, 279 ) -> ::c_int; pthread_key_create( key: *mut pthread_key_t, dtor: ::Option<unsafe extern fn(*mut ::c_void)>, ) -> ::c_int280 pub fn pthread_key_create( 281 key: *mut pthread_key_t, 282 dtor: ::Option<unsafe extern fn(*mut ::c_void)>, 283 ) -> ::c_int; pthread_key_delete(key: pthread_key_t) -> ::c_int284 pub fn pthread_key_delete(key: pthread_key_t) -> ::c_int; pthread_setspecific( key: pthread_key_t, value: *const ::c_void, ) -> ::c_int285 pub fn pthread_setspecific( 286 key: pthread_key_t, 287 value: *const ::c_void, 288 ) -> ::c_int; send( socket: ::c_int, buf: *const ::c_void, len: ::size_t, flags: ::c_int, ) -> ::ssize_t289 pub fn send( 290 socket: ::c_int, 291 buf: *const ::c_void, 292 len: ::size_t, 293 flags: ::c_int, 294 ) -> ::ssize_t; sysconf(name: ::c_int) -> ::c_long295 pub fn sysconf(name: ::c_int) -> ::c_long; 296 } 297 298 cfg_if! { 299 if #[cfg(target_arch = "aarch64")] { 300 mod aarch64; 301 pub use self::aarch64::*; 302 } else if #[cfg(any(target_arch = "arm"))] { 303 mod arm; 304 pub use self::arm::*; 305 } else if #[cfg(any(target_arch = "x86"))] { 306 mod x86; 307 pub use self::x86::*; 308 } else if #[cfg(any(target_arch = "x86_64"))] { 309 mod x86_64; 310 pub use self::x86_64::*; 311 } else { 312 // Unknown target_arch 313 } 314 } 315 316 cfg_if! { 317 if #[cfg(libc_core_cvoid)] { 318 pub use ::ffi::c_void; 319 } else { 320 // Use repr(u8) as LLVM expects `void*` to be the same as `i8*` to help 321 // enable more optimization opportunities around it recognizing things 322 // like malloc/free. 323 #[repr(u8)] 324 #[allow(missing_copy_implementations)] 325 #[allow(missing_debug_implementations)] 326 pub enum c_void { 327 // Two dummy variants so the #[repr] attribute can be used. 328 #[doc(hidden)] 329 __variant1, 330 #[doc(hidden)] 331 __variant2, 332 } 333 } 334 } 335