mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 07:08:48 +00:00
Fix bit flags on fcntl linux POSIX implemention. Add sys/sem linux implementation.
This commit is contained in:
@@ -123,12 +123,16 @@ O_Flag_Bits :: enum c.int {
|
|||||||
NONBLOCK = log2(O_NONBLOCK),
|
NONBLOCK = log2(O_NONBLOCK),
|
||||||
// Write I/O shall complete as defined by synchronized I/O file integrity completion.
|
// Write I/O shall complete as defined by synchronized I/O file integrity completion.
|
||||||
SYNC = log2(O_SYNC),
|
SYNC = log2(O_SYNC),
|
||||||
|
|
||||||
// NOTE: use with `posix.O_RSYNC + { .OTHER_FLAG, .OTHER_FLAG }`, unfortunately can't be in
|
// NOTE: use with `posix.O_RSYNC + { .OTHER_FLAG, .OTHER_FLAG }`, unfortunately can't be in
|
||||||
// this bit set enum because it is 0 on some platforms and a value on others.
|
// this bit set enum because it is 0 on some platforms and a value on others.
|
||||||
// RSYNC = O_RSYNC,
|
// RSYNC = O_RSYNC,
|
||||||
|
|
||||||
// Execute only.
|
// Execute only.
|
||||||
EXEC = O_EXEC when ODIN_OS == .Linux else log2(O_EXEC),
|
// NOTE: use with `posix.O_ENTER + { .OTHER_FLAG, .OTHER_FLAG }`, unfortunately can't be in
|
||||||
|
// this bit set enum because it is 0 on some platforms and a value on others.
|
||||||
|
// EXEC = O_EXEC
|
||||||
|
|
||||||
// Reading and writing.
|
// Reading and writing.
|
||||||
RDWR = log2(O_RDWR),
|
RDWR = log2(O_RDWR),
|
||||||
// Writing only.
|
// Writing only.
|
||||||
@@ -139,7 +143,8 @@ O_Flag_Bits :: enum c.int {
|
|||||||
O_Flags :: bit_set[O_Flag_Bits; c.int]
|
O_Flags :: bit_set[O_Flag_Bits; c.int]
|
||||||
|
|
||||||
// A mask of all the access mode bits.
|
// A mask of all the access mode bits.
|
||||||
O_ACCMODE :: O_Flags{ .EXEC, .RDWR, .WRONLY }
|
// NOTE: .EXEC and .RDONLY also belong here, but they are 0 on some platforms.
|
||||||
|
O_ACCMODE :: O_Flags{ .RDWR, .WRONLY }
|
||||||
|
|
||||||
AT_Flag_Bits :: enum c.int {
|
AT_Flag_Bits :: enum c.int {
|
||||||
EACCESS = log2(AT_EACCESS),
|
EACCESS = log2(AT_EACCESS),
|
||||||
|
|||||||
@@ -127,6 +127,36 @@ when ODIN_OS == .Darwin || ODIN_OS == .FreeBSD || ODIN_OS == .NetBSD || ODIN_OS
|
|||||||
sem_flg: c.short, /* [PSX] operation flags */
|
sem_flg: c.short, /* [PSX] operation flags */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else when ODIN_OS == .Linux {
|
||||||
|
|
||||||
|
SEM_UNDO :: 0x1000 // undo the operation on exit
|
||||||
|
|
||||||
|
// Commands for `semctl'.
|
||||||
|
GETPID :: 11
|
||||||
|
GETVAL :: 12
|
||||||
|
GETALL :: 13
|
||||||
|
GETNCNT :: 14
|
||||||
|
GETZCNT :: 15
|
||||||
|
SETVAL :: 16
|
||||||
|
SETALL :: 17
|
||||||
|
|
||||||
|
semid_ds :: struct {
|
||||||
|
sem_perm: ipc_perm, // [PSX] operation permission structure
|
||||||
|
sem_otime: time_t, // [PSX] last semop()
|
||||||
|
__sem_otime_high: c.ulong,
|
||||||
|
sem_ctime: time_t, // [PSX] last time changed by semctl()
|
||||||
|
__sem_ctime_high: c.ulong,
|
||||||
|
sem_nsems: c.ulong, // [PSX] number of semaphores in set
|
||||||
|
__glibc_reserved3: c.ulong,
|
||||||
|
__glibc_reserved4: c.ulong,
|
||||||
|
}
|
||||||
|
|
||||||
|
sembuf :: struct {
|
||||||
|
sem_num: c.ushort, /* [PSX] semaphore number */
|
||||||
|
sem_op: c.short, /* [PSX] semaphore operation */
|
||||||
|
sem_flg: c.short, /* [PSX] operation flags */
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
#panic("posix is unimplemented for the current target")
|
#panic("posix is unimplemented for the current target")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user