]> granicus.if.org Git - strace/commitdiff
2003-01-14 Roland McGrath <roland@redhat.com>
authorRoland McGrath <roland@redhat.com>
Tue, 14 Jan 2003 09:46:17 +0000 (09:46 +0000)
committerRoland McGrath <roland@redhat.com>
Tue, 14 Jan 2003 09:46:17 +0000 (09:46 +0000)
* ipc.c (PRINTCTL): New macro.  #ifdef IPC_64, factor out the flag and
print it before using printxval.
(sys_msgctl, sys_semctl, sys_shmctl): Use it.

ipc.c

diff --git a/ipc.c b/ipc.c
index 06688f0a5133fc3f58ce668391808c14b71095a1..a0bbca49014ddaec5a6012bebab1c86a7906a88b 100644 (file)
--- a/ipc.c
+++ b/ipc.c
 #define SEM_INFO 19
 #endif
 
+#if defined LINUX && !defined IPC_64
+# define IPC_64 0x100
+#endif
+
 static struct xlat msgctl_flags[] = {
        { IPC_RMID,     "IPC_RMID"      },
        { IPC_SET,      "IPC_SET"       },
@@ -98,12 +102,12 @@ static struct xlat shmctl_flags[] = {
        { SHM_STAT,     "SHM_STAT"      },
        { SHM_INFO,     "SHM_INFO"      },
 #endif /* LINUX */
-#ifdef SHM_LOCK        
+#ifdef SHM_LOCK
        { SHM_LOCK,     "SHM_LOCK"      },
 #endif
-#ifdef SHM_UNLOCK      
+#ifdef SHM_UNLOCK
        { SHM_UNLOCK,   "SHM_UNLOCK"    },
-#endif 
+#endif
        { 0,            NULL            },
 };
 
@@ -148,14 +152,20 @@ struct tcb *tcp;
        return 0;
 }
 
+#ifdef IPC_64
+# define PRINTCTL(flagset, arg, dflt) \
+       if ((arg) & IPC_64) tprintf("IPC_64|"); \
+       printxval((flagset), (arg) &~ IPC_64, dflt)
+#else
+# define PRINTCTL printxval
+#endif
+
 int sys_msgctl(tcp)
 struct tcb *tcp;
 {
-       char *cmd = xlookup(msgctl_flags, tcp->u_arg[1]);
-
        if (entering(tcp)) {
-               tprintf("%lu", tcp->u_arg[0]);
-               tprintf(", %s", cmd == NULL ? "MSG_???" : cmd);
+               tprintf("%lu", tcp->u_arg[0]);
+               PRINTCTL(msgctl_flags, tcp->u_arg[1], "MSG_???");
 #ifdef LINUX
                tprintf(", %#lx", tcp->u_arg[3]);
 #else /* !LINUX */
@@ -274,7 +284,7 @@ struct tcb *tcp;
        if (entering(tcp)) {
                tprintf("%lu", tcp->u_arg[0]);
                tprintf(", %lu, ", tcp->u_arg[1]);
-               printxval(semctl_flags, tcp->u_arg[2], "SEM_???");
+               PRINTCTL(semctl_flags, tcp->u_arg[2], "SEM_???");
                tprintf(", %#lx", tcp->u_arg[3]);
        }
        return 0;
@@ -302,7 +312,7 @@ struct tcb *tcp;
 {
        if (entering(tcp)) {
                tprintf("%lu, ", tcp->u_arg[0]);
-               printxval(shmctl_flags, tcp->u_arg[1], "SHM_???");
+               PRINTCTL(shmctl_flags, tcp->u_arg[1], "SHM_???");
 #ifdef LINUX
                tprintf(", %#lx", tcp->u_arg[3]);
 #else /* !LINUX */