Browse Source

Merge pull request #5403 from flysand7/shmget-interface

sys/linux: Unify IPC_Flags and IPC_Mode bitsets
Jeroen van Rijn 2 months ago
parent
commit
19d5d377df
2 changed files with 21 additions and 23 deletions
  1. 18 15
      core/sys/linux/bits.odin
  2. 3 8
      core/sys/linux/types.odin

+ 18 - 15
core/sys/linux/bits.odin

@@ -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,
-	LOCKED = 10,
-}
-
-/*
-	Shared memory flags bits
-*/
-IPC_Flags_Bits :: enum {
+	// Creation flags for shared memory.
 	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
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]
 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,
 }
 }