summaryrefslogtreecommitdiff
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
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 *);