]> granicus.if.org Git - strace/blobdiff - time.c
nlattr: add UID/GID netlink attribute decoders
[strace] / time.c
diff --git a/time.c b/time.c
index c98862d8cf2453df0c97eda4f8fc0161f5a22e77..1f44dca714e0693f25509a59635b73fee7b31ca3 100644 (file)
--- a/time.c
+++ b/time.c
@@ -2,6 +2,7 @@
  * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
  * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
  * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+ * Copyright (c) 1996-2018 The strace developers.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -33,7 +34,7 @@
 #include <sys/timex.h>
 
 static void
-print_timezone(struct tcb *tcp, const long addr)
+print_timezone(struct tcb *const tcp, const kernel_ulong_t addr)
 {
        struct timezone tz;
 
@@ -115,7 +116,8 @@ SYS_FUNC(nanosleep)
 SYS_FUNC(getitimer)
 {
        if (entering(tcp)) {
-               printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
+               printxval_index(itimer_which, (unsigned int) tcp->u_arg[0],
+                               "ITIMER_???");
                tprints(", ");
        } else {
                print_itimerval(tcp, tcp->u_arg[1]);
@@ -127,7 +129,8 @@ SYS_FUNC(getitimer)
 SYS_FUNC(osf_getitimer)
 {
        if (entering(tcp)) {
-               printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
+               printxval_index(itimer_which, (unsigned int) tcp->u_arg[0],
+                               "ITIMER_???");
                tprints(", ");
        } else {
                print_itimerval32(tcp, tcp->u_arg[1]);
@@ -139,7 +142,8 @@ SYS_FUNC(osf_getitimer)
 SYS_FUNC(setitimer)
 {
        if (entering(tcp)) {
-               printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
+               printxval_index(itimer_which, (unsigned int) tcp->u_arg[0],
+                               "ITIMER_???");
                tprints(", ");
                print_itimerval(tcp, tcp->u_arg[1]);
                tprints(", ");
@@ -153,7 +157,8 @@ SYS_FUNC(setitimer)
 SYS_FUNC(osf_setitimer)
 {
        if (entering(tcp)) {
-               printxval(itimer_which, tcp->u_arg[0], "ITIMER_???");
+               printxval_index(itimer_which, (unsigned int) tcp->u_arg[0],
+                               "ITIMER_???");
                tprints(", ");
                print_itimerval32(tcp, tcp->u_arg[1]);
                tprints(", ");
@@ -167,14 +172,13 @@ SYS_FUNC(osf_setitimer)
 #include "xlat/adjtimex_state.h"
 
 static int
-do_adjtimex(struct tcb *tcp, long addr)
+do_adjtimex(struct tcb *const tcp, const kernel_ulong_t addr)
 {
        if (print_timex(tcp, addr))
                return 0;
-       tcp->auxstr = xlookup(adjtimex_state, tcp->u_rval);
-       if (tcp->auxstr)
-               return RVAL_STR;
-       return 0;
+       tcp->auxstr = xlat_idx(adjtimex_state, ARRAY_SIZE(adjtimex_state) - 1,
+                              (kernel_ulong_t) tcp->u_rval);
+       return RVAL_STR;
 }
 
 SYS_FUNC(adjtimex)
@@ -197,17 +201,19 @@ printclockname(int clockid)
                if ((clockid & CLOCKFD_MASK) == CLOCKFD)
                        tprintf("FD_TO_CLOCKID(%d)", CLOCKID_TO_FD(clockid));
                else {
-                       if(CPUCLOCK_PERTHREAD(clockid))
-                               tprintf("MAKE_THREAD_CPUCLOCK(%d,", CPUCLOCK_PID(clockid));
-                       else
-                               tprintf("MAKE_PROCESS_CPUCLOCK(%d,", CPUCLOCK_PID(clockid));
-                       printxval(cpuclocknames, clockid & CLOCKFD_MASK, "CPUCLOCK_???");
+                       tprintf("%s(%d,",
+                               CPUCLOCK_PERTHREAD(clockid) ?
+                                       "MAKE_THREAD_CPUCLOCK" :
+                                       "MAKE_PROCESS_CPUCLOCK",
+                               CPUCLOCK_PID(clockid));
+                       printxval_index(cpuclocknames,
+                                       (unsigned int) clockid & CLOCKFD_MASK,
+                                       "CPUCLOCK_???");
                        tprints(")");
                }
-       }
-       else
+       } else
 #endif
-               printxval(clocknames, clockid, "CLOCK_???");
+               printxval_index(clocknames, clockid, "CLOCK_???");
 }
 
 SYS_FUNC(clock_settime)
@@ -303,18 +309,6 @@ SYS_FUNC(timer_gettime)
 
 #include "xlat/timerfdflags.h"
 
-SYS_FUNC(timerfd)
-{
-       tprintf("%ld, ", tcp->u_arg[0]);
-       printclockname(tcp->u_arg[0]);
-       tprints(", ");
-       printflags(timerfdflags, tcp->u_arg[2], "TFD_???");
-       tprints(", ");
-       print_itimerspec(tcp, tcp->u_arg[3]);
-
-       return RVAL_DECODED | RVAL_FD;
-}
-
 SYS_FUNC(timerfd_create)
 {
        printclockname(tcp->u_arg[0]);
@@ -326,15 +320,17 @@ SYS_FUNC(timerfd_create)
 
 SYS_FUNC(timerfd_settime)
 {
-       printfd(tcp, tcp->u_arg[0]);
-       tprints(", ");
-       printflags(timerfdflags, tcp->u_arg[1], "TFD_???");
-       tprints(", ");
-       print_itimerspec(tcp, tcp->u_arg[2]);
-       tprints(", ");
-       print_itimerspec(tcp, tcp->u_arg[3]);
-
-       return RVAL_DECODED;
+       if (entering(tcp)) {
+               printfd(tcp, tcp->u_arg[0]);
+               tprints(", ");
+               printflags(timerfdflags, tcp->u_arg[1], "TFD_???");
+               tprints(", ");
+               print_itimerspec(tcp, tcp->u_arg[2]);
+               tprints(", ");
+       } else {
+               print_itimerspec(tcp, tcp->u_arg[3]);
+       }
+       return 0;
 }
 
 SYS_FUNC(timerfd_gettime)