aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2025-06-24 11:39:36 +0200
committerGitHub <noreply@github.com>2025-06-24 11:39:36 +0200
commit19d5d377df0c7ac75da9430d71b23133472d8ed4 (patch)
tree3a526a9e28472bfba9225dcdb00f23ac8dd5db8a
parent8d89b1a4489adf0a0ae88302cbb9674d8de0b231 (diff)
parente21cde0cf7f9bdfd7af4ebf2a55b61ac1bdf36de (diff)
Merge pull request #5403 from flysand7/shmget-interface
sys/linux: Unify IPC_Flags and IPC_Mode bitsets
-rw-r--r--core/sys/linux/bits.odin33
-rw-r--r--core/sys/linux/types.odin11
2 files changed, 21 insertions, 23 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,
diff --git a/core/sys/linux/types.odin b/core/sys/linux/types.odin
index 08e0026d3..c2948c36e 100644
--- a/core/sys/linux/types.odin
+++ b/core/sys/linux/types.odin
@@ -937,17 +937,12 @@ IO_Vec :: struct {
}
/*
- Access mode for shared memory
-*/
-IPC_Mode :: bit_set[IPC_Mode_Bits; u32]
-
-/*
- Flags used by IPC objects
+ Access modes and flags used by SystemV IPC procedures.
*/
IPC_Flags :: bit_set[IPC_Flags_Bits; i16]
/*
- Permissions for IPC objects
+ Permissions for SystemV IPC primitives.
*/
IPC_Perm :: struct {
key: Key,
@@ -955,7 +950,7 @@ IPC_Perm :: struct {
gid: u32,
cuid: u32,
cgid: u32,
- mode: IPC_Mode,
+ mode: IPC_Flags, // Only contains mode flags.
seq: u16,
_: [2 + 2*size_of(int)]u8,
}