summaryrefslogtreecommitdiff
path: root/libc/misc/sysvipc
diff options
context:
space:
mode:
authorJoakim Tjernlund <joakim.tjernlund@transmode.se>2005-04-24 19:29:39 +0000
committerJoakim Tjernlund <joakim.tjernlund@transmode.se>2005-04-24 19:29:39 +0000
commit266ae826f8660d485daba069a921ec1ebc68a46d (patch)
tree1c68bece818c7a556824641c09fbc9ba8b6a7595 /libc/misc/sysvipc
parent52b5a52b480f35928fccdff7298edf92736564ed (diff)
Fix bug 222: Move all archs to newer __IPC_64 interface for {msg,sem,shm}ctl
syscalls. This won't work on 2.2 kernels(I think).
Diffstat (limited to 'libc/misc/sysvipc')
-rw-r--r--libc/misc/sysvipc/ipc.h2
-rw-r--r--libc/misc/sysvipc/msgq.c4
-rw-r--r--libc/misc/sysvipc/sem.c4
-rw-r--r--libc/misc/sysvipc/shm.c4
4 files changed, 8 insertions, 6 deletions
diff --git a/libc/misc/sysvipc/ipc.h b/libc/misc/sysvipc/ipc.h
index 741b720bc..e1b94ad12 100644
--- a/libc/misc/sysvipc/ipc.h
+++ b/libc/misc/sysvipc/ipc.h
@@ -4,6 +4,8 @@
#ifdef __NR_ipc
+#define __IPC_64 0x100
+
/* The actual system call: all functions are multiplexed by this. */
extern int __syscall_ipc __P((int __call, int __first, int __second,
int __third, void *__ptr));
diff --git a/libc/misc/sysvipc/msgq.c b/libc/misc/sysvipc/msgq.c
index d4f48e7ad..411ea3ea4 100644
--- a/libc/misc/sysvipc/msgq.c
+++ b/libc/misc/sysvipc/msgq.c
@@ -6,12 +6,12 @@
#ifdef L_msgctl
#ifdef __NR_msgctl
-_syscall3(int, msgctl, int, msqid, int, cmd, struct msqid_ds *, buf);
+_syscall3(int, msgctl, int, msqid, int, cmd | __IPC_64, struct msqid_ds *, buf);
#else
/* Message queue control operation. */
int msgctl (int msqid, int cmd, struct msqid_ds *buf)
{
- return __syscall_ipc(IPCOP_msgctl ,msqid ,cmd ,0 ,buf);
+ return __syscall_ipc(IPCOP_msgctl ,msqid ,cmd | __IPC_64 ,0 ,buf);
}
#endif
#endif
diff --git a/libc/misc/sysvipc/sem.c b/libc/misc/sysvipc/sem.c
index 8c9672bad..ccbe25b46 100644
--- a/libc/misc/sysvipc/sem.c
+++ b/libc/misc/sysvipc/sem.c
@@ -51,9 +51,9 @@ int semctl(int semid, int semnum, int cmd, ...)
arg = va_arg (ap, union semun);
va_end (ap);
#ifdef __NR_semctl
- return __semctl(semid, semnum, cmd, arg.__pad);
+ return __semctl(semid, semnum, cmd | __IPC_64, arg.__pad);
#else
- return __syscall_ipc(IPCOP_semctl, semid, semnum, cmd, &arg);
+ return __syscall_ipc(IPCOP_semctl, semid, semnum, cmd | __IPC_64, &arg);
#endif
}
#endif
diff --git a/libc/misc/sysvipc/shm.c b/libc/misc/sysvipc/shm.c
index 8193ac2f0..d21d9f54b 100644
--- a/libc/misc/sysvipc/shm.c
+++ b/libc/misc/sysvipc/shm.c
@@ -48,11 +48,11 @@ void * shmat (int shmid, const void *shmaddr, int shmflg)
#ifdef L_shmctl
/* Provide operations to control over shared memory segments. */
#ifdef __NR_shmctl
-_syscall3(int, shmctl, int, shmid, int, cmd, struct shmid_ds *, buf);
+_syscall3(int, shmctl, int, shmid, int, cmd | __IPC_64, struct shmid_ds *, buf);
#else
int shmctl (int shmid, int cmd, struct shmid_ds *buf)
{
- return __syscall_ipc(IPCOP_shmctl, shmid, cmd, 0, buf);
+ return __syscall_ipc(IPCOP_shmctl, shmid, cmd | __IPC_64 , 0, buf);
}
#endif
#endif