6 #if __BYTE_ORDER != __BIG_ENDIAN
7 #undef SYSCALL_IPC_BROKEN_MODE
10 int msgctl(int q, int cmd, struct msqid_ds *buf)
13 struct msqid_ds out, *orig;
15 out = (struct msqid_ds){0};
20 #ifdef SYSCALL_IPC_BROKEN_MODE
24 tmp.msg_perm.mode *= 0x10000U;
29 int r = __syscall(SYS_msgctl, q, IPC_CMD(cmd), buf);
31 int r = __syscall(SYS_ipc, IPCOP_msgctl, q, IPC_CMD(cmd), 0, buf, 0);
33 #ifdef SYSCALL_IPC_BROKEN_MODE
34 if (r >= 0) switch (cmd | IPC_TIME64) {
38 buf->msg_perm.mode >>= 16;
42 if (r >= 0 && (cmd&IPC_TIME64)) {
45 IPC_HILO(buf, msg_stime);
46 IPC_HILO(buf, msg_rtime);
47 IPC_HILO(buf, msg_ctime);
50 return __syscall_ret(r);