]> granicus.if.org Git - strace/blobdiff - print_timeval.c
Print kernel_ureg_t and kernel_scno_t using dedicated format strings
[strace] / print_timeval.c
index 7722062195d645ce4730796fb66606b136dbab22..be49ff34ec5e1135e1cb48c19494cbf3388a249a 100644 (file)
@@ -47,7 +47,7 @@ MPERS_PRINTER_DECL(void, print_struct_timeval, const void *arg)
 }
 
 MPERS_PRINTER_DECL(void, print_timeval,
-                  struct tcb *tcp, const long addr)
+                  struct tcb *const tcp, const kernel_ureg_t addr)
 {
        timeval_t t;
 
@@ -57,23 +57,27 @@ MPERS_PRINTER_DECL(void, print_timeval,
        print_timeval_t(&t);
 }
 
-MPERS_PRINTER_DECL(void, print_timeval_pair,
-                  struct tcb *tcp, const long addr)
+static bool
+print_timeval_item(struct tcb *tcp, void *elem_buf, size_t size, void *data)
 {
-       timeval_t t[2];
+       timeval_t *t = elem_buf;
 
-       if (umove_or_printaddr(tcp, addr, &t))
-               return;
+       print_timeval_t(t);
 
-       tprints("[");
-       print_timeval_t(&t[0]);
-       tprints(", ");
-       print_timeval_t(&t[1]);
-       tprints("]");
+       return true;
+}
+
+MPERS_PRINTER_DECL(void, print_timeval_pair,
+                  struct tcb *const tcp, const kernel_ureg_t addr)
+{
+       timeval_t t;
+
+       print_array(tcp, addr, 2, &t, sizeof(t), umoven_or_printaddr,
+                   print_timeval_item, NULL);
 }
 
 MPERS_PRINTER_DECL(const char *, sprint_timeval,
-                  struct tcb *tcp, const long addr)
+                  struct tcb *const tcp, const kernel_ureg_t addr)
 {
        timeval_t t;
        static char buf[sizeof(timeval_fmt) + 3 * sizeof(t)];
@@ -82,7 +86,7 @@ MPERS_PRINTER_DECL(const char *, sprint_timeval,
                strcpy(buf, "NULL");
        } else if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)) ||
                   umove(tcp, addr, &t)) {
-               snprintf(buf, sizeof(buf), "%#lx", addr);
+               snprintf(buf, sizeof(buf), "%#" PRI_krx, addr);
        } else {
                snprintf(buf, sizeof(buf), timeval_fmt,
                         (intmax_t) t.tv_sec, (intmax_t) t.tv_usec);
@@ -92,7 +96,7 @@ MPERS_PRINTER_DECL(const char *, sprint_timeval,
 }
 
 MPERS_PRINTER_DECL(void, print_itimerval,
-                  struct tcb *tcp, const long addr)
+                  struct tcb *const tcp, const kernel_ureg_t addr)
 {
        timeval_t t[2];
 
@@ -115,7 +119,7 @@ print_timeval32_t(const timeval32_t *t)
 }
 
 void
-print_timeval32(struct tcb *tcp, const long addr)
+print_timeval32(struct tcb *const tcp, const kernel_ureg_t addr)
 {
        timeval32_t t;
 
@@ -126,7 +130,7 @@ print_timeval32(struct tcb *tcp, const long addr)
 }
 
 void
-print_timeval32_pair(struct tcb *tcp, const long addr)
+print_timeval32_pair(struct tcb *const tcp, const kernel_ureg_t addr)
 {
        timeval32_t t[2];
 
@@ -141,7 +145,7 @@ print_timeval32_pair(struct tcb *tcp, const long addr)
 }
 
 void
-print_itimerval32(struct tcb *tcp, const long addr)
+print_itimerval32(struct tcb *const tcp, const kernel_ureg_t addr)
 {
        timeval32_t t[2];
 
@@ -156,7 +160,7 @@ print_itimerval32(struct tcb *tcp, const long addr)
 }
 
 const char *
-sprint_timeval32(struct tcb *tcp, const long addr)
+sprint_timeval32(struct tcb *const tcp, const kernel_ureg_t addr)
 {
        timeval32_t t;
        static char buf[sizeof(timeval_fmt) + 3 * sizeof(t)];
@@ -165,7 +169,7 @@ sprint_timeval32(struct tcb *tcp, const long addr)
                strcpy(buf, "NULL");
        } else if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)) ||
                   umove(tcp, addr, &t)) {
-               snprintf(buf, sizeof(buf), "%#lx", addr);
+               snprintf(buf, sizeof(buf), "%#" PRI_krx, addr);
        } else {
                snprintf(buf, sizeof(buf), timeval_fmt,
                         (intmax_t) t.tv_sec, (intmax_t) t.tv_usec);