|
| 1 | + |
| 2 | +pub type int8_t = i8; |
| 3 | +pub type int16_t = i16; |
| 4 | +pub type int32_t = i32; |
| 5 | +pub type int64_t = i64; |
| 6 | +pub type uint8_t = u8; |
| 7 | +pub type uint16_t = u16; |
| 8 | +pub type uint32_t = u32; |
| 9 | +pub type uint64_t = u64; |
| 10 | + |
| 11 | +pub type c_schar = i8; |
| 12 | +pub type c_uchar = u8; |
| 13 | +pub type c_short = i16; |
| 14 | +pub type c_ushort = u16; |
| 15 | +pub type c_int = i32; |
| 16 | +pub type c_uint = u32; |
| 17 | +pub type c_float = f32; |
| 18 | +pub type c_double = f64; |
| 19 | +pub type c_longlong = i64; |
| 20 | +pub type c_ulonglong = u64; |
| 21 | +pub type intmax_t = i64; |
| 22 | +pub type uintmax_t = u64; |
| 23 | + |
| 24 | +pub type size_t = usize; |
| 25 | +pub type ptrdiff_t = isize; |
| 26 | +pub type intptr_t = isize; |
| 27 | +pub type uintptr_t = usize; |
| 28 | +pub type ssize_t = isize; |
| 29 | + |
1 | 30 | pub type in_addr_t = u32;
|
2 | 31 | pub type in_port_t = u16;
|
3 | 32 | pub type pthread_key_t = usize;
|
|
56 | 85 | }
|
57 | 86 | }
|
58 | 87 |
|
| 88 | +pub const INT_MIN: c_int = -2147483648; |
| 89 | +pub const INT_MAX: c_int = 2147483647; |
| 90 | + |
59 | 91 | pub const _SC_NPROCESSORS_ONLN: ::c_int = 52;
|
60 | 92 | pub const _SC_PAGESIZE: ::c_int = 54;
|
61 | 93 |
|
@@ -89,7 +121,109 @@ pub const PTHREAD_STACK_MIN: ::size_t = 1024;
|
89 | 121 | pub const SOCK_DGRAM: ::c_int = 128;
|
90 | 122 | pub const SOCK_STREAM: ::c_int = 130;
|
91 | 123 |
|
| 124 | +pub enum FILE {} |
| 125 | +pub enum fpos_t {} // TODO: fill this out with a struct |
| 126 | + |
92 | 127 | extern {
|
| 128 | + pub fn isalnum(c: c_int) -> c_int; |
| 129 | + pub fn isalpha(c: c_int) -> c_int; |
| 130 | + pub fn iscntrl(c: c_int) -> c_int; |
| 131 | + pub fn isdigit(c: c_int) -> c_int; |
| 132 | + pub fn isgraph(c: c_int) -> c_int; |
| 133 | + pub fn islower(c: c_int) -> c_int; |
| 134 | + pub fn isprint(c: c_int) -> c_int; |
| 135 | + pub fn ispunct(c: c_int) -> c_int; |
| 136 | + pub fn isspace(c: c_int) -> c_int; |
| 137 | + pub fn isupper(c: c_int) -> c_int; |
| 138 | + pub fn isxdigit(c: c_int) -> c_int; |
| 139 | + pub fn tolower(c: c_int) -> c_int; |
| 140 | + pub fn toupper(c: c_int) -> c_int; |
| 141 | + pub fn fopen(filename: *const c_char, mode: *const c_char) -> *mut FILE; |
| 142 | + pub fn freopen(filename: *const c_char, mode: *const c_char, |
| 143 | + file: *mut FILE) -> *mut FILE; |
| 144 | + pub fn fflush(file: *mut FILE) -> c_int; |
| 145 | + pub fn fclose(file: *mut FILE) -> c_int; |
| 146 | + pub fn remove(filename: *const c_char) -> c_int; |
| 147 | + pub fn rename(oldname: *const c_char, newname: *const c_char) -> c_int; |
| 148 | + pub fn tmpfile() -> *mut FILE; |
| 149 | + pub fn setvbuf(stream: *mut FILE, buffer: *mut c_char, mode: c_int, |
| 150 | + size: size_t) -> c_int; |
| 151 | + pub fn setbuf(stream: *mut FILE, buf: *mut c_char); |
| 152 | + pub fn getchar() -> c_int; |
| 153 | + pub fn putchar(c: c_int) -> c_int; |
| 154 | + pub fn fgetc(stream: *mut FILE) -> c_int; |
| 155 | + pub fn fgets(buf: *mut c_char, n: c_int, stream: *mut FILE) -> *mut c_char; |
| 156 | + pub fn fputc(c: c_int, stream: *mut FILE) -> c_int; |
| 157 | + pub fn fputs(s: *const c_char, stream: *mut FILE) -> c_int; |
| 158 | + pub fn puts(s: *const c_char) -> c_int; |
| 159 | + pub fn ungetc(c: c_int, stream: *mut FILE) -> c_int; |
| 160 | + pub fn fread(ptr: *mut c_void, size: size_t, nobj: size_t, |
| 161 | + stream: *mut FILE) -> size_t; |
| 162 | + pub fn fwrite(ptr: *const c_void, size: size_t, nobj: size_t, |
| 163 | + stream: *mut FILE) -> size_t; |
| 164 | + pub fn fseek(stream: *mut FILE, offset: c_long, whence: c_int) -> c_int; |
| 165 | + pub fn ftell(stream: *mut FILE) -> c_long; |
| 166 | + pub fn rewind(stream: *mut FILE); |
| 167 | + pub fn fgetpos(stream: *mut FILE, ptr: *mut fpos_t) -> c_int; |
| 168 | + pub fn fsetpos(stream: *mut FILE, ptr: *const fpos_t) -> c_int; |
| 169 | + pub fn feof(stream: *mut FILE) -> c_int; |
| 170 | + pub fn ferror(stream: *mut FILE) -> c_int; |
| 171 | + pub fn perror(s: *const c_char); |
| 172 | + pub fn atoi(s: *const c_char) -> c_int; |
| 173 | + pub fn strtod(s: *const c_char, endp: *mut *mut c_char) -> c_double; |
| 174 | + pub fn strtol(s: *const c_char, endp: *mut *mut c_char, |
| 175 | + base: c_int) -> c_long; |
| 176 | + pub fn strtoul(s: *const c_char, endp: *mut *mut c_char, |
| 177 | + base: c_int) -> c_ulong; |
| 178 | + pub fn calloc(nobj: size_t, size: size_t) -> *mut c_void; |
| 179 | + pub fn malloc(size: size_t) -> *mut c_void; |
| 180 | + pub fn realloc(p: *mut c_void, size: size_t) -> *mut c_void; |
| 181 | + pub fn free(p: *mut c_void); |
| 182 | + pub fn abort() -> !; |
| 183 | + pub fn exit(status: c_int) -> !; |
| 184 | + pub fn _exit(status: c_int) -> !; |
| 185 | + pub fn atexit(cb: extern fn()) -> c_int; |
| 186 | + pub fn system(s: *const c_char) -> c_int; |
| 187 | + pub fn getenv(s: *const c_char) -> *mut c_char; |
| 188 | + |
| 189 | + pub fn strcpy(dst: *mut c_char, src: *const c_char) -> *mut c_char; |
| 190 | + pub fn strncpy(dst: *mut c_char, src: *const c_char, |
| 191 | + n: size_t) -> *mut c_char; |
| 192 | + pub fn strcat(s: *mut c_char, ct: *const c_char) -> *mut c_char; |
| 193 | + pub fn strncat(s: *mut c_char, ct: *const c_char, n: size_t) -> *mut c_char; |
| 194 | + pub fn strcmp(cs: *const c_char, ct: *const c_char) -> c_int; |
| 195 | + pub fn strncmp(cs: *const c_char, ct: *const c_char, n: size_t) -> c_int; |
| 196 | + pub fn strcoll(cs: *const c_char, ct: *const c_char) -> c_int; |
| 197 | + pub fn strchr(cs: *const c_char, c: c_int) -> *mut c_char; |
| 198 | + pub fn strrchr(cs: *const c_char, c: c_int) -> *mut c_char; |
| 199 | + pub fn strspn(cs: *const c_char, ct: *const c_char) -> size_t; |
| 200 | + pub fn strcspn(cs: *const c_char, ct: *const c_char) -> size_t; |
| 201 | + pub fn strdup(cs: *const c_char) -> *mut c_char; |
| 202 | + pub fn strpbrk(cs: *const c_char, ct: *const c_char) -> *mut c_char; |
| 203 | + pub fn strstr(cs: *const c_char, ct: *const c_char) -> *mut c_char; |
| 204 | + pub fn strlen(cs: *const c_char) -> size_t; |
| 205 | + pub fn strnlen(cs: *const c_char, maxlen: size_t) -> size_t; |
| 206 | + pub fn strerror(n: c_int) -> *mut c_char; |
| 207 | + pub fn strtok(s: *mut c_char, t: *const c_char) -> *mut c_char; |
| 208 | + pub fn strxfrm(s: *mut c_char, ct: *const c_char, n: size_t) -> size_t; |
| 209 | + pub fn wcslen(buf: *const wchar_t) -> size_t; |
| 210 | + pub fn wcstombs(dest: *mut c_char, src: *const wchar_t, |
| 211 | + n: size_t) -> ::size_t; |
| 212 | + |
| 213 | + pub fn memchr(cx: *const c_void, c: c_int, n: size_t) -> *mut c_void; |
| 214 | + pub fn memcmp(cx: *const c_void, ct: *const c_void, n: size_t) -> c_int; |
| 215 | + pub fn memcpy(dest: *mut c_void, src: *const c_void, |
| 216 | + n: size_t) -> *mut c_void; |
| 217 | + pub fn memmove(dest: *mut c_void, src: *const c_void, |
| 218 | + n: size_t) -> *mut c_void; |
| 219 | + pub fn memset(dest: *mut c_void, c: c_int, n: size_t) -> *mut c_void; |
| 220 | + |
| 221 | + pub fn abs(i: c_int) -> c_int; |
| 222 | + pub fn atof(s: *const c_char) -> c_double; |
| 223 | + pub fn labs(i: c_long) -> c_long; |
| 224 | + pub fn rand() -> c_int; |
| 225 | + pub fn srand(seed: c_uint); |
| 226 | + |
93 | 227 | pub fn arc4random_buf(buf: *const ::c_void, len: ::size_t);
|
94 | 228 | pub fn freeaddrinfo(res: *mut addrinfo);
|
95 | 229 | pub fn gai_strerror(errcode: ::c_int) -> *const ::c_char;
|
@@ -164,3 +298,21 @@ cfg_if! {
|
164 | 298 | // Unknown target_arch
|
165 | 299 | }
|
166 | 300 | }
|
| 301 | + |
| 302 | +cfg_if! { |
| 303 | + if #[cfg(core_cvoid)] { |
| 304 | + pub use core::ffi::c_void; |
| 305 | + } else { |
| 306 | + // Use repr(u8) as LLVM expects `void*` to be the same as `i8*` to help |
| 307 | + // enable more optimization opportunities around it recognizing things |
| 308 | + // like malloc/free. |
| 309 | + #[repr(u8)] |
| 310 | + pub enum c_void { |
| 311 | + // Two dummy variants so the #[repr] attribute can be used. |
| 312 | + #[doc(hidden)] |
| 313 | + __variant1, |
| 314 | + #[doc(hidden)] |
| 315 | + __variant2, |
| 316 | + } |
| 317 | + } |
| 318 | +} |
0 commit comments