| 1 | module builtin |
| 2 | |
| 3 | @[typedef] |
| 4 | pub struct C.FILE {} |
| 5 | |
| 6 | // Virtual C globals that are available through libc or generated C headers. |
| 7 | __global C.errno int |
| 8 | __global C.stdin &C.FILE |
| 9 | __global C.stdout &C.FILE |
| 10 | __global C.stderr &C.FILE |
| 11 | __global C.environ &&char |
| 12 | __global C._wyp &u64 |
| 13 | |
| 14 | // <string.h> |
| 15 | fn C.memcpy(dest voidptr, const_src voidptr, n usize) voidptr |
| 16 | |
| 17 | fn C.memcmp(const_s1 voidptr, const_s2 voidptr, n usize) i32 |
| 18 | |
| 19 | fn C.memmove(dest voidptr, const_src voidptr, n usize) voidptr |
| 20 | |
| 21 | fn C.memset(str voidptr, c i32, n usize) voidptr |
| 22 | |
| 23 | fn C.memchr(str voidptr, c i32, n usize) voidptr |
| 24 | |
| 25 | fn C.memmem(haystack voidptr, haystacklen usize, needle voidptr, needlelen usize) voidptr |
| 26 | |
| 27 | fn C.mempcpy(dest voidptr, src voidptr, n usize) voidptr |
| 28 | |
| 29 | @[trusted] |
| 30 | fn C.calloc(usize, usize) voidptr |
| 31 | |
| 32 | fn C.atoi(&char) i32 |
| 33 | |
| 34 | fn C.malloc(usize) voidptr |
| 35 | |
| 36 | fn C.realloc(a voidptr, b usize) voidptr |
| 37 | |
| 38 | fn C.free(ptr voidptr) |
| 39 | |
| 40 | fn C.mmap(addr_length voidptr, length usize, prot i32, flags i32, fd i32, offset isize) voidptr |
| 41 | fn C.mprotect(addr_length voidptr, len usize, prot i32) i32 |
| 42 | |
| 43 | fn C.aligned_alloc(align usize, size usize) voidptr |
| 44 | |
| 45 | // windows aligned memory functions |
| 46 | fn C._aligned_malloc(size isize, align isize) voidptr |
| 47 | fn C._aligned_free(voidptr) |
| 48 | fn C._aligned_realloc(voidptr, size isize, align isize) voidptr |
| 49 | fn C._aligned_offset_malloc(size isize, align isize, offset isize) voidptr |
| 50 | fn C._aligned_offset_realloc(voidptr, size isize, align isize, offset isize) voidptr |
| 51 | fn C._aligned_msize(voidptr, align isize, offset isize) isize |
| 52 | fn C._aligned_recalloc(voidptr, num isize, size isize, align isize) voidptr |
| 53 | |
| 54 | $if windows { |
| 55 | fn C.VirtualAlloc(voidptr, isize, u32, u32) voidptr |
| 56 | fn C.VirtualProtect(voidptr, isize, u32, &u32) bool |
| 57 | } |
| 58 | |
| 59 | @[noreturn; trusted] |
| 60 | fn C.exit(code i32) |
| 61 | |
| 62 | fn C.qsort(base voidptr, items usize, item_size usize, cb C.qsort_callback_func) |
| 63 | |
| 64 | fn C.strlen(s &char) i32 |
| 65 | |
| 66 | @[trusted] |
| 67 | fn C.isdigit(c i32) bool |
| 68 | |
| 69 | // stdio.h |
| 70 | fn C.popen(c &char, t &char) voidptr |
| 71 | |
| 72 | // <libproc.h> |
| 73 | fn C.proc_pidpath(i32, voidptr, i32) i32 |
| 74 | |
| 75 | fn C.realpath(const_path &char, resolved_path &char) &char |
| 76 | |
| 77 | // fn C.chmod(byteptr, mode_t) int |
| 78 | fn C.chmod(path &char, mode u32) i32 |
| 79 | |
| 80 | fn C.printf(const_format &char, opt ...voidptr) i32 |
| 81 | fn C.dprintf(fd i32, const_format &char, opt ...voidptr) i32 |
| 82 | fn C.fprintf(fstream &C.FILE, const_format &char, opt ...voidptr) i32 |
| 83 | fn C.sprintf(str &char, const_format &char, opt ...voidptr) i32 |
| 84 | fn C.snprintf(str &char, size usize, const_format &char, opt ...voidptr) i32 |
| 85 | fn C.wprintf(const_format &u16, opt ...voidptr) i32 |
| 86 | |
| 87 | // used by Android for (e)println to output to the Android log system / logcat |
| 88 | pub fn C.android_print(fstream voidptr, format &char, opt ...voidptr) |
| 89 | |
| 90 | fn C.sscanf(str &char, const_format &char, opt ...voidptr) i32 |
| 91 | fn C.scanf(const_format &char, opt ...voidptr) i32 |
| 92 | |
| 93 | fn C.puts(msg &char) i32 |
| 94 | @[trusted] |
| 95 | fn C.abs(f64) f64 |
| 96 | |
| 97 | fn C.fputs(msg &char, fstream &C.FILE) i32 |
| 98 | |
| 99 | fn C.fflush(fstream &C.FILE) i32 |
| 100 | |
| 101 | // TODO: define args in these functions |
| 102 | fn C.fseek(stream &C.FILE, offset i32, whence i32) i32 |
| 103 | |
| 104 | fn C.fopen(filename &char, mode &char) &C.FILE |
| 105 | |
| 106 | fn C.fileno(&C.FILE) i32 |
| 107 | |
| 108 | fn C.fread(ptr voidptr, item_size usize, items usize, stream &C.FILE) usize |
| 109 | |
| 110 | fn C.fwrite(ptr voidptr, item_size usize, items usize, stream &C.FILE) usize |
| 111 | |
| 112 | fn C.fclose(stream &C.FILE) i32 |
| 113 | |
| 114 | fn C.pclose(stream &C.FILE) i32 |
| 115 | |
| 116 | fn C.open(path &char, flags i32, mode ...int) i32 |
| 117 | fn C.close(fd i32) i32 |
| 118 | |
| 119 | fn C.strrchr(s &char, c i32) &char |
| 120 | fn C.strchr(s &char, c i32) &char |
| 121 | fn C.strstr(const_haystack &char, const_needle &char) &char |
| 122 | |
| 123 | // process execution, os.process: |
| 124 | @[trusted] |
| 125 | fn C.GetCurrentProcessId() u32 |
| 126 | @[trusted] |
| 127 | fn C._getpid() i32 |
| 128 | @[trusted] |
| 129 | fn C.getpid() i32 |
| 130 | |
| 131 | @[trusted] |
| 132 | fn C.GetCurrentThreadId() u32 |
| 133 | @[trusted] |
| 134 | fn C.gettid() u32 |
| 135 | |
| 136 | @[trusted] |
| 137 | fn C.getuid() i32 |
| 138 | |
| 139 | @[trusted] |
| 140 | fn C.geteuid() i32 |
| 141 | |
| 142 | fn C.system(cmd &char) i32 |
| 143 | |
| 144 | fn C.posix_spawn(child_pid &int, path &char, file_actions voidptr, attrp voidptr, argv &&char, envp &&char) i32 |
| 145 | |
| 146 | fn C.posix_spawnp(child_pid &int, exefile &char, file_actions voidptr, attrp voidptr, argv &&char, envp &&char) i32 |
| 147 | |
| 148 | fn C.execve(cmd_path &char, args voidptr, envs voidptr) i32 |
| 149 | |
| 150 | fn C.execvp(cmd_path &char, args &&char) i32 |
| 151 | |
| 152 | fn C._execve(cmd_path &char, args voidptr, envs voidptr) i32 |
| 153 | |
| 154 | fn C._execvp(cmd_path &char, args &&char) i32 |
| 155 | |
| 156 | fn C.strcmp(s1 &char, s2 &char) i32 |
| 157 | |
| 158 | @[trusted] |
| 159 | fn C.fork() i32 |
| 160 | |
| 161 | fn C.wait(status &int) i32 |
| 162 | |
| 163 | fn C.waitpid(pid i32, status &int, options i32) i32 |
| 164 | |
| 165 | @[trusted] |
| 166 | fn C.kill(pid i32, sig i32) i32 |
| 167 | |
| 168 | fn C.setenv(&char, &char, i32) i32 |
| 169 | |
| 170 | fn C.unsetenv(&char) i32 |
| 171 | |
| 172 | fn C.access(path &char, amode i32) i32 |
| 173 | |
| 174 | fn C.remove(filename &char) i32 |
| 175 | |
| 176 | fn C.rmdir(path &char) i32 |
| 177 | |
| 178 | fn C.chdir(path &char) i32 |
| 179 | |
| 180 | fn C.rewind(stream &C.FILE) i32 |
| 181 | |
| 182 | fn C.ftell(&C.FILE) isize |
| 183 | |
| 184 | fn C.stat(&char, voidptr) i32 |
| 185 | |
| 186 | fn C.lstat(path &char, buf &C.stat) i32 |
| 187 | |
| 188 | fn C.statvfs(const_path &char, buf &C.statvfs) i32 |
| 189 | |
| 190 | fn C.rename(old_filename &char, new_filename &char) i32 |
| 191 | |
| 192 | fn C.fgets(str &char, n i32, stream &C.FILE) i32 |
| 193 | |
| 194 | fn C.fgetpos(&C.FILE, voidptr) i32 |
| 195 | |
| 196 | @[trusted] |
| 197 | fn C.sigemptyset() i32 |
| 198 | |
| 199 | fn C.getcwd(buf &char, size usize) &char |
| 200 | |
| 201 | @[trusted] |
| 202 | fn C.mktime() i32 |
| 203 | |
| 204 | fn C.gettimeofday(tv &C.timeval, tz &C.timezone) i32 |
| 205 | |
| 206 | @[trusted] |
| 207 | fn C.sleep(seconds u32) u32 |
| 208 | |
| 209 | // fn C.usleep(usec useconds_t) int |
| 210 | @[trusted] |
| 211 | fn C.usleep(usec u32) i32 |
| 212 | |
| 213 | @[typedef] |
| 214 | pub struct C.DIR { |
| 215 | } |
| 216 | |
| 217 | fn C.opendir(&char) &C.DIR |
| 218 | |
| 219 | fn C.closedir(dirp &C.DIR) i32 |
| 220 | |
| 221 | // fn C.mkdir(path &char, mode mode_t) int |
| 222 | fn C.mkdir(path &char, mode u32) i32 |
| 223 | |
| 224 | // C.rand returns a pseudorandom integer from 0 (inclusive) to C.RAND_MAX (exclusive) |
| 225 | @[trusted] |
| 226 | fn C.rand() i32 |
| 227 | |
| 228 | // C.srand seeds the internal PRNG with the given value. |
| 229 | @[trusted] |
| 230 | fn C.srand(seed u32) |
| 231 | |
| 232 | fn C.atof(str &char) f64 |
| 233 | |
| 234 | @[trusted] |
| 235 | fn C.tolower(c i32) i32 |
| 236 | |
| 237 | @[trusted] |
| 238 | fn C.toupper(c i32) i32 |
| 239 | |
| 240 | @[trusted] |
| 241 | fn C.isspace(c i32) i32 |
| 242 | |
| 243 | fn C.strchr(s &char, c i32) &char |
| 244 | |
| 245 | @[trusted] |
| 246 | fn C.getchar() i32 |
| 247 | |
| 248 | @[trusted] |
| 249 | fn C.putchar(i32) i32 |
| 250 | |
| 251 | fn C.strdup(s &char) &char |
| 252 | |
| 253 | fn C.strncasecmp(s &char, s2 &char, n i32) i32 |
| 254 | |
| 255 | fn C.strcasecmp(s &char, s2 &char) i32 |
| 256 | |
| 257 | fn C.strncmp(s &char, s2 &char, n i32) i32 |
| 258 | |
| 259 | @[trusted] |
| 260 | fn C.strerror(i32) &char |
| 261 | |
| 262 | @[trusted] |
| 263 | fn C.WIFEXITED(status i32) bool |
| 264 | |
| 265 | @[trusted] |
| 266 | fn C.WEXITSTATUS(status i32) i32 |
| 267 | |
| 268 | @[trusted] |
| 269 | fn C.WIFSIGNALED(status i32) bool |
| 270 | |
| 271 | @[trusted] |
| 272 | fn C.WTERMSIG(status i32) i32 |
| 273 | |
| 274 | @[trusted] |
| 275 | fn C.isatty(fd i32) i32 |
| 276 | |
| 277 | fn C.syscall(number i32, va ...voidptr) i32 |
| 278 | |
| 279 | fn C.sysctl(name &int, namelen u32, oldp voidptr, oldlenp voidptr, newp voidptr, newlen usize) i32 |
| 280 | |
| 281 | @[trusted] |
| 282 | fn C._fileno(&C.FILE) i32 |
| 283 | |
| 284 | pub type C.intptr_t = voidptr |
| 285 | |
| 286 | fn C._get_osfhandle(fd i32) C.intptr_t |
| 287 | |
| 288 | fn C.GetModuleFileName(hModule voidptr, lpFilename &u16, nSize u32) u32 |
| 289 | |
| 290 | fn C.GetModuleFileNameW(hModule voidptr, lpFilename &u16, nSize u32) u32 |
| 291 | |
| 292 | fn C.CreateFile(lpFilename &u16, dwDesiredAccess u32, dwShareMode u32, lpSecurityAttributes &u16, dwCreationDisposition u32, |
| 293 | dwFlagsAndAttributes u32, hTemplateFile voidptr) voidptr |
| 294 | |
| 295 | fn C.CreateFileW(lpFilename &u16, dwDesiredAccess u32, dwShareMode u32, lpSecurityAttributes &u16, dwCreationDisposition u32, |
| 296 | dwFlagsAndAttributes u32, hTemplateFile voidptr) voidptr |
| 297 | |
| 298 | fn C.GetFinalPathNameByHandleW(hFile voidptr, lpFilePath &u16, nSize u32, dwFlags u32) u32 |
| 299 | |
| 300 | fn C.CreatePipe(hReadPipe &voidptr, hWritePipe &voidptr, lpPipeAttributes voidptr, nSize u32) bool |
| 301 | |
| 302 | fn C.SetHandleInformation(hObject voidptr, dwMask u32, dw_flags u32) bool |
| 303 | |
| 304 | fn C.ExpandEnvironmentStringsW(lpSrc &u16, lpDst &u16, nSize u32) u32 |
| 305 | |
| 306 | fn C.GetComputerNameW(&u16, &u32) bool |
| 307 | |
| 308 | fn C.GetUserNameW(&u16, &u32) bool |
| 309 | |
| 310 | @[trusted] |
| 311 | fn C.SendMessageTimeout() isize |
| 312 | |
| 313 | fn C.SendMessageTimeoutW(hWnd voidptr, msg u32, wParam &u16, lParam &u32, fuFlags u32, uTimeout u32, lpdwResult &u64) isize |
| 314 | |
| 315 | fn C.CreateProcessW(lpApplicationName &u16, lpCommandLine &u16, lpProcessAttributes voidptr, lpThreadAttributes voidptr, |
| 316 | bInheritHandles bool, dwCreationFlags u32, lpEnvironment voidptr, lpCurrentDirectory &u16, lpStartupInfo voidptr, |
| 317 | lpProcessInformation voidptr) bool |
| 318 | |
| 319 | fn C.ReadFile(hFile voidptr, lpBuffer voidptr, nNumberOfBytesToRead u32, lpNumberOfBytesRead &u32, lpOverlapped voidptr) bool |
| 320 | |
| 321 | fn C.GetFileAttributesW(lpFileName &u8) u32 |
| 322 | |
| 323 | fn C.RegQueryValueEx(hKey voidptr, lpValueName &u16, lp_reserved &u32, lpType &u32, lpData &u8, lpcbData &u32) i32 |
| 324 | |
| 325 | fn C.RegQueryValueExW(hKey voidptr, lpValueName &u16, lp_reserved &u32, lpType &u32, lpData &u8, lpcbData &u32) i32 |
| 326 | |
| 327 | fn C.RegOpenKeyEx(hKey voidptr, lpSubKey &u16, ulOptions u32, samDesired u32, phkResult voidptr) i32 |
| 328 | |
| 329 | fn C.RegOpenKeyExW(hKey voidptr, lpSubKey &u16, ulOptions u32, samDesired u32, phkResult voidptr) i32 |
| 330 | |
| 331 | fn C.RegSetValueEx(hKey voidptr, lpValueName &u16, dwType u32, lpData &u16, cbData u32) i32 |
| 332 | |
| 333 | fn C.RegSetValueExW(hKey voidptr, lpValueName &u16, reserved u32, dwType u32, const_lpData &u8, cbData u32) i32 |
| 334 | |
| 335 | fn C.RegCloseKey(hKey voidptr) i32 |
| 336 | |
| 337 | fn C.RemoveDirectory(lpPathName &u16) bool |
| 338 | |
| 339 | fn C.RemoveDirectoryW(lpPathName &u16) bool |
| 340 | |
| 341 | fn C.GetStdHandle(u32) voidptr |
| 342 | |
| 343 | fn C.SetConsoleMode(voidptr, u32) bool |
| 344 | |
| 345 | fn C.GetConsoleMode(voidptr, &u32) bool |
| 346 | |
| 347 | // fn C.setbuf() |
| 348 | fn C.setbuf(voidptr, &char) |
| 349 | |
| 350 | fn C.SymCleanup(hProcess voidptr) |
| 351 | |
| 352 | fn C.MultiByteToWideChar(codePage u32, dwFlags u32, lpMultiMyteStr &char, cbMultiByte i32, lpWideCharStr &u16, |
| 353 | cchWideChar i32) i32 |
| 354 | |
| 355 | fn C.wcslen(str voidptr) usize |
| 356 | |
| 357 | fn C.WideCharToMultiByte(codePage u32, dwFlags u32, lpWideCharStr &u16, cchWideChar i32, lpMultiByteStr &char, |
| 358 | cbMultiByte i32, lpDefaultChar &char, lpUsedDefaultChar &int) i32 |
| 359 | |
| 360 | fn C._wstat(path &u16, buffer &C._stat) i32 |
| 361 | |
| 362 | fn C._wrename(oldname &u16, newname &u16) i32 |
| 363 | |
| 364 | fn C._wfopen(filename &u16, mode &u16) voidptr |
| 365 | |
| 366 | fn C._wpopen(command &u16, mode &u16) voidptr |
| 367 | |
| 368 | fn C._pclose(stream &C.FILE) i32 |
| 369 | |
| 370 | fn C._wsystem(command &u16) i32 |
| 371 | |
| 372 | fn C._wgetenv(varname &u16) voidptr |
| 373 | |
| 374 | fn C._putenv(envstring &char) i32 |
| 375 | fn C._wputenv(envstring &u16) i32 |
| 376 | |
| 377 | fn C._waccess(path &u16, mode i32) i32 |
| 378 | |
| 379 | fn C._wremove(path &u16) i32 |
| 380 | |
| 381 | fn C.ReadConsole(in_input_handle voidptr, out_buffer voidptr, in_chars_to_read u32, out_read_chars &u32, |
| 382 | in_input_control voidptr) bool |
| 383 | |
| 384 | fn C.WriteConsole() voidptr |
| 385 | |
| 386 | fn C.WriteFile(hFile voidptr, lpBuffer voidptr, nNumberOfBytesToWrite u32, lpNumberOfBytesWritten &u32, lpOverlapped voidptr) bool |
| 387 | |
| 388 | fn C._wchdir(dirname &u16) i32 |
| 389 | |
| 390 | fn C._wgetcwd(buffer &u16, maxlen i32) i32 |
| 391 | |
| 392 | fn C._fullpath() i32 |
| 393 | |
| 394 | fn C.GetFullPathName(voidptr, u32, voidptr, voidptr) u32 |
| 395 | |
| 396 | @[trusted] |
| 397 | fn C.GetCommandLine() voidptr |
| 398 | |
| 399 | fn C.LocalFree(voidptr) |
| 400 | |
| 401 | fn C.FindFirstFileW(lpFileName &u16, lpFindFileData voidptr) voidptr |
| 402 | |
| 403 | fn C.FindFirstFile(lpFileName &u8, lpFindFileData voidptr) voidptr |
| 404 | |
| 405 | fn C.FindNextFile(hFindFile voidptr, lpFindFileData voidptr) i32 |
| 406 | |
| 407 | fn C.FindClose(hFindFile voidptr) |
| 408 | |
| 409 | // macro |
| 410 | fn C.MAKELANGID(lgid voidptr, srtid voidptr) i32 |
| 411 | |
| 412 | fn C.FormatMessageW(dwFlags u32, lpSource voidptr, dwMessageId u32, dwLanguageId u32, lpBuffer voidptr, |
| 413 | nSize u32, arguments ...voidptr) u32 |
| 414 | |
| 415 | fn C.CloseHandle(voidptr) i32 |
| 416 | |
| 417 | fn C.GetExitCodeProcess(hProcess voidptr, lpExitCode &u32) |
| 418 | |
| 419 | @[trusted] |
| 420 | fn C.GetTickCount() i64 |
| 421 | |
| 422 | @[trusted] |
| 423 | fn C.Sleep(dwMilliseconds u32) |
| 424 | |
| 425 | fn C.WSAStartup(u16, &voidptr) i32 |
| 426 | |
| 427 | @[trusted] |
| 428 | fn C.WSAGetLastError() i32 |
| 429 | |
| 430 | fn C.closesocket(i32) i32 |
| 431 | |
| 432 | fn C.vschannel_init(&C.TlsContext, C.BOOL) |
| 433 | |
| 434 | fn C.request(&C.TlsContext, i32, &u16, &u8, u32, &&u8, fn (voidptr, isize) voidptr) i32 |
| 435 | |
| 436 | fn C.vschannel_cleanup(&C.TlsContext) |
| 437 | |
| 438 | fn C.URLDownloadToFile(i32, &u16, &u16, i32, i32) |
| 439 | |
| 440 | @[trusted] |
| 441 | fn C.GetLastError() u32 |
| 442 | |
| 443 | fn C.CreateDirectory(&u8, i32) bool |
| 444 | |
| 445 | // win crypto |
| 446 | fn C.BCryptGenRandom(i32, voidptr, i32, i32) i32 |
| 447 | |
| 448 | // win synchronization |
| 449 | fn C.CreateMutex(i32, bool, &u8) voidptr |
| 450 | |
| 451 | fn C.WaitForSingleObject(voidptr, i32) i32 |
| 452 | |
| 453 | fn C.ReleaseMutex(voidptr) bool |
| 454 | |
| 455 | fn C.CreateEvent(i32, bool, bool, &u8) voidptr |
| 456 | |
| 457 | fn C.SetEvent(voidptr) i32 |
| 458 | |
| 459 | fn C.CreateSemaphore(voidptr, i32, i32, voidptr) voidptr |
| 460 | |
| 461 | fn C.ReleaseSemaphore(voidptr, i32, voidptr) voidptr |
| 462 | |
| 463 | $if windows { |
| 464 | fn C.InitializeSRWLock(voidptr) |
| 465 | fn C.AcquireSRWLockShared(voidptr) |
| 466 | fn C.AcquireSRWLockExclusive(voidptr) |
| 467 | fn C.ReleaseSRWLockShared(voidptr) |
| 468 | fn C.ReleaseSRWLockExclusive(voidptr) |
| 469 | } |
| 470 | |
| 471 | // pthread.h |
| 472 | fn C.pthread_self() usize |
| 473 | fn C.pthread_mutex_init(voidptr, voidptr) i32 |
| 474 | |
| 475 | fn C.pthread_mutex_lock(voidptr) i32 |
| 476 | |
| 477 | fn C.pthread_mutex_unlock(voidptr) i32 |
| 478 | |
| 479 | fn C.pthread_mutex_destroy(voidptr) i32 |
| 480 | |
| 481 | fn C.pthread_rwlockattr_init(voidptr) i32 |
| 482 | |
| 483 | fn C.pthread_rwlockattr_setkind_np(voidptr, i32) i32 |
| 484 | |
| 485 | fn C.pthread_rwlockattr_setpshared(voidptr, i32) i32 |
| 486 | |
| 487 | fn C.pthread_rwlock_init(voidptr, voidptr) i32 |
| 488 | |
| 489 | fn C.pthread_rwlock_rdlock(voidptr) i32 |
| 490 | |
| 491 | fn C.pthread_rwlock_wrlock(voidptr) i32 |
| 492 | |
| 493 | fn C.pthread_rwlock_unlock(voidptr) i32 |
| 494 | |
| 495 | fn C.pthread_condattr_init(voidptr) i32 |
| 496 | |
| 497 | fn C.pthread_condattr_setpshared(voidptr, i32) i32 |
| 498 | |
| 499 | fn C.pthread_condattr_destroy(voidptr) i32 |
| 500 | |
| 501 | fn C.pthread_cond_init(voidptr, voidptr) i32 |
| 502 | |
| 503 | fn C.pthread_cond_signal(voidptr) i32 |
| 504 | |
| 505 | fn C.pthread_cond_wait(voidptr, voidptr) i32 |
| 506 | |
| 507 | fn C.pthread_cond_timedwait(voidptr, voidptr, voidptr) i32 |
| 508 | |
| 509 | fn C.pthread_cond_destroy(voidptr) i32 |
| 510 | |
| 511 | fn C.sem_init(voidptr, i32, u32) i32 |
| 512 | |
| 513 | fn C.sem_post(voidptr) i32 |
| 514 | |
| 515 | fn C.sem_wait(voidptr) i32 |
| 516 | |
| 517 | fn C.sem_trywait(voidptr) i32 |
| 518 | |
| 519 | fn C.sem_timedwait(voidptr, voidptr) i32 |
| 520 | |
| 521 | fn C.sem_destroy(voidptr) i32 |
| 522 | |
| 523 | // MacOS semaphore functions |
| 524 | @[trusted] |
| 525 | fn C.dispatch_semaphore_create(i64) voidptr |
| 526 | |
| 527 | fn C.dispatch_semaphore_signal(voidptr) i64 |
| 528 | |
| 529 | fn C.dispatch_semaphore_wait(voidptr, u64) i64 |
| 530 | |
| 531 | @[trusted] |
| 532 | fn C.dispatch_time(u64, i64) u64 |
| 533 | |
| 534 | fn C.dispatch_release(voidptr) |
| 535 | |
| 536 | // file descriptor based reading/writing |
| 537 | fn C.read(fd i32, buf voidptr, count usize) i32 |
| 538 | |
| 539 | fn C.write(fd i32, buf voidptr, count usize) i32 |
| 540 | |
| 541 | fn C.close(fd i32) i32 |
| 542 | |
| 543 | // pipes |
| 544 | fn C.pipe(pipefds &int) i32 |
| 545 | |
| 546 | fn C.dup2(oldfd i32, newfd i32) i32 |
| 547 | |
| 548 | // used by gl, stbi, freetype |
| 549 | fn C.glTexImage2D() |
| 550 | |
| 551 | // used by ios for println |
| 552 | fn C.WrappedNSLog(str &u8) |
| 553 | |
| 554 | // absolute value |
| 555 | @[trusted] |
| 556 | fn C.abs(number i32) i32 |
| 557 | |
| 558 | $if windows { |
| 559 | fn C.GetDiskFreeSpaceExA(const_path &char, free_bytes_available_to_caller &u64, total_number_of_bytes &u64, total_number_of_free_bytes &u64) bool |
| 560 | |
| 561 | fn C.GetNativeSystemInfo(voidptr) |
| 562 | |
| 563 | // C.SYSTEM_INFO contains information about the current computer system. This includes the architecture and type of the processor, the number of processors in the system, the page size, and other such information. |
| 564 | @[typedef] |
| 565 | pub struct C.SYSTEM_INFO { |
| 566 | // workaround: v doesn't support a truely C anon union/struct here |
| 567 | // union { |
| 568 | dwOemId u32 |
| 569 | // struct { |
| 570 | wProcessorArchitecture u16 |
| 571 | wReserved u16 |
| 572 | // } |
| 573 | //} |
| 574 | dwPageSize u32 |
| 575 | lpMinimumApplicationAddress voidptr |
| 576 | lpMaximumApplicationAddress voidptr |
| 577 | dwActiveProcessorMask u32 |
| 578 | dwNumberOfProcessors u32 |
| 579 | dwProcessorType u32 |
| 580 | dwAllocationGranularity u32 |
| 581 | wProcessorLevel u16 |
| 582 | wProcessorRevision u16 |
| 583 | } |
| 584 | |
| 585 | fn C.GetSystemInfo(&C.SYSTEM_INFO) |
| 586 | |
| 587 | @[typedef] |
| 588 | pub struct C.SRWLOCK {} |
| 589 | } |
| 590 | |
| 591 | fn C.sysconf(name i32) i32 |
| 592 | |