about summary refs log tree commit diff
path: root/include/sys
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-04-13 16:45:43 -0400
committerRich Felker <dalias@aerifal.cx>2011-04-13 16:45:43 -0400
commit07e865cc5afb11e6e882e998306ab0f7fb64357e (patch)
tree18e18c2b12ee6d9f7ae91f84bd8374224a736c81 /include/sys
parentb5b43b6d6245efac10cd0d2b6d23ee8f91d75261 (diff)
downloadmusl-07e865cc5afb11e6e882e998306ab0f7fb64357e.tar.gz
musl-07e865cc5afb11e6e882e998306ab0f7fb64357e.tar.xz
musl-07e865cc5afb11e6e882e998306ab0f7fb64357e.zip
numerous fixes to sysv ipc
some of these definitions were just plain wrong, others based on
outdated ancient "non-64" versions of the kernel interface.

as much as possible has now been moved out of bits/*

these changes break abi (the old abi for these functions was wrong),
but since they were not working anyway it can hardly matter.
Diffstat (limited to 'include/sys')
-rw-r--r--include/sys/ipc.h18
-rw-r--r--include/sys/msg.h22
-rw-r--r--include/sys/shm.h28
3 files changed, 55 insertions, 13 deletions
diff --git a/include/sys/ipc.h b/include/sys/ipc.h
index 9de9f3e7..8e2f7172 100644
--- a/include/sys/ipc.h
+++ b/include/sys/ipc.h
@@ -11,13 +11,27 @@ extern "C" {
 
 #include <bits/alltypes.h>
 
+#ifdef _GNU_SOURCE
+#define __ipc_perm_key key
+#define __ipc_perm_seq seq
+#endif
+
 #include <bits/ipc.h>
 
+#define IPC_CREAT  01000
+#define IPC_EXCL   02000
+#define IPC_NOWAIT 04000
+
+#define IPC_RMID 0
+#define IPC_SET  1
+#define IPC_STAT 2
+#define IPC_INFO 3
+
+#define IPC_PRIVATE ((key_t) 0)
+
 key_t ftok (const char *, int);
 
 #ifdef __cplusplus
 }
 #endif
 #endif
-
-
diff --git a/include/sys/msg.h b/include/sys/msg.h
index 4ae522fb..06f25533 100644
--- a/include/sys/msg.h
+++ b/include/sys/msg.h
@@ -14,20 +14,20 @@
 typedef unsigned long msgqnum_t;
 typedef unsigned long msglen_t;
 
-struct msqid_ds
-{
-	struct ipc_perm msg_perm;
-	time_t msg_stime;
-	time_t msg_rtime;
-	time_t msg_ctime;
-	msgqnum_t msg_qnum;
-	msglen_t msg_qbytes;
-	pid_t msg_lspid;
-	pid_t msg_lrpid;
-};
+#include <bits/msg.h>
+
+#define __msg_cbytes msg_cbytes
 
 #define MSG_NOERROR 010000
 
+#define MSG_STAT 11
+#define MSG_INFO 12
+
+struct msginfo {
+	int msgpool, msgmap, msgmax, msgmnb, msgmni, msgssz, msgtql;
+	unsigned short msgseg;
+};
+
 int msgctl (int, int, struct msqid_ds *);
 int msgget (key_t, int);
 ssize_t msgrcv (int, void *, size_t, long, int);
diff --git a/include/sys/shm.h b/include/sys/shm.h
index 6ebb9412..fa927101 100644
--- a/include/sys/shm.h
+++ b/include/sys/shm.h
@@ -10,6 +10,34 @@
 #include <sys/ipc.h>
 #include <bits/shm.h>
 
+#define SHM_RDONLY 010000
+#define SHM_RND    020000
+#define SHM_REMAP  040000
+#define SHM_EXEC   0100000
+
+#define SHM_LOCK 11
+#define SHM_UNLOCK 12
+#define SHM_STAT 13
+#define SHM_INFO 14
+#define SHM_DEST 01000
+#define SHM_LOCKED 02000
+#define SHM_HUGETLB 04000
+#define SHM_NORESERVE 010000
+
+struct shminfo {
+	unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4];
+};
+
+struct shm_info {
+	int used_ids;
+	unsigned long shm_tot, shm_rss, shm_swp;
+#ifdef _GNU_SOURCE
+	unsigned long swap_attempts, swap_successes;
+#else
+	unsigned long __reserved[2];
+#endif
+};
+
 void *shmat(int, const void *, int);
 int shmctl(int, int, struct shmid_ds *);
 int shmdt(const void *);