types.ha (11814B)
1 // SPDX-License-Identifier: MPL-2.0 2 // (c) Hare authors <https://harelang.org> 3 4 export type time_t = i64; 5 export type suseconds_t = i64; 6 export type dev_t = u64; 7 export type ino_t = u64; 8 export type nlink_t = u64; 9 export type id_t = uint; 10 export type pid_t = uint; 11 export type uid_t = uint; 12 export type gid_t = uint; 13 export type off_t = i64; 14 export type blkcnt_t = i64; 15 export type blksize_t = i32; 16 export type fflags_t = u32; 17 export type mode_t = u16; 18 export type nfds_t = uint; 19 export type rlim_t = u64; 20 21 export def NGROUPS_MAX: size = 1023; 22 export def NSIG: int = 32; 23 24 export type sigset = struct { 25 __bits: [4]u32, 26 }; 27 28 export def SA_ONSTACK: u64 = 0x0001; 29 export def SA_RESTART: u64 = 0x0002; 30 export def SA_RESETHAND: u64 = 0x0004; 31 export def SA_NOCLDSTOP: u64 = 0x0008; 32 export def SA_NODEFER: u64 = 0x0010; 33 export def SA_NOCLDWAIT: u64 = 0x0020; 34 export def SA_SIGINFO: u64 = 0x0040; 35 36 export def SIG_ERR: uintptr = -1; 37 export def SIG_DFL: uintptr = 0; 38 export def SIG_IGN: uintptr = 1; 39 export def SIG_CATCH: uintptr = 2; 40 export def SIG_HOLD: uintptr = 3; 41 42 export type sigact = struct { 43 union { 44 sa_handler: *fn (int) void, 45 sa_sigaction: *fn (int, *siginfo, *opaque) void, 46 }, 47 sa_flags: int, 48 sa_mask: sigset, 49 }; 50 51 export def SIG_BLOCK: int = 1; 52 export def SIG_UNBLOCK: int = 2; 53 export def SIG_SETMASK: int = 3; 54 55 export type sigval = union { 56 sival_t: int, 57 sival_ptr: *opaque, 58 }; 59 60 export type stack_t = struct { 61 ss_sp: *opaque, 62 ss_size: size, 63 ss_flags: int, 64 }; 65 66 export type pollfd = struct { 67 fd: int, 68 events: i16, 69 revents: i16, 70 }; 71 72 export type timespec = struct { 73 tv_sec: time_t, 74 tv_nsec: i64, 75 }; 76 77 export type timeval = struct { 78 tv_sec: time_t, 79 tv_usec: suseconds_t, 80 }; 81 82 export type st_flock = struct { 83 l_start: off_t, 84 l_len: off_t, 85 l_pid: pid_t, 86 l_type: i16, 87 l_whence: i16, 88 l_sysid: int, 89 }; 90 91 export type st = struct { 92 dev: dev_t, 93 ino: ino_t, 94 nlink: nlink_t, 95 mode: mode_t, 96 uid: uid_t, 97 gid: gid_t, 98 rdev: dev_t, 99 atime: timespec, 100 mtime: timespec, 101 ctime: timespec, 102 btime: timespec, 103 sz: off_t, 104 blocks: blkcnt_t, 105 blksz: blksize_t, 106 flags: fflags_t, 107 }; 108 109 export type freebsd11_stat = struct { 110 st_dev: u32, 111 st_ino: u32, 112 st_mode: mode_t, 113 st_nlink: u16, 114 st_uid: uid_t, 115 st_gid: gid_t, 116 st_rdev: u32, 117 st_atim: timespec, 118 st_mtim: timespec, 119 st_ctim: timespec, 120 st_size: off_t, 121 st_blocks: blkcnt_t, 122 st_blksize: blksize_t, 123 st_flags: fflags_t, 124 st_gen: u32, 125 st_lspare: u32, 126 st_birthtim: timespec, 127 }; 128 129 export type freebsd11_dirent = struct { 130 d_fileno: u32, 131 d_reclen: u16, 132 d_type: u8, 133 d_namlen: u8, 134 d_name: [*]u8, 135 }; 136 137 export type iovec = struct { 138 iov_base: *opaque, 139 iov_len: size 140 }; 141 142 export type winsize = struct { 143 ws_row: u16, 144 ws_col: u16, 145 ws_xpixel: u16, 146 ws_ypixel: u16, 147 }; 148 149 export type termios = struct { 150 c_iflag: tcflag, 151 c_oflag: tcflag, 152 c_cflag: tcflag, 153 c_lflag: tcflag, 154 c_cc: [NCCS]cc, 155 }; 156 157 export def NCCS: size = 20; 158 159 export type tcflag = enum uint { 160 // c_iflag bits 161 IGNBRK = 0x00000001, 162 BRKINT = 0x00000002, 163 IGNPAR = 0x00000004, 164 PARMRK = 0x00000008, 165 INPCK = 0x00000010, 166 ISTRIP = 0x00000020, 167 INLCR = 0x00000040, 168 IGNCR = 0x00000080, 169 ICRNL = 0x00000100, 170 IXON = 0x00000200, 171 IXOFF = 0x00000400, 172 IXANY = 0x00000800, 173 IMAXBEL = 0x00002000, 174 175 // c_oflag bits 176 OPOST = 0x00000001, 177 ONLCR = 0x00000002, 178 TABDLY = 0x00000004, 179 TAB0 = 0x00000000, 180 TAB3 = 0x00000004, 181 ONOEOT = 0x00000008, 182 OCRNL = 0x00000010, 183 ONOCR = 0x00000020, 184 ONLRET = 0x00000040, 185 186 // c_cflag bits 187 CIGNORE = 0x00000001, 188 CSIZE = 0x00000300, 189 CS5 = 0x00000000, 190 CS6 = 0x00000100, 191 CS7 = 0x00000200, 192 CS8 = 0x00000300, 193 CSTOPB = 0x00000400, 194 CREAD = 0x00000800, 195 PARENB = 0x00001000, 196 PARODD = 0x00002000, 197 HUPCL = 0x00004000, 198 CLOCAL = 0x00008000, 199 CCTS_OFLOW = 0x00010000, 200 CRTS_IFLOW = 0x00020000, 201 CRTSCTS = (CCTS_OFLOW | CRTS_IFLOW), 202 CDTR_IFLOW = 0x00040000, 203 CDSR_OFLOW = 0x00080000, 204 CCAR_OFLOW = 0x00100000, 205 CNO_RTSDTR = 0x00200000, 206 207 // c_lflag bits 208 ECHOKE = 0x00000001, 209 ECHOE = 0x00000002, 210 ECHOK = 0x00000004, 211 ECHO = 0x00000008, 212 ECHONL = 0x00000010, 213 ECHOPRT = 0x00000020, 214 ECHOCTL = 0x00000040, 215 ISIG = 0x00000080, 216 ICANON = 0x00000100, 217 ALTWERASE = 0x00000200, 218 IEXTEN = 0x00000400, 219 EXTPROC = 0x00000800, 220 TOSTOP = 0x00400000, 221 FLUSHO = 0x00800000, 222 NOKERNINFO = 0x02000000, 223 PENDIN = 0x20000000, 224 NOFLSH = 0x80000000, 225 }; 226 227 export type cc = enum u8 { 228 VEOF = 0, 229 VEOL = 1, 230 VEOL2 = 2, 231 VERASE = 3, 232 VWERASE = 4, 233 VKILL = 5, 234 VREPRINT = 6, 235 VERASE2 = 7, 236 VINTR = 8, 237 VQUIT = 9, 238 VSUSP = 10, 239 VDSUSP = 11, 240 VSTART = 12, 241 VSTOP = 13, 242 VLNEXT = 14, 243 VDISCARD = 15, 244 VMIN = 16, 245 VTIME = 17, 246 VSTATUS = 18, 247 }; 248 249 export def TIOCGWINSZ: u64 = 0x40087468; 250 export def TIOCSWINSZ: u64 = 0x80087467; 251 export def TIOCGETA: u64 = 0x402c7413; 252 export def TIOCSETA: u64 = 0x802c7414; 253 export def TIOCPTMASTER: u64 = 0x2000741c; 254 export def TIOCSPGRP: u64 = 0x80047476; 255 export def FIODGNAME: u64 = 0x80106678; 256 257 export type rusage = struct { 258 ru_utime: timeval, 259 ru_stime: timeval, 260 ru_maxrss: i64, 261 ru_ixrss: i64, 262 ru_idrss: i64, 263 ru_isrss: i64, 264 ru_minflt: i64, 265 ru_majflt: i64, 266 ru_nswap: i64, 267 ru_inblock: i64, 268 ru_oublock: i64, 269 ru_msgsnd: i64, 270 ru_msgrcv: i64, 271 ru_nsignals: i64, 272 ru_nvcsw: i64, 273 ru_nivcsw: i64, 274 }; 275 276 export def DT_UNKNOWN: u8 = 0; 277 export def DT_FIFO: u8 = 1; 278 export def DT_CHR: u8 = 2; 279 export def DT_DIR: u8 = 4; 280 export def DT_BLK: u8 = 6; 281 export def DT_REG: u8 = 8; 282 export def DT_LNK: u8 = 10; 283 export def DT_SOCK: u8 = 12; 284 export def DT_WHT: u8 = 14; 285 286 export def O_RDONLY: int = 0x0000; 287 export def O_WRONLY: int = 0x0001; 288 export def O_RDWR: int = 0x0002; 289 export def O_ACCMODE: int = 0x0003; 290 export def O_NONBLOCK: int = 0x0004; 291 export def O_APPEND: int = 0x0008; 292 export def O_SHLOCK: int = 0x0010; 293 export def O_EXLOCK: int = 0x0020; 294 export def O_ASYNC: int = 0x0040; 295 export def O_FSYNC: int = 0x0080; 296 export def O_SYNC: int = 0x0080; 297 export def O_NOFOLLOW: int = 0x0100; 298 export def O_CREAT: int = 0x0200; 299 export def O_TRUNC: int = 0x0400; 300 export def O_EXCL: int = 0x0800; 301 export def O_NOCTTY: int = 0x8000; 302 export def O_DIRECT: int = 0x00010000; 303 export def O_DIRECTORY: int = 0x00020000; 304 export def O_EXEC: int = 0x00040000; 305 export def O_TTY_INIT: int = 0x00080000; 306 export def O_CLOEXEC: int = 0x00100000; 307 export def O_DSYNC: int = 0x01000000; 308 309 export def AT_FDCWD: int = -100; 310 export def AT_EACCESS: int = 0x0100; 311 export def AT_SYMLINK_NOFOLLOW: int = 0x0200; 312 export def AT_SYMLINK_FOLLOW: int = 0x0400; 313 export def AT_REMOVEDIR: int = 0x0800; 314 export def AT_RESOLVE_BENEATH: int = 0x2000; 315 export def AT_EMPTY_PATH: int = 0x4000; 316 317 export def S_IFIFO: mode_t = 0o010000; 318 export def S_IFCHR: mode_t = 0o020000; 319 export def S_IFDIR: mode_t = 0o040000; 320 export def S_IFBLK: mode_t = 0o060000; 321 export def S_IFREG: mode_t = 0o100000; 322 export def S_IFLNK: mode_t = 0o120000; 323 export def S_IFSOCK: mode_t = 0o140000; 324 325 export def MAP_SHARED: uint = 0x0001; 326 export def MAP_PRIVATE: uint = 0x0002; 327 export def MAP_FIXED: uint = 0x0010; 328 export def MAP_HASSEMAPHORE: uint = 0x0200; 329 export def MAP_STACK: uint = 0x0400; 330 export def MAP_NOSYNC: uint = 0x0800; 331 export def MAP_FILE: uint = 0x0000; 332 export def MAP_ANON: uint = 0x1000; 333 export def MAP_GUARD: uint = 0x00002000; 334 export def MAP_EXCL: uint = 0x00004000; 335 export def MAP_NOCORE: uint = 0x00020000; 336 export def MAP_PREFAULT_READ: uint = 0x00040000; 337 export def MAP_32BIT: uint = 0x00080000; 338 339 export def PROT_NONE: uint = 0x00; 340 export def PROT_READ: uint = 0x01; 341 export def PROT_WRITE: uint = 0x02; 342 export def PROT_EXEC: uint = 0x04; 343 344 export def SIGHUP: int = 1; 345 export def SIGINT: int = 2; 346 export def SIGQUIT: int = 3; 347 export def SIGILL: int = 4; 348 export def SIGTRAP: int = 5; 349 export def SIGABRT: int = 6; 350 export def SIGIOT: int = SIGABRT; 351 export def SIGEMT: int = 7; 352 export def SIGFPE: int = 8; 353 export def SIGKILL: int = 9; 354 export def SIGBUS: int = 10; 355 export def SIGSEGV: int = 11; 356 export def SIGSYS: int = 12; 357 export def SIGPIPE: int = 13; 358 export def SIGALRM: int = 14; 359 export def SIGTERM: int = 15; 360 export def SIGURG: int = 16; 361 export def SIGSTOP: int = 17; 362 export def SIGTSTP: int = 18; 363 export def SIGCONT: int = 19; 364 export def SIGCHLD: int = 20; 365 export def SIGTTIN: int = 21; 366 export def SIGTTOU: int = 22; 367 export def SIGIO: int = 23; 368 export def SIGXCPU: int = 24; 369 export def SIGXFSZ: int = 25; 370 export def SIGVTALRM: int = 26; 371 export def SIGPROF: int = 27; 372 export def SIGWINCH: int = 28; 373 export def SIGINFO: int = 29; 374 export def SIGUSR1: int = 30; 375 export def SIGUSR2: int = 31; 376 export def SIGTHR: int = 32; 377 export def SIGLWP: int = SIGTHR; 378 export def SIGLIBRT: int = 33; 379 380 export def F_DUPFD: int = 0; 381 export def F_GETFD: int = 1; 382 export def F_SETFD: int = 2; 383 export def F_GETFL: int = 3; 384 export def F_SETFL: int = 4; 385 export def F_GETOWN: int = 5; 386 export def F_SETOWN: int = 6; 387 export def F_OGETLK: int = 7; 388 export def F_OSETLK: int = 8; 389 export def F_OSETLKW: int = 9; 390 export def F_DUP2FD: int = 10; 391 export def F_GETLK: int = 11; 392 export def F_SETLK: int = 12; 393 export def F_SETLKW: int = 13; 394 export def F_SETLK_REMOTE: int = 14; 395 export def F_READAHEAD: int = 15; 396 export def F_RDAHEAD: int = 16; 397 export def F_DUPFD_CLOEXEC: int = 17; 398 export def F_DUP2FD_CLOEXEC: int = 18; 399 export def F_ADD_SEALS: int = 19; 400 export def F_GET_SEALS: int = 20; 401 export def F_ISUNIONSTACK: int = 21; 402 403 export def F_SEAL_SEAL: int = 0x0001; 404 export def F_SEAL_SHRINK: int = 0x0002; 405 export def F_SEAL_GROW: int = 0x0004; 406 export def F_SEAL_WRITE: int = 0x0008; 407 408 export def FD_CLOEXEC: int = 1; 409 export def F_UNLCKSYS: int = 4; 410 export def F_CANCEL: int = 5; 411 412 export def F_RDLCK: i16 = 1; 413 export def F_UNLCK: i16 = 2; 414 export def F_WRLCK: i16 = 3; 415 416 export def PRIO_PROCESS: int = 0; 417 export def PRIO_PGRP: int = 1; 418 export def PRIO_USER: int = 2; 419 420 export def F_OK: int = 0; 421 export def X_OK: int = 0x01; 422 export def W_OK: int = 0x02; 423 export def R_OK: int = 0x04; 424 425 export def CLOCK_REALTIME: int = 0; 426 export def CLOCK_MONOTONIC: int = 4; 427 export def CLOCK_VIRTUAL: int = 1; 428 export def CLOCK_PROF: int = 2; 429 export def CLOCK_UPTIME: int = 5; 430 export def CLOCK_UPTIME_PRECISE: int = 7; 431 export def CLOCK_UPTIME_FAST: int = 8; 432 export def CLOCK_REALTIME_PRECISE: int = 9; 433 export def CLOCK_REALTIME_FAST: int = 10; 434 export def CLOCK_MONOTONIC_PRECISE: int = 11; 435 export def CLOCK_MONOTONIC_FAST: int = 12; 436 export def CLOCK_SECOND: int = 13; 437 export def CLOCK_THREAD_CPUTIME_ID: int = 14; 438 export def CLOCK_PROCESS_CPUTIME_ID: int = 15; 439 440 export def WNOHANG: int = 1; 441 export def WUNTRACED: int = 2; 442 export def WSTOPPED: int = WUNTRACED; 443 export def WCONTINUED: int = 4; 444 export def WNOWAIT: int = 8; 445 export def WEXITED: int = 16; 446 export def WTRAPPED: int = 32; 447 448 export def STDIN_FILENO: int = 0; 449 export def STDOUT_FILENO: int = 1; 450 export def STDERR_FILENO: int = 2; 451 452 export def SEEK_SET: int = 0; 453 export def SEEK_CUR: int = 1; 454 export def SEEK_END: int = 2; 455 456 // Flock operations 457 export def LOCK_SH: int = 1; 458 export def LOCK_EX: int = 2; 459 export def LOCK_NB: int = 4; 460 export def LOCK_UN: int = 8; 461 462 export type rlimit = struct { 463 rlim_cur: rlim_t, 464 rlim_max: rlim_t, 465 }; 466 467 export def RLIM_INFINITY: rlim_t = -1; 468 469 export def RLIMIT_CPU: int = 0; 470 export def RLIMIT_FSIZE: int = 1; 471 export def RLIMIT_DATA: int = 2; 472 export def RLIMIT_STACK: int = 3; 473 export def RLIMIT_CORE: int = 4; 474 export def RLIMIT_RSS: int = 5; 475 export def RLIMIT_MEMLOCK: int = 6; 476 export def RLIMIT_NPROC: int = 7; 477 export def RLIMIT_NOFILE: int = 8; 478 export def RLIMIT_SBSIZE: int = 9; 479 export def RLIMIT_VMEM: int = 10; 480 export def RLIMIT_AS: int = RLIMIT_VMEM; 481 export def RLIMIT_NPTS: int = 11; 482 export def RLIMIT_SWAP: int = 12; 483 export def RLIMIT_KQUEUES: int = 13; 484 export def RLIMIT_UMTXP: int = 14; 485 486 export def SHUT_RD: int = 0; 487 export def SHUT_WR: int = 1; 488 export def SHUT_RDWR: int = 2;