Merge pull request #5403 from flysand7/shmget-interface

sys/linux: Unify IPC_Flags and IPC_Mode bitsets
This commit is contained in:
Jeroen van Rijn
2025-06-24 11:39:36 +02:00
committed by GitHub
2 changed files with 21 additions and 23 deletions
+18 -15
View File
@@ -1618,36 +1618,39 @@ PER_HPUX :: 0x0010
PER_MASK :: 0x00ff 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, WROTH = 1,
RDOTH = 2, RDOTH = 2,
WRGRP = 4, WRGRP = 4,
RDGRP = 5, RDGRP = 5,
WRUSR = 7, WRUSR = 7,
RDUSR = 8, RDUSR = 8,
DEST = 9, // Creation flags for shared memory.
LOCKED = 10,
}
/*
Shared memory flags bits
*/
IPC_Flags_Bits :: enum {
IPC_CREAT = 9, IPC_CREAT = 9,
IPC_EXCL = 10, IPC_EXCL = 10,
IPC_NOWAIT = 11,
// Semaphore
SEM_UNDO = 9,
// Shared memory
SHM_HUGETLB = 11, SHM_HUGETLB = 11,
SHM_NORESERVE = 12, SHM_NORESERVE = 12,
// Usage flags for shared memory.
IPC_NOWAIT = 11,
SEM_UNDO = 9,
SHM_RDONLY = 12, SHM_RDONLY = 12,
SHM_RND = 13, SHM_RND = 13,
SHM_REMAP = 14, SHM_REMAP = 14,
SHM_EXEC = 15, SHM_EXEC = 15,
// Message queue
MSG_NOERROR = 12, MSG_NOERROR = 12,
MSG_EXCEPT = 13, MSG_EXCEPT = 13,
MSG_COPY = 14, MSG_COPY = 14,
+3 -8
View File
@@ -937,17 +937,12 @@ IO_Vec :: struct {
} }
/* /*
Access mode for shared memory Access modes and flags used by SystemV IPC procedures.
*/
IPC_Mode :: bit_set[IPC_Mode_Bits; u32]
/*
Flags used by IPC objects
*/ */
IPC_Flags :: bit_set[IPC_Flags_Bits; i16] IPC_Flags :: bit_set[IPC_Flags_Bits; i16]
/* /*
Permissions for IPC objects Permissions for SystemV IPC primitives.
*/ */
IPC_Perm :: struct { IPC_Perm :: struct {
key: Key, key: Key,
@@ -955,7 +950,7 @@ IPC_Perm :: struct {
gid: u32, gid: u32,
cuid: u32, cuid: u32,
cgid: u32, cgid: u32,
mode: IPC_Mode, mode: IPC_Flags, // Only contains mode flags.
seq: u16, seq: u16,
_: [2 + 2*size_of(int)]u8, _: [2 + 2*size_of(int)]u8,
} }