Browse Source

fix broken semctl on systems that don't use IPC_64 flag

not tested on mips and arm; they may still be broken. x86_64 should be
ok now.
Rich Felker 12 years ago
parent
commit
fce46bf980
4 changed files with 12 additions and 2 deletions
  1. 2 0
      arch/arm/bits/ipc.h
  2. 2 0
      arch/i386/bits/ipc.h
  3. 2 0
      arch/mips/bits/ipc.h
  4. 6 2
      src/ipc/semctl.c

+ 2 - 0
arch/arm/bits/ipc.h

@@ -10,3 +10,5 @@ struct ipc_perm
 	long __pad1;
 	long __pad2;
 };
+
+#define IPC_64 0x100

+ 2 - 0
arch/i386/bits/ipc.h

@@ -10,3 +10,5 @@ struct ipc_perm
 	long __pad1;
 	long __pad2;
 };
+
+#define IPC_64 0x100

+ 2 - 0
arch/mips/bits/ipc.h

@@ -10,3 +10,5 @@ struct ipc_perm
 	long __pad1;
 	long __pad2;
 };
+
+#define IPC_64 0x100

+ 6 - 2
src/ipc/semctl.c

@@ -3,6 +3,10 @@
 #include "syscall.h"
 #include "ipc.h"
 
+#ifndef IPC_64
+#define IPC_64 0
+#endif
+
 int semctl(int id, int num, int cmd, ...)
 {
 	long arg;
@@ -11,8 +15,8 @@ int semctl(int id, int num, int cmd, ...)
 	arg = va_arg(ap, long);
 	va_end(ap);
 #ifdef SYS_semctl
-	return syscall(SYS_semctl, id, num, cmd | 0x100, arg);
+	return syscall(SYS_semctl, id, num, cmd | IPC_64, arg);
 #else
-	return syscall(SYS_ipc, IPCOP_semctl, id, num, cmd | 0x100, &arg);
+	return syscall(SYS_ipc, IPCOP_semctl, id, num, cmd | IPC_64, &arg);
 #endif
 }