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.
rs-1.0
Rich Felker 14 years ago
parent
commit
fce46bf980
  1. 2
      arch/arm/bits/ipc.h
  2. 2
      arch/i386/bits/ipc.h
  3. 2
      arch/mips/bits/ipc.h
  4. 8
      src/ipc/semctl.c

2
arch/arm/bits/ipc.h

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

2
arch/i386/bits/ipc.h

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

2
arch/mips/bits/ipc.h

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

8
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
}

Loading…
Cancel
Save