mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-30 01:44:36 +00:00
[sys/linux]: Documentation improvements
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
package linux
|
||||
|
||||
|
||||
/// Represents an error returned by most of syscalls
|
||||
/*
|
||||
Represents an error returned by most of syscalls
|
||||
*/
|
||||
Errno :: enum i32 {
|
||||
NONE = 0,
|
||||
// Errno-base
|
||||
@@ -142,8 +144,9 @@ Errno :: enum i32 {
|
||||
EDEADLOCK = EDEADLK,
|
||||
}
|
||||
|
||||
|
||||
/// Bits for Open_Flags
|
||||
/*
|
||||
Bits for Open_Flags
|
||||
*/
|
||||
Open_Flags_Bits :: enum {
|
||||
RDONLY = 0,
|
||||
WRONLY = 1,
|
||||
@@ -164,7 +167,9 @@ Open_Flags_Bits :: enum {
|
||||
PATH = 21,
|
||||
}
|
||||
|
||||
/// Bits for FD_Flags bitset
|
||||
/*
|
||||
Bits for FD_Flags bitset
|
||||
*/
|
||||
FD_Flags_Bits :: enum {
|
||||
SYMLINK_NOFOLLOW = 8,
|
||||
REMOVEDIR = 9,
|
||||
@@ -177,7 +182,9 @@ FD_Flags_Bits :: enum {
|
||||
RECURSIVE = 15,
|
||||
}
|
||||
|
||||
/// The bits for the Mode bitset.
|
||||
/*
|
||||
The bits for the Mode bitset.
|
||||
*/
|
||||
Mode_Bits :: enum {
|
||||
IXOTH = 0, // 0o0000001
|
||||
IWOTH = 1, // 0o0000002
|
||||
@@ -197,7 +204,9 @@ Mode_Bits :: enum {
|
||||
IFREG = 15, // 0o0100000
|
||||
}
|
||||
|
||||
/// The bits used by the Statx_Mask bitset
|
||||
/*
|
||||
The bits used by the Statx_Mask bitset
|
||||
*/
|
||||
Statx_Mask_Bits :: enum {
|
||||
TYPE = 0,
|
||||
MODE = 1,
|
||||
@@ -215,8 +224,10 @@ Statx_Mask_Bits :: enum {
|
||||
DIOALIGN = 13,
|
||||
}
|
||||
|
||||
/// Bits found in Statx_Attr bitset
|
||||
/// You should not use these directly
|
||||
/*
|
||||
Bits found in Statx_Attr bitset
|
||||
You should not use these directly
|
||||
*/
|
||||
Statx_Attr_Bits :: enum {
|
||||
COMPRESSED = 2, // 0x00000004
|
||||
IMMUTABLE = 4, // 0x00000010
|
||||
@@ -229,7 +240,9 @@ Statx_Attr_Bits :: enum {
|
||||
DAX = 21, // 0x00200000
|
||||
}
|
||||
|
||||
/// Magic bits for filesystems returned by Stat_FS
|
||||
/*
|
||||
Magic bits for filesystems returned by Stat_FS
|
||||
*/
|
||||
FS_Magic :: enum u32 {
|
||||
ADFS_SUPER_MAGIC = 0xadf5,
|
||||
AFFS_SUPER_MAGIC = 0xadff,
|
||||
@@ -317,7 +330,9 @@ FS_Magic :: enum u32 {
|
||||
_XIAFS_SUPER_MAGIC = 0x012fd16d,
|
||||
}
|
||||
|
||||
/// Bits for FS_Flags bitset
|
||||
/*
|
||||
Bits for FS_Flags bitset
|
||||
*/
|
||||
FS_Flags_Bits :: enum {
|
||||
RDONLY = 0,
|
||||
NOSUID = 1,
|
||||
@@ -340,20 +355,26 @@ Seek_Whence :: enum i16 {
|
||||
HOLE = 4,
|
||||
}
|
||||
|
||||
/// Bits for Close_Range_Flags
|
||||
/*
|
||||
Bits for Close_Range_Flags
|
||||
*/
|
||||
Close_Range_Flags_Bits :: enum {
|
||||
CLOEXEC = 2,
|
||||
UNSHARE = 1,
|
||||
}
|
||||
|
||||
/// Bits for Rename_Flags
|
||||
/*
|
||||
Bits for Rename_Flags
|
||||
*/
|
||||
Rename_Flags_Bits :: enum {
|
||||
EXCHANGE = 1,
|
||||
NOREPLACE = 0,
|
||||
WHITEOUT = 2,
|
||||
}
|
||||
|
||||
/// Type of the file in a directory entry
|
||||
/*
|
||||
Type of the file in a directory entry
|
||||
*/
|
||||
Dirent_Type :: enum u8 {
|
||||
UNKNOWN = 0,
|
||||
FIFO = 1,
|
||||
@@ -366,14 +387,18 @@ Dirent_Type :: enum u8 {
|
||||
WHT = 14,
|
||||
}
|
||||
|
||||
/// Type of a lock for fcntl.2
|
||||
/*
|
||||
Type of a lock for fcntl(2)
|
||||
*/
|
||||
FLock_Type :: enum i16 {
|
||||
RDLCK = 0,
|
||||
WRLCK = 1,
|
||||
UNLCK = 2,
|
||||
}
|
||||
|
||||
/// Bits for FD_Notifications
|
||||
/*
|
||||
Bits for FD_Notifications
|
||||
*/
|
||||
FD_Notifications_Bits :: enum {
|
||||
ACCESS = 0,
|
||||
MODIFY = 1,
|
||||
@@ -384,7 +409,9 @@ FD_Notifications_Bits :: enum {
|
||||
MULTISHOT = 31,
|
||||
}
|
||||
|
||||
/// Bits for seal
|
||||
/*
|
||||
Bits for seal
|
||||
*/
|
||||
Seal_Bits :: enum {
|
||||
SEAL = 0,
|
||||
SHRINK = 1,
|
||||
@@ -408,14 +435,18 @@ FD_Lease :: enum {
|
||||
UNLCK = 2,
|
||||
}
|
||||
|
||||
/// Kind of owner for FD_Owner
|
||||
/*
|
||||
Kind of owner for FD_Owner
|
||||
*/
|
||||
F_Owner_Type :: enum i32 {
|
||||
OWNER_TID = 0,
|
||||
OWNER_PID = 1,
|
||||
OWNER_PGRP = 2,
|
||||
}
|
||||
|
||||
/// Command for fcntl.2
|
||||
/*
|
||||
Command for fcntl(2)
|
||||
*/
|
||||
FCntl_Command :: enum {
|
||||
DUPFD = 0,
|
||||
GETFD = 1,
|
||||
@@ -465,7 +496,9 @@ Fd_Poll_Events_Bits :: enum {
|
||||
RDHUP = 13,
|
||||
}
|
||||
|
||||
/// Bits for Mem_Protection bitfield
|
||||
/*
|
||||
Bits for Mem_Protection bitfield
|
||||
*/
|
||||
Mem_Protection_Bits :: enum{
|
||||
READ = 0,
|
||||
WRITE = 1,
|
||||
@@ -479,7 +512,9 @@ Mem_Protection_Bits :: enum{
|
||||
GROWSUP = 25,
|
||||
}
|
||||
|
||||
/// Bits for Map_Flags
|
||||
/*
|
||||
Bits for Map_Flags
|
||||
*/
|
||||
Map_Flags_Bits :: enum {
|
||||
SHARED = 0,
|
||||
PRIVATE = 1,
|
||||
@@ -504,19 +539,25 @@ Map_Flags_Bits :: enum {
|
||||
UNINITIALIZED = 26,
|
||||
}
|
||||
|
||||
/// Bits for MLock_Flags
|
||||
/*
|
||||
Bits for MLock_Flags
|
||||
*/
|
||||
MLock_Flags_Bits :: enum {
|
||||
ONFAULT = 0,
|
||||
}
|
||||
|
||||
/// Bits for MSync_Flags
|
||||
/*
|
||||
Bits for MSync_Flags
|
||||
*/
|
||||
MSync_Flags_Bits :: enum {
|
||||
ASYNC = 0,
|
||||
INVALIDATE = 1,
|
||||
SYNC = 2,
|
||||
}
|
||||
|
||||
/// Argument for madvice.2
|
||||
/*
|
||||
Argument for madvice(2)
|
||||
*/
|
||||
MAdvice :: enum {
|
||||
NORMAL = 0,
|
||||
RANDOM = 1,
|
||||
@@ -545,27 +586,35 @@ MAdvice :: enum {
|
||||
SOFT_OFFLINE = 101,
|
||||
}
|
||||
|
||||
/// Bits for PKey_Access_Rights
|
||||
/*
|
||||
Bits for PKey_Access_Rights
|
||||
*/
|
||||
PKey_Access_Bits :: enum {
|
||||
DISABLE_ACCESS = 0,
|
||||
DISABLE_WRITE = 2,
|
||||
}
|
||||
|
||||
/// Bits for MRemap_Flags
|
||||
/*
|
||||
Bits for MRemap_Flags
|
||||
*/
|
||||
MRemap_Flags_Bits :: enum {
|
||||
MAYMOVE = 0,
|
||||
FIXED = 1,
|
||||
DONTUNMAP = 2,
|
||||
}
|
||||
|
||||
/// Bits for Get_Random_Flags
|
||||
/*
|
||||
Bits for Get_Random_Flags
|
||||
*/
|
||||
Get_Random_Flags_Bits :: enum {
|
||||
RANDOM = 0,
|
||||
NONBLOCK = 1,
|
||||
INSECURE = 2,
|
||||
}
|
||||
|
||||
/// Bits for Perf_Flags
|
||||
/*
|
||||
Bits for Perf_Flags
|
||||
*/
|
||||
Perf_Flags_Bits :: enum {
|
||||
FD_NO_GROUP = 0,
|
||||
FD_OUTPUT = 1,
|
||||
@@ -573,7 +622,9 @@ Perf_Flags_Bits :: enum {
|
||||
FD_CLOEXEC = 3,
|
||||
}
|
||||
|
||||
/// Union tag for Perf_Event_Attr struct
|
||||
/*
|
||||
Union tag for Perf_Event_Attr struct
|
||||
*/
|
||||
Perf_Event_Type :: enum u32 {
|
||||
HARDWARE = 0,
|
||||
SOFTWARE = 1,
|
||||
@@ -633,7 +684,9 @@ Perf_Cap_Flags_Bits :: enum u64 {
|
||||
User_Time_Short = 5,
|
||||
}
|
||||
|
||||
/// Specifies the type of the hardware event that you want to get info about
|
||||
/*
|
||||
Specifies the type of the hardware event that you want to get info about
|
||||
*/
|
||||
Perf_Hardware_Id :: enum u64 {
|
||||
CPU_CYCLES = 0,
|
||||
INSTRUCTIONS = 1,
|
||||
@@ -647,7 +700,9 @@ Perf_Hardware_Id :: enum u64 {
|
||||
REF_CPU_CYCLES = 9,
|
||||
}
|
||||
|
||||
/// Specifies the cache for the particular cache event that you want to get info about
|
||||
/*
|
||||
Specifies the cache for the particular cache event that you want to get info about
|
||||
*/
|
||||
Perf_Hardware_Cache_Id :: enum u64 {
|
||||
L1D = 0,
|
||||
L1I = 1,
|
||||
@@ -658,20 +713,26 @@ Perf_Hardware_Cache_Id :: enum u64 {
|
||||
NODE = 6,
|
||||
}
|
||||
|
||||
/// Specifies the cache op that you want to get info about
|
||||
/*
|
||||
Specifies the cache op that you want to get info about
|
||||
*/
|
||||
Perf_Hardware_Cache_Op_Id :: enum u64 {
|
||||
READ = 0,
|
||||
WRITE = 1,
|
||||
PREFETCH = 2,
|
||||
}
|
||||
|
||||
/// Specifies the cache operation result that you want to get info about
|
||||
/*
|
||||
Specifies the cache operation result that you want to get info about
|
||||
*/
|
||||
Perf_Hardware_Cache_Result_Id :: enum u64 {
|
||||
ACCESS = 0,
|
||||
MISS = 1,
|
||||
}
|
||||
|
||||
/// Specifies the particular software event that you want to get info about
|
||||
/*
|
||||
Specifies the particular software event that you want to get info about
|
||||
*/
|
||||
Perf_Software_Id :: enum u64 {
|
||||
CPU_CLOCK = 0,
|
||||
TASK_CLOCK = 1,
|
||||
@@ -688,7 +749,9 @@ Perf_Software_Id :: enum u64 {
|
||||
|
||||
}
|
||||
|
||||
/// Specifies which values to include in the sample
|
||||
/*
|
||||
Specifies which values to include in the sample
|
||||
*/
|
||||
Perf_Event_Sample_Type_Bits :: enum {
|
||||
IP = 0,
|
||||
TID = 1,
|
||||
@@ -717,7 +780,9 @@ Perf_Event_Sample_Type_Bits :: enum {
|
||||
WEIGHT_STRUCT = 24,
|
||||
}
|
||||
|
||||
/// Describes field sets to include in mmaped page
|
||||
/*
|
||||
Describes field sets to include in mmaped page
|
||||
*/
|
||||
Perf_Read_Format :: enum {
|
||||
TOTAL_TIME_ENABLED = 0,
|
||||
TOTAL_TIME_RUNNING = 1,
|
||||
@@ -726,7 +791,9 @@ Perf_Read_Format :: enum {
|
||||
LOST = 4,
|
||||
}
|
||||
|
||||
/// Chooses the breakpoint type
|
||||
/*
|
||||
Chooses the breakpoint type
|
||||
*/
|
||||
Hardware_Breakpoint_Type :: enum u32 {
|
||||
EMPTY = 0,
|
||||
R = 1,
|
||||
@@ -736,7 +803,9 @@ Hardware_Breakpoint_Type :: enum u32 {
|
||||
INVALID = RW | X,
|
||||
}
|
||||
|
||||
/// Bits for Branch_Sample_Type
|
||||
/*
|
||||
Bits for Branch_Sample_Type
|
||||
*/
|
||||
Branch_Sample_Type_Bits :: enum {
|
||||
USER = 0,
|
||||
KERNEL = 1,
|
||||
@@ -759,7 +828,9 @@ Branch_Sample_Type_Bits :: enum {
|
||||
PRIV_SAVE = 18,
|
||||
}
|
||||
|
||||
/// Represent the type of Id
|
||||
/*
|
||||
Represent the type of Id
|
||||
*/
|
||||
Id_Type :: enum uint {
|
||||
ALL = 0,
|
||||
PID = 1,
|
||||
@@ -767,7 +838,9 @@ Id_Type :: enum uint {
|
||||
PIDFD = 3,
|
||||
}
|
||||
|
||||
/// Options for wait syscalls
|
||||
/*
|
||||
Options for wait syscalls
|
||||
*/
|
||||
Wait_Option :: enum {
|
||||
WNOHANG = 0,
|
||||
WUNTRACED = 1,
|
||||
@@ -781,12 +854,16 @@ Wait_Option :: enum {
|
||||
__WCLONE = 31,
|
||||
}
|
||||
|
||||
/// Bits for flags for pidfd
|
||||
/*
|
||||
Bits for flags for pidfd
|
||||
*/
|
||||
Pid_FD_Flags_Bits :: enum {
|
||||
NONBLOCK = 11,
|
||||
}
|
||||
|
||||
/// Priority for process, process group, user
|
||||
/*
|
||||
Priority for process, process group, user
|
||||
*/
|
||||
Priority_Which :: enum i32 {
|
||||
PROCESS = 0,
|
||||
PGRP = 1,
|
||||
@@ -849,10 +926,12 @@ Sig_Stack_Flag :: enum i32 {
|
||||
AUTODISARM = 31,
|
||||
}
|
||||
|
||||
/// Type of socket to create
|
||||
/// For TCP you want to use SOCK_STREAM
|
||||
/// For UDP you want to use SOCK_DGRAM
|
||||
/// Also see Protocol
|
||||
/*
|
||||
Type of socket to create
|
||||
- For TCP you want to use SOCK_STREAM
|
||||
- For UDP you want to use SOCK_DGRAM
|
||||
Also see `Protocol`
|
||||
*/
|
||||
Socket_Type :: enum {
|
||||
STREAM = 1,
|
||||
DGRAM = 2,
|
||||
@@ -863,13 +942,17 @@ Socket_Type :: enum {
|
||||
PACKET = 10,
|
||||
}
|
||||
|
||||
/// Bits for Socket_FD_Flags
|
||||
/*
|
||||
Bits for Socket_FD_Flags
|
||||
*/
|
||||
Socket_FD_Flags_Bits :: enum {
|
||||
NONBLOCK = 14,
|
||||
CLOEXEC = 25,
|
||||
}
|
||||
|
||||
/// Protocol family
|
||||
/*
|
||||
Protocol family
|
||||
*/
|
||||
Protocol_Family :: enum u16 {
|
||||
UNSPEC = 0,
|
||||
LOCAL = 1,
|
||||
@@ -922,11 +1005,13 @@ Protocol_Family :: enum u16 {
|
||||
MCTP = 45,
|
||||
}
|
||||
|
||||
/// The protocol number according to IANA protocol number list
|
||||
/// Full list of protocol numbers:
|
||||
/// https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
|
||||
/// Supported by the OS protocols can be queried by reading:
|
||||
/// /etc/protocols
|
||||
/*
|
||||
The protocol number according to IANA protocol number list
|
||||
Full list of protocol numbers:
|
||||
https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
|
||||
Supported by the OS protocols can be queried by reading:
|
||||
/etc/protocols
|
||||
*/
|
||||
Protocol :: enum {
|
||||
HOPOPT = 0,
|
||||
ICMP = 1,
|
||||
@@ -1066,7 +1151,9 @@ Protocol :: enum {
|
||||
Reserved = 255,
|
||||
}
|
||||
|
||||
/// API Level for get/setsockopt.2
|
||||
/*
|
||||
API Level for getsockopt(2)/setsockopt(2)
|
||||
*/
|
||||
Socket_API_Level :: enum {
|
||||
// Comes from <bits/socket-constants.h>
|
||||
SOCKET = 1,
|
||||
@@ -1103,8 +1190,10 @@ Socket_API_Level :: enum {
|
||||
SMC = 286,
|
||||
}
|
||||
|
||||
/// If Socket_API_Level == .SOCKET, these are the options
|
||||
/// you can specify in get/setsockopt.2
|
||||
/*
|
||||
If Socket_API_Level == .SOCKET, these are the options
|
||||
you can specify in getsockopt(2)/setsockopt(2)
|
||||
*/
|
||||
Socket_Option :: enum {
|
||||
DEBUG = 1,
|
||||
REUSEADDR = 2,
|
||||
@@ -1249,7 +1338,9 @@ Socket_TCP_Option :: enum {
|
||||
TX_DELAY = 37,
|
||||
}
|
||||
|
||||
/// Bits for Socket_Msg
|
||||
/*
|
||||
Bits for Socket_Msg
|
||||
*/
|
||||
Socket_Msg_Bits :: enum {
|
||||
OOB = 0,
|
||||
PEEK = 1,
|
||||
@@ -1275,14 +1366,18 @@ Socket_Msg_Bits :: enum {
|
||||
CMSG_CLOEXEC = 30,
|
||||
}
|
||||
|
||||
/// Argument to shutdown.2
|
||||
/*
|
||||
Argument to shutdown(2)
|
||||
*/
|
||||
Shutdown_How :: enum i32 {
|
||||
RD = 0,
|
||||
WR = 1,
|
||||
RDWR = 2,
|
||||
}
|
||||
|
||||
/// Second argument to futex.2 syscall
|
||||
/*
|
||||
Second argument to futex(2) syscall
|
||||
*/
|
||||
Futex_Op :: enum u32 {
|
||||
WAIT = 0,
|
||||
WAKE = 1,
|
||||
@@ -1300,13 +1395,17 @@ Futex_Op :: enum u32 {
|
||||
LOCK_PI2 = 13,
|
||||
}
|
||||
|
||||
/// Bits for Futex_Flags
|
||||
/*
|
||||
Bits for Futex_Flags
|
||||
*/
|
||||
Futex_Flags_Bits :: enum {
|
||||
PRIVATE = 7,
|
||||
REALTIME = 8,
|
||||
}
|
||||
|
||||
/// Kind of operation on futex, see FUTEX_WAKE_OP
|
||||
/*
|
||||
Kind of operation on futex, see FUTEX_WAKE_OP
|
||||
*/
|
||||
Futex_Arg_Op :: enum {
|
||||
SET = 0, /* uaddr2 = oparg; */
|
||||
ADD = 1, /* uaddr2 += oparg; */
|
||||
@@ -1320,7 +1419,9 @@ Futex_Arg_Op :: enum {
|
||||
PO2_XOR = 4, /* uaddr2 ^= 1<<oparg; */
|
||||
}
|
||||
|
||||
/// Kind of comparison operation on futex, see FUTEX_WAKE_OP
|
||||
/*
|
||||
Kind of comparison operation on futex, see FUTEX_WAKE_OP
|
||||
*/
|
||||
Futex_Cmp_Op :: enum {
|
||||
EQ = 0, /* if (oldval == cmparg) wake */
|
||||
NE = 1, /* if (oldval != cmparg) wake */
|
||||
@@ -1330,7 +1431,9 @@ Futex_Cmp_Op :: enum {
|
||||
GE = 5, /* if (oldval >= cmparg) wake */
|
||||
}
|
||||
|
||||
/// The kind of resource limits
|
||||
/*
|
||||
The kind of resource limits
|
||||
*/
|
||||
RLimit_Kind :: enum i32 {
|
||||
CPU = 0,
|
||||
FSIZE = 1,
|
||||
@@ -1351,7 +1454,9 @@ RLimit_Kind :: enum i32 {
|
||||
NLIMITS = 16,
|
||||
}
|
||||
|
||||
/// Represents the user of resources
|
||||
/*
|
||||
Represents the user of resources
|
||||
*/
|
||||
RUsage_Who :: enum i32 {
|
||||
CHILDREN = -1,
|
||||
SELF = 0,
|
||||
@@ -1359,7 +1464,9 @@ RUsage_Who :: enum i32 {
|
||||
LWP = THREAD,
|
||||
}
|
||||
|
||||
/// Bits for Personality_Flags
|
||||
/*
|
||||
Bits for Personality_Flags
|
||||
*/
|
||||
UNAME26 :: 17
|
||||
ADDR_NO_RANDOMIZE :: 18
|
||||
FDPIC_FUNCPTRS :: 19
|
||||
@@ -1372,8 +1479,10 @@ WHOLE_SECONDS :: 25
|
||||
STICKY_TIMEOUTS :: 26
|
||||
ADDR_LIMIT_3GB :: 27
|
||||
|
||||
/// Personality type
|
||||
/// These go into the bottom 8 bits of the personality value
|
||||
/*
|
||||
Personality type
|
||||
These go into the bottom 8 bits of the personality value
|
||||
*/
|
||||
PER_LINUX :: 0x0000
|
||||
PER_LINUX_32BIT :: 0x0000 | ADDR_LIMIT_32BIT
|
||||
PER_LINUX_FDPIC :: 0x0000 | FDPIC_FUNCPTRS
|
||||
|
||||
@@ -1,26 +1,40 @@
|
||||
|
||||
package linux
|
||||
|
||||
/// Special file descriptor to pass to `*at` functions to specify
|
||||
/// that relative paths are relative to current directory
|
||||
/*
|
||||
Special file descriptor to pass to `*at` functions to specify
|
||||
that relative paths are relative to current directory.
|
||||
*/
|
||||
AT_FDCWD :: Fd(-100)
|
||||
|
||||
/// Special value to put into timespec for utimensat() to set timestamp to the current time
|
||||
/*
|
||||
Special value to put into timespec for utimensat() to set timestamp to the current time.
|
||||
*/
|
||||
UTIME_NOW :: uint((1 << 30) - 1)
|
||||
|
||||
/// Special value to put into the timespec for utimensat() to leave the corresponding field of the timestamp unchanged
|
||||
/*
|
||||
Special value to put into the timespec for utimensat() to leave the corresponding field of the timestamp unchanged.
|
||||
*/
|
||||
UTIME_OMIT :: uint((1 << 30) - 2)
|
||||
|
||||
/// For wait4: Pass this pid to wait for any process
|
||||
/*
|
||||
For wait4: Pass this pid to wait for any process.
|
||||
*/
|
||||
WAIT_ANY :: Pid(-1)
|
||||
|
||||
/// For wait4: Pass this pid to wait for any process in current process group
|
||||
/*
|
||||
For wait4: Pass this pid to wait for any process in current process group.
|
||||
*/
|
||||
WAIT_MYPGRP :: Pid(0)
|
||||
|
||||
/// Maximum priority (aka nice value) for the process
|
||||
/*
|
||||
Maximum priority (aka nice value) for the process.
|
||||
*/
|
||||
PRIO_MAX :: 20
|
||||
|
||||
/// Minimum priority (aka nice value) for the process
|
||||
/*
|
||||
Minimum priority (aka nice value) for the process.
|
||||
*/
|
||||
PRIO_MIN :: -20
|
||||
|
||||
SIGRTMIN :: Signal(32)
|
||||
@@ -35,40 +49,64 @@ S_IFCHR :: Mode{.IFCHR}
|
||||
S_IFDIR :: Mode{.IFDIR}
|
||||
S_IFREG :: Mode{.IFREG}
|
||||
|
||||
/// Checks the Mode bits to see if the file is a named pipe (FIFO)
|
||||
/*
|
||||
Checks the Mode bits to see if the file is a named pipe (FIFO).
|
||||
*/
|
||||
S_ISFIFO :: #force_inline proc "contextless" (m: Mode) -> bool {return (S_IFFIFO == (m & S_IFMT))}
|
||||
|
||||
/// Check the Mode bits to see if the file is a character device
|
||||
/*
|
||||
Check the Mode bits to see if the file is a character device.
|
||||
*/
|
||||
S_ISCHR :: #force_inline proc "contextless" (m: Mode) -> bool {return (S_IFCHR == (m & S_IFMT))}
|
||||
|
||||
/// Check the Mode bits to see if the file is a directory
|
||||
|
||||
/*
|
||||
Check the Mode bits to see if the file is a directory.
|
||||
*/
|
||||
S_ISDIR :: #force_inline proc "contextless" (m: Mode) -> bool {return (S_IFDIR == (m & S_IFMT))}
|
||||
|
||||
/// Check the Mode bits to see if the file is a register
|
||||
/*
|
||||
Check the Mode bits to see if the file is a register.
|
||||
*/
|
||||
S_ISREG :: #force_inline proc "contextless" (m: Mode) -> bool {return (S_IFREG == (m & S_IFMT))}
|
||||
|
||||
/// Check the Mode bits to see if the file is a socket
|
||||
/*
|
||||
Check the Mode bits to see if the file is a socket.
|
||||
*/
|
||||
S_ISSOCK :: #force_inline proc "contextless" (m: Mode) -> bool {return (S_IFSOCK == (m & S_IFMT))}
|
||||
|
||||
/// Check the Mode bits to see if the file is a symlink
|
||||
/*
|
||||
Check the Mode bits to see if the file is a symlink.
|
||||
*/
|
||||
S_ISLNK :: #force_inline proc "contextless" (m: Mode) -> bool {return (S_IFLNK == (m & S_IFMT))}
|
||||
|
||||
/// Check the Mode bits to see if the file is a block device
|
||||
/*
|
||||
Check the Mode bits to see if the file is a block device.
|
||||
*/
|
||||
S_ISBLK :: #force_inline proc "contextless" (m: Mode) -> bool {return (S_IFBLK == (m & S_IFMT))}
|
||||
|
||||
/// For access.2 syscall family: instruct to check if the file exists
|
||||
/*
|
||||
For access.2 syscall family: instruct to check if the file exists.
|
||||
*/
|
||||
F_OK :: Mode{}
|
||||
|
||||
/// For access.2 syscall family: instruct to check if the file is executable
|
||||
/*
|
||||
For access.2 syscall family: instruct to check if the file is executable.
|
||||
*/
|
||||
X_OK :: Mode{.IXOTH}
|
||||
|
||||
/// For access.2 syscall family: instruct to check if the file is writeable
|
||||
/*
|
||||
For access.2 syscall family: instruct to check if the file is writeable.
|
||||
*/
|
||||
W_OK :: Mode{.IWOTH}
|
||||
|
||||
/// For access.2 syscall family: instruct to check if the file is readable
|
||||
/*
|
||||
For access.2 syscall family: instruct to check if the file is readable.
|
||||
*/
|
||||
R_OK :: Mode{.IROTH}
|
||||
|
||||
/// The stats you get by calling `stat`
|
||||
/*
|
||||
The stats you get by calling `stat`.
|
||||
*/
|
||||
STATX_BASIC_STATS :: Statx_Mask {
|
||||
.TYPE,
|
||||
.MODE,
|
||||
@@ -169,28 +207,44 @@ Futex_Wait_requeue_Pi_Type :: distinct Futex_Op
|
||||
Futex_Cmp_requeue_Pi_Type :: distinct Futex_Op
|
||||
Futex_Lock_Pi2_Type :: distinct Futex_Op
|
||||
|
||||
/// Wait on futex wakeup signal
|
||||
/*
|
||||
Wait on futex wakeup signal.
|
||||
*/
|
||||
FUTEX_WAIT :: Futex_Wait_Type(.WAIT)
|
||||
|
||||
/// Wake up other processes waiting on the futex
|
||||
/*
|
||||
Wake up other processes waiting on the futex.
|
||||
*/
|
||||
FUTEX_WAKE :: Futex_Wake_Type(.WAKE)
|
||||
|
||||
/// Not implemented. Basically, since
|
||||
/*
|
||||
Not implemented. Basically, since.
|
||||
*/
|
||||
FUTEX_FD :: Futex_Fd_Type(.FD)
|
||||
|
||||
/// Requeue waiters from one futex to another
|
||||
/*
|
||||
Requeue waiters from one futex to another.
|
||||
*/
|
||||
FUTEX_REQUEUE :: Futex_Requeue_Type(.REQUEUE)
|
||||
|
||||
/// Requeue waiters from one futex to another if the value at mutex matches
|
||||
/*
|
||||
Requeue waiters from one futex to another if the value at mutex matches.
|
||||
*/
|
||||
FUTEX_CMP_REQUEUE :: Futex_Cmp_Requeue_Type(.CMP_REQUEUE)
|
||||
|
||||
/// See man pages, I'm not describing it here
|
||||
/*
|
||||
See man pages, I'm not describing it here.
|
||||
*/
|
||||
FUTEX_WAKE_OP :: Futex_Wake_Op_Type(.WAKE_OP)
|
||||
|
||||
/// Wait on a futex, but the value is a bitset
|
||||
/*
|
||||
Wait on a futex, but the value is a bitset.
|
||||
*/
|
||||
FUTEX_WAIT_BITSET :: Futex_Wait_Bitset_Type(.WAIT_BITSET)
|
||||
|
||||
/// Wait on a futex, but the value is a bitset
|
||||
/*
|
||||
Wait on a futex, but the value is a bitset.
|
||||
*/
|
||||
FUTEX_WAKE_BITSET :: Futex_Wake_Bitset_Type(.WAKE_BITSET)
|
||||
|
||||
// TODO(flysand): Priority inversion futexes
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,46 +1,68 @@
|
||||
//+build linux
|
||||
package linux
|
||||
|
||||
/// Represents storage device handle
|
||||
/*
|
||||
Type for storage device handle.
|
||||
*/
|
||||
Dev :: distinct int
|
||||
|
||||
/// Represents 32-bit user id
|
||||
/*
|
||||
Type for 32-bit User IDs.
|
||||
*/
|
||||
Uid :: distinct u32
|
||||
|
||||
/// Represents 32-bit group id
|
||||
/*
|
||||
Type for 32-bit Group IDs.
|
||||
*/
|
||||
Gid :: distinct u32
|
||||
|
||||
/// Process id's
|
||||
/*
|
||||
Type for Process IDs, Thread IDs, Thread group ID.
|
||||
*/
|
||||
Pid :: distinct int
|
||||
|
||||
/// Represents pid, pifd, pgid values in general
|
||||
/*
|
||||
Type for any of: pid, pidfd, pgid.
|
||||
*/
|
||||
Id :: distinct uint
|
||||
|
||||
/// Represents a file descriptor
|
||||
/*
|
||||
Represents a file descriptor.
|
||||
*/
|
||||
Fd :: distinct i32
|
||||
|
||||
/// Represents a PID file descriptor
|
||||
/*
|
||||
Type for PID file descriptors.
|
||||
*/
|
||||
Pid_FD :: distinct i32
|
||||
|
||||
/// Represents 64-bit inode number for files
|
||||
/// Used pretty much only in struct Stat64 for 32-bit platforms
|
||||
/*
|
||||
Type for 64-bit inode number for files.
|
||||
Used pretty much only in struct Stat64 for 32-bit platforms.
|
||||
*/
|
||||
Inode :: distinct u64
|
||||
|
||||
/// Shared memory identifiers used by `shm*` calls
|
||||
/*
|
||||
Shared memory identifiers used by shmget(2) and other calls.
|
||||
*/
|
||||
Key :: distinct i32
|
||||
|
||||
/*
|
||||
Represents timer IDs
|
||||
Represents timer IDs.
|
||||
*/
|
||||
Timer :: distinct i32
|
||||
|
||||
/// Represents time with nanosecond precision
|
||||
/*
|
||||
Represents time with nanosecond precision.
|
||||
*/
|
||||
Time_Spec :: struct {
|
||||
time_sec: uint,
|
||||
time_nsec: uint,
|
||||
}
|
||||
|
||||
/// Represents time with millisecond precision
|
||||
/*
|
||||
Represents time with millisecond precision.
|
||||
*/
|
||||
Time_Val :: struct {
|
||||
seconds: int,
|
||||
microseconds: int,
|
||||
@@ -52,22 +74,31 @@ Time_Val :: struct {
|
||||
UTim_Buf :: struct {
|
||||
actime: uint,
|
||||
modtime: uint,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
/// open.2 flags
|
||||
/*
|
||||
Flags for open(2).
|
||||
*/
|
||||
Open_Flags :: bit_set[Open_Flags_Bits; u32]
|
||||
|
||||
/// Flags for the file descriptor to be passed in some syscalls
|
||||
/*
|
||||
Flags for the file descriptors.
|
||||
*/
|
||||
FD_Flags :: bit_set[FD_Flags_Bits; i32]
|
||||
|
||||
/// Represents file's permission and status bits
|
||||
/// Example:
|
||||
/// When you're passing a value of this type the recommended usage is
|
||||
/// sys.Mode{.S_IXOTH, .S_IROTH} | sys.S_IRWXU | sys.S_IRWXG
|
||||
/// This would generate a mode that has full permissions for the
|
||||
/// file's owner and group, and only "read" and "execute" bits
|
||||
/// for others.
|
||||
/*
|
||||
Represents file's permission and status bits
|
||||
**Example:**
|
||||
When you're passing a value of this type the recommended usage is:
|
||||
|
||||
```
|
||||
linux.Mode{.S_IXOTH, .S_IROTH} | linux.S_IRWXU | linux.S_IRWXG
|
||||
```
|
||||
|
||||
This would generate a mode that has full permissions for the
|
||||
file's owner and group, and only "read" and "execute" bits
|
||||
for others.
|
||||
*/
|
||||
Mode :: bit_set[Mode_Bits; u32]
|
||||
|
||||
when ODIN_ARCH == .amd64 {
|
||||
@@ -128,29 +159,38 @@ when ODIN_ARCH == .amd64 {
|
||||
}
|
||||
}
|
||||
|
||||
/// Represents the file state.
|
||||
/// Mirrors struct stat in glibc/linux kernel.
|
||||
/// If you're on 32-bit platform, consider using Stat64 instead
|
||||
/*
|
||||
Represents the file state.
|
||||
If you're on 32-bit platform, consider using Stat64 instead.
|
||||
*/
|
||||
Stat :: struct {
|
||||
using _impl_stat: _Arch_Stat,
|
||||
}
|
||||
|
||||
/// Timestamp type used for Statx struct
|
||||
/*
|
||||
Timestamp type used for Statx struct
|
||||
*/
|
||||
Statx_Timestamp :: struct {
|
||||
sec: i64,
|
||||
nsec: u32,
|
||||
_: i32,
|
||||
}
|
||||
|
||||
/// Query params/results for `statx()`
|
||||
/*
|
||||
Query params/results for `statx()`.
|
||||
*/
|
||||
Statx_Mask :: bit_set[Statx_Mask_Bits; u32]
|
||||
|
||||
/// File attributes, returned by statx. This bitset is also
|
||||
/// used to specify which attributes are present, not just
|
||||
/// their value.
|
||||
/*
|
||||
File attributes, returned by statx. This bitset is also
|
||||
used to specify which attributes are present, not just
|
||||
their value.
|
||||
*/
|
||||
Statx_Attr :: bit_set[Statx_Attr_Bits; u64]
|
||||
|
||||
/// The extended Stat struct
|
||||
/*
|
||||
The extended Stat struct, the argument to statx(2) syscall.
|
||||
*/
|
||||
Statx :: struct {
|
||||
mask: Statx_Mask,
|
||||
blksize: u32,
|
||||
@@ -182,7 +222,9 @@ Statx :: struct {
|
||||
_: [12]u64,
|
||||
}
|
||||
|
||||
/// Mount flags for filesystem
|
||||
/*
|
||||
Mount flags for filesystem.
|
||||
*/
|
||||
FS_Flags :: bit_set[FS_Flags_Bits; u32]
|
||||
|
||||
when size_of(int) == 8 {
|
||||
@@ -222,19 +264,28 @@ when size_of(int) == 8 {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Struct for statfs(2).
|
||||
*/
|
||||
Stat_FS :: struct {
|
||||
using _impl_stat_fs: _Arch_Stat_FS,
|
||||
}
|
||||
|
||||
/// Flags for close_range.2
|
||||
/*
|
||||
Flags for close_range(2).
|
||||
*/
|
||||
Close_Range_Flags :: bit_set[Close_Range_Flags_Bits; u32]
|
||||
|
||||
/// Flags for rename.2
|
||||
/*
|
||||
Flags for rename(2).
|
||||
*/
|
||||
Rename_Flags :: bit_set[Rename_Flags_Bits; u32]
|
||||
|
||||
/// Directory entry
|
||||
/// Recommended to use this with dirent_iterator()
|
||||
/// and dirent_name()
|
||||
/*
|
||||
Directory entry record.
|
||||
Recommended iterate these with `dirent_iterator()`,
|
||||
and obtain the name via `dirent_name()`.
|
||||
*/
|
||||
Dirent :: struct {
|
||||
ino: Inode,
|
||||
off: i64,
|
||||
@@ -243,7 +294,9 @@ Dirent :: struct {
|
||||
name: [0]u8, // See dirent_name
|
||||
}
|
||||
|
||||
/// Lock record for fcntl.2
|
||||
/*
|
||||
Lock record for fcntl(2).
|
||||
*/
|
||||
FLock :: struct {
|
||||
type: FLock_Type,
|
||||
whence: Seek_Whence,
|
||||
@@ -259,50 +312,76 @@ FLock :: struct {
|
||||
*/
|
||||
FLock_Op :: bit_set[FLock_Op_Bits; i32]
|
||||
|
||||
/// Flags for fcntl_notify
|
||||
/*
|
||||
Flags for `fcntl_notify()`.
|
||||
*/
|
||||
FD_Notifications :: bit_set[FD_Notifications_Bits; i32]
|
||||
|
||||
/// Seals for fcntl_add_seals
|
||||
/*
|
||||
Seals for `fcntl_add_seals()`.
|
||||
*/
|
||||
Seal :: bit_set[Seal_Bits; i32]
|
||||
|
||||
/// Represents owner that receives events on file updates
|
||||
/*
|
||||
Represents owner that receives events on file updates.
|
||||
*/
|
||||
F_Owner :: struct {
|
||||
type: F_Owner_Type,
|
||||
pid: Pid,
|
||||
}
|
||||
|
||||
/// Events for ppoll
|
||||
/*
|
||||
Events for ppoll(2).
|
||||
*/
|
||||
Fd_Poll_Events :: bit_set[Fd_Poll_Events_Bits; u16]
|
||||
|
||||
/// Struct for ppoll
|
||||
/*
|
||||
Struct for ppoll(2).
|
||||
*/
|
||||
Poll_Fd :: struct {
|
||||
fd: Fd,
|
||||
events: Fd_Poll_Events,
|
||||
revents: Fd_Poll_Events,
|
||||
}
|
||||
|
||||
/// Specifies protection for memory pages
|
||||
/*
|
||||
Specifies protection for memory pages.
|
||||
*/
|
||||
Mem_Protection :: bit_set[Mem_Protection_Bits; i32]
|
||||
|
||||
/// Flags for mmap
|
||||
/*
|
||||
Flags for mmap.
|
||||
*/
|
||||
Map_Flags :: bit_set[Map_Flags_Bits; i32]
|
||||
|
||||
/// Flags for mlock.2
|
||||
/*
|
||||
Flags for mlock(2).
|
||||
*/
|
||||
MLock_Flags :: bit_set[MLock_Flags_Bits; u32]
|
||||
|
||||
/// Flags for msync.2
|
||||
/*
|
||||
Flags for msync(2).
|
||||
*/
|
||||
MSync_Flags :: bit_set[MSync_Flags_Bits; i32]
|
||||
|
||||
/// Access rights for pkey_alloc.2
|
||||
/*
|
||||
Access rights for pkey_alloc(2).
|
||||
*/
|
||||
PKey_Access_Rights :: bit_set[PKey_Access_Bits; u32]
|
||||
|
||||
/// Flags for mremap.2
|
||||
/*
|
||||
Flags for mremap(2).
|
||||
*/
|
||||
MRemap_Flags :: bit_set[MRemap_Flags_Bits; i32]
|
||||
|
||||
/// Flags for getrandom syscall
|
||||
/*
|
||||
Flags for getrandom(2) syscall.
|
||||
*/
|
||||
Get_Random_Flags :: bit_set[Get_Random_Flags_Bits; i32]
|
||||
|
||||
/// Flags for perf_event_open syscall
|
||||
/*
|
||||
Flags for perf_event_open(2) syscall.
|
||||
*/
|
||||
Perf_Flags :: bit_set[Perf_Flags_Bits; uint]
|
||||
|
||||
Perf_Event_Flags :: distinct bit_set[Perf_Event_Flags_Bits; u64]
|
||||
@@ -311,10 +390,14 @@ Perf_Cap_Flags :: distinct bit_set[Perf_Cap_Flags_Bits; u64]
|
||||
|
||||
Perf_Event_Sample_Type :: bit_set[Perf_Event_Sample_Type_Bits; u64]
|
||||
|
||||
/// Specifies which branches to include in branch record
|
||||
/*
|
||||
Specifies which branches to include in branch record.
|
||||
*/
|
||||
Branch_Sample_Type :: bit_set[Branch_Sample_Type_Bits; u64]
|
||||
|
||||
/// The struct for perf_event_open
|
||||
/*
|
||||
The struct for perf_event_open.
|
||||
*/
|
||||
Perf_Event_Attr :: struct #packed {
|
||||
type: Perf_Event_Type,
|
||||
size: u32,
|
||||
@@ -358,7 +441,9 @@ Perf_Event_Attr :: struct #packed {
|
||||
_: u16,
|
||||
}
|
||||
|
||||
/// The ring buffer structure when mmaping Perf_Event_Attr
|
||||
/*
|
||||
The ring buffer structure when mmaping Perf_Event_Attr.
|
||||
*/
|
||||
Perf_Event_Mmap_Page :: struct #packed {
|
||||
version: u32,
|
||||
compat_version: u32,
|
||||
@@ -393,10 +478,14 @@ Perf_Event_Mmap_Page :: struct #packed {
|
||||
|
||||
// TODO(flysand): Its taking too much effort to bind the other data structures related to perf_event_open
|
||||
|
||||
/// Options for wait4() and waitpid()
|
||||
/*
|
||||
Options for wait4(2) and waitpid(2).
|
||||
*/
|
||||
Wait_Options :: bit_set[Wait_Option; i32]
|
||||
|
||||
/// Flags for pidfd_open.2
|
||||
/*
|
||||
Flags for pidfd_open(2).
|
||||
*/
|
||||
Pid_FD_Flags :: bit_set[Pid_FD_Flags_Bits; i32]
|
||||
|
||||
// Note(flysand): these could, in principle be implemented with bitfields,
|
||||
@@ -503,27 +592,36 @@ Sig_Action :: struct($T: typeid) {
|
||||
mask: Sig_Set,
|
||||
}
|
||||
|
||||
|
||||
/// Flags for the socket file descriptor
|
||||
/// Note, on linux these are technically passed by OR'ing together
|
||||
/// with Socket_Type, our wrapper does this under the hood.
|
||||
/*
|
||||
Flags for the socket file descriptor.
|
||||
Note, on linux these are technically passed by OR'ing together
|
||||
with Socket_Type, our wrapper does this under the hood.
|
||||
*/
|
||||
Socket_FD_Flags :: bit_set[Socket_FD_Flags_Bits; int]
|
||||
|
||||
/// Address family for the socket
|
||||
/// Typically there's one address family for every protocol family
|
||||
/*
|
||||
Address family for the socket.
|
||||
Typically there's one address family for every protocol family.
|
||||
*/
|
||||
Address_Family :: distinct Protocol_Family
|
||||
|
||||
/// Flags for the socket for send/recv calls
|
||||
/*
|
||||
Flags for the socket for send/recv calls.
|
||||
*/
|
||||
Socket_Msg :: bit_set[Socket_Msg_Bits; i32]
|
||||
|
||||
/// Struct representing IPv4 socket address
|
||||
/*
|
||||
Struct representing IPv4 socket address.
|
||||
*/
|
||||
Sock_Addr_In :: struct #packed {
|
||||
sin_family: Address_Family,
|
||||
sin_port: u16be,
|
||||
sin_addr: [4]u8,
|
||||
}
|
||||
|
||||
/// Struct representing IPv6 socket address
|
||||
/*
|
||||
Struct representing IPv6 socket address.
|
||||
*/
|
||||
Sock_Addr_In6 :: struct #packed {
|
||||
sin6_family: Address_Family,
|
||||
sin6_port: u16be,
|
||||
@@ -532,7 +630,9 @@ Sock_Addr_In6 :: struct #packed {
|
||||
sin6_scope_id: u32,
|
||||
}
|
||||
|
||||
/// Struct representing an arbitrary socket address
|
||||
/*
|
||||
Struct representing an arbitrary socket address.
|
||||
*/
|
||||
Sock_Addr_Any :: struct #raw_union {
|
||||
using _: struct {
|
||||
family: Address_Family,
|
||||
@@ -561,13 +661,19 @@ MMsg_Hdr :: struct {
|
||||
len: u32,
|
||||
}
|
||||
|
||||
/// Just an alias to make futex-values more visible
|
||||
/*
|
||||
Just an alias to make futex-values more visible
|
||||
*/
|
||||
Futex :: u32
|
||||
|
||||
/// Flags for the futex (they are kept separately)
|
||||
/*
|
||||
Flags for the futex (they are kept separately)
|
||||
*/
|
||||
Futex_Flags :: bit_set[Futex_Flags_Bits; u32]
|
||||
|
||||
/// Times
|
||||
/*
|
||||
Times
|
||||
*/
|
||||
Tms :: struct {
|
||||
tms_utime: int,
|
||||
tms_stime: int,
|
||||
@@ -575,8 +681,10 @@ Tms :: struct {
|
||||
tms_cstime: int,
|
||||
}
|
||||
|
||||
/// "Unix time-sharing system name", allegedly
|
||||
/// Basically system info
|
||||
/*
|
||||
"Unix time-sharing system name", allegedly.
|
||||
Basically system info.
|
||||
*/
|
||||
UTS_Name :: struct {
|
||||
sysname: [65]u8 `fmt:"s,0"`,
|
||||
nodename: [65]u8 `fmt:"s,0"`,
|
||||
@@ -586,7 +694,9 @@ UTS_Name :: struct {
|
||||
domainname: [65]u8 `fmt:"s,0"`,
|
||||
}
|
||||
|
||||
/// Return buffer for the sysinfo syscall
|
||||
/*
|
||||
Return buffer for the sysinfo syscall
|
||||
*/
|
||||
Sys_Info :: struct {
|
||||
uptime: int,
|
||||
loads: [3]int,
|
||||
@@ -603,14 +713,17 @@ Sys_Info :: struct {
|
||||
_padding: [20 - (2 * size_of(int)) - size_of(i32)]u8,
|
||||
}
|
||||
|
||||
/// Resource limit
|
||||
/*
|
||||
Resource limit
|
||||
*/
|
||||
RLimit :: struct {
|
||||
cur: uint,
|
||||
max: uint,
|
||||
}
|
||||
|
||||
/// Structure representing how much of each resource
|
||||
/// got used.
|
||||
/*
|
||||
Structure representing how much of each resource got used.
|
||||
*/
|
||||
RUsage :: struct {
|
||||
utime: Time_Val,
|
||||
stime: Time_Val,
|
||||
@@ -1088,4 +1201,7 @@ PTrace_Note_Type :: enum {
|
||||
NT_ARM_ZT = 0x40d,
|
||||
}
|
||||
|
||||
/*
|
||||
Flags for splice(2) and tee(2) syscalls.
|
||||
*/
|
||||
Splice_Flags :: bit_set[Splice_Flags_Bits; u32]
|
||||
|
||||
Reference in New Issue
Block a user