1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

Remove __ASSUME_IPC64

PowerPC has always used __IPC_64 like most other architectures, which
means that __ASSUME_IPC64 can be always true.  Also, all other
architecture implementations that use the ipc syscall are effectively
identical to the generic version and can be removed.
This commit is contained in:
Andreas Schwab
2015-08-18 10:29:30 +02:00
parent 1695cdae06
commit be481652f2
24 changed files with 29 additions and 706 deletions

View File

@ -64,68 +64,7 @@ compat_symbol (libc, __old_msgctl, msgctl, GLIBC_2_0);
int
__new_msgctl (int msqid, int cmd, struct msqid_ds *buf)
{
#if __ASSUME_IPC64 > 0
return INLINE_SYSCALL (ipc, 5, IPCOP_msgctl,
msqid, cmd | __IPC_64, 0, buf);
#else
switch (cmd) {
case MSG_STAT:
case IPC_STAT:
case IPC_SET:
break;
default:
return INLINE_SYSCALL (ipc, 5, IPCOP_msgctl,
msqid, cmd, 0, buf);
}
{
int result;
struct __old_msqid_ds old;
/* Unfortunately there is no way how to find out for sure whether
we should use old or new msgctl. */
result = INLINE_SYSCALL (ipc, 5, IPCOP_msgctl,
msqid, cmd | __IPC_64, 0, buf);
if (result != -1 || errno != EINVAL)
return result;
if (cmd == IPC_SET)
{
old.msg_perm.uid = buf->msg_perm.uid;
old.msg_perm.gid = buf->msg_perm.gid;
old.msg_perm.mode = buf->msg_perm.mode;
old.msg_qbytes = buf->msg_qbytes;
if (old.msg_perm.uid != buf->msg_perm.uid ||
old.msg_perm.gid != buf->msg_perm.gid ||
old.msg_qbytes != buf->msg_qbytes)
{
__set_errno (EINVAL);
return -1;
}
}
result = INLINE_SYSCALL (ipc, 5, IPCOP_msgctl, msqid, cmd, 0, &old);
if (result != -1 && cmd != IPC_SET)
{
memset(buf, 0, sizeof(*buf));
buf->msg_perm.__key = old.msg_perm.__key;
buf->msg_perm.uid = old.msg_perm.uid;
buf->msg_perm.gid = old.msg_perm.gid;
buf->msg_perm.cuid = old.msg_perm.cuid;
buf->msg_perm.cgid = old.msg_perm.cgid;
buf->msg_perm.mode = old.msg_perm.mode;
buf->msg_perm.__seq = old.msg_perm.__seq;
buf->msg_stime = old.msg_stime;
buf->msg_rtime = old.msg_rtime;
buf->msg_ctime = old.msg_ctime;
buf->__msg_cbytes = old.__msg_cbytes;
buf->msg_qnum = old.msg_qnum;
buf->msg_qbytes = old.msg_qbytes;
buf->msg_lspid = old.msg_lspid;
buf->msg_lrpid = old.msg_lrpid;
}
return result;
}
#endif
return INLINE_SYSCALL (ipc, 5, IPCOP_msgctl, msqid, cmd | __IPC_64, 0, buf);
}
versioned_symbol (libc, __new_msgctl, msgctl, GLIBC_2_2);