diff options
| author | Sunagatov Denis <thebumboni@gmail.com> | 2025-06-24 20:00:28 +1100 |
|---|---|---|
| committer | Sunagatov Denis <thebumboni@gmail.com> | 2025-06-24 20:30:50 +1100 |
| commit | e21cde0cf7f9bdfd7af4ebf2a55b61ac1bdf36de (patch) | |
| tree | 3a526a9e28472bfba9225dcdb00f23ac8dd5db8a /core/sys/linux/bits.odin | |
| parent | 8d89b1a4489adf0a0ae88302cbb9674d8de0b231 (diff) | |
sys/linux: Unify IPC_Flags and IPC_Mode bitsets
In #5399 it was noticed, that IPC_Mode isn't being used within SystemV
IPC procedures, even though it was designed this way, which lead to a
weird API where in order to call SystemV IPC procedures multiple
transmutes and a bitwise-OR are needed.
This unifies IPC_Mode and IPC_Flags bitsets, making it possible to call
the SystemV IPC procedures without extra casts, and rearranges the flags
in a way that hopefully makes it easier to see when they are not
colliding and should not be mixed. The explanation, explaining this
arrangement of the enum was added.
The IPC_Perm structure is modified, so that the flags can be re-used
between the calls. It's probably not as good as keeping them separate,
but should work... hopefully.
Kept the "old" style of documentation for consistency.
Signed-off-by: Sunagatov Denis <thebumboni@gmail.com>
Diffstat (limited to 'core/sys/linux/bits.odin')
| -rw-r--r-- | core/sys/linux/bits.odin | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/core/sys/linux/bits.odin b/core/sys/linux/bits.odin index d4edf354b..f9c4ec22e 100644 --- a/core/sys/linux/bits.odin +++ b/core/sys/linux/bits.odin @@ -1618,36 +1618,39 @@ PER_HPUX :: 0x0010 PER_MASK :: 0x00ff /* - Bits for access modes for shared memory + Bits for SystemV IPC flags. + + In this enum, access modes are common for any shared memory. Prefixed + entries (i.e. `IPC_` or `SHM_`) denote flags, where `IPC_` are common flags + for all SystemV IPC primitives, and `SHM_`, `SEM_` and `MSG_` are specific + to shared memory segments, semaphores and message queues respectively. + + These bits overlap, because they are meant to be used within the + context of specific procedures. Creation flags, used for `*get` procedures, + and usage flags used by all other IPC procedures. Do not mix creation and + usage flags, as well as flags prefixed differently (excluding `IPC_` + prefix). */ -IPC_Mode_Bits :: enum { +IPC_Flags_Bits :: enum { + // Access modes for shared memory. WROTH = 1, RDOTH = 2, WRGRP = 4, RDGRP = 5, WRUSR = 7, RDUSR = 8, - DEST = 9, - LOCKED = 10, -} - -/* - Shared memory flags bits -*/ -IPC_Flags_Bits :: enum { + // Creation flags for shared memory. IPC_CREAT = 9, IPC_EXCL = 10, - IPC_NOWAIT = 11, - // Semaphore - SEM_UNDO = 9, - // Shared memory SHM_HUGETLB = 11, SHM_NORESERVE = 12, + // Usage flags for shared memory. + IPC_NOWAIT = 11, + SEM_UNDO = 9, SHM_RDONLY = 12, SHM_RND = 13, SHM_REMAP = 14, SHM_EXEC = 15, - // Message queue MSG_NOERROR = 12, MSG_EXCEPT = 13, MSG_COPY = 14, |