Convert parser of struct timespec to new mpers infrastructure
authorDmitry V. Levin <ldv@altlinux.org>
Fri, 18 Sep 2015 15:16:11 +0000 (15:16 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Sat, 19 Sep 2015 01:04:49 +0000 (04:04 +0300)
* defs.h (print_timespec): Remove.
* print_time.c (print_timespec): New mpers printer.
* futex.c (sys_futex): Use print_timespec instead of printtv.
* ipc_sem.c (sys_semtimedop): Likewise.
* mq.c (sys_mq_timedsend, sys_mq_timedreceive): Likewise.
* time.c (clock_settime, clock_gettime, clock_nanosleep): Likewise.
(print_timespec): Remove.

defs.h
futex.c
ipc_sem.c
mq.c
print_time.c
time.c

diff --git a/defs.h b/defs.h
index b7e008068a253edc747bee69534da7d2f1da5625..5368390d1152a2e5f3fb29793ff69a64df157c7b 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -655,7 +655,6 @@ extern void printtv_bitness(struct tcb *, long, enum bitness_t, int);
 #define printtv_special(tcp, addr)     \
        printtv_bitness((tcp), (addr), BITNESS_CURRENT, 1)
 extern char *sprinttv(char *, struct tcb *, long, enum bitness_t, int special);
-extern void print_timespec(struct tcb *, long);
 extern void sprint_timespec(char *, struct tcb *, long);
 extern void printfd(struct tcb *, int);
 extern bool print_sockaddr_by_inode(const unsigned long, const char *);
diff --git a/futex.c b/futex.c
index f8505e6080117809a6a4a22fb2103e91688a6224..f492186a9a98f1f874e23a19218ee051b5c7a556 100644 (file)
--- a/futex.c
+++ b/futex.c
@@ -34,11 +34,11 @@ SYS_FUNC(futex)
        case FUTEX_WAIT:
        case FUTEX_LOCK_PI:
                tprints(", ");
-               printtv(tcp, timeout);
+               print_timespec(tcp, timeout);
                break;
        case FUTEX_WAIT_BITSET:
                tprints(", ");
-               printtv(tcp, timeout);
+               print_timespec(tcp, timeout);
                tprintf(", %x", val3);
                break;
        case FUTEX_WAKE_BITSET:
@@ -69,7 +69,7 @@ SYS_FUNC(futex)
                break;
        case FUTEX_WAIT_REQUEUE_PI:
                tprints(", ");
-               printtv(tcp, timeout);
+               print_timespec(tcp, timeout);
                tprints(", ");
                printaddr(uaddr2);
                break;
index 82d47623a8e0152473121748370175e228e645da..e98f8ef6aa2a6ea3c7c3cb6fe83300f05d8eb107 100644 (file)
--- a/ipc_sem.c
+++ b/ipc_sem.c
@@ -99,14 +99,14 @@ SYS_FUNC(semtimedop)
                tprint_sembuf_array(tcp, tcp->u_arg[3], tcp->u_arg[1]);
                tprints(", ");
 #if defined(S390) || defined(S390X)
-               printtv(tcp, tcp->u_arg[2]);
+               print_timespec(tcp, tcp->u_arg[2]);
 #else
-               printtv(tcp, tcp->u_arg[4]);
+               print_timespec(tcp, tcp->u_arg[4]);
 #endif
        } else {
                tprint_sembuf_array(tcp, tcp->u_arg[1], tcp->u_arg[2]);
                tprints(", ");
-               printtv(tcp, tcp->u_arg[3]);
+               print_timespec(tcp, tcp->u_arg[3]);
        }
        return RVAL_DECODED;
 }
diff --git a/mq.c b/mq.c
index a0af211588c1332189999cb5b2b42c5e63b559b1..e12eef7c6ab3e25d672d508364a39e5e529a2131 100644 (file)
--- a/mq.c
+++ b/mq.c
@@ -48,7 +48,7 @@ SYS_FUNC(mq_timedsend)
        tprintf("%ld, ", tcp->u_arg[0]);
        printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]);
        tprintf(", %lu, %ld, ", tcp->u_arg[2], tcp->u_arg[3]);
-       printtv(tcp, tcp->u_arg[4]);
+       print_timespec(tcp, tcp->u_arg[4]);
        return RVAL_DECODED;
 }
 
@@ -65,7 +65,7 @@ SYS_FUNC(mq_timedreceive)
                 * whether the syscall has failed or not.
                 */
                temporarily_clear_syserror(tcp);
-               printtv(tcp, tcp->u_arg[4]);
+               print_timespec(tcp, tcp->u_arg[4]);
                restore_cleared_syserror(tcp);
        }
        return 0;
index 147e018e433c38cc3aae0c1d6d021b0e5c588986..f9caf26a8b31f048424067edbcd0be05e4607c07 100644 (file)
@@ -46,6 +46,16 @@ print_timeval_t(const timeval_t *t)
        tprintf(time_fmt, (intmax_t) t->tv_sec, (intmax_t) t->tv_usec);
 }
 
+MPERS_PRINTER_DECL(void, print_timespec)(struct tcb *tcp, const long addr)
+{
+       timespec_t t;
+
+       if (umove_or_printaddr(tcp, addr, &t))
+               return;
+
+       print_timespec_t(&t);
+}
+
 MPERS_PRINTER_DECL(void, print_timespec_utime_pair)(struct tcb *tcp, const long addr)
 {
        timespec_t t[2];
diff --git a/time.c b/time.c
index 790a343ff19833c0f133eea54083403a375a41fc..8e5abab40c63d4151b7f7d33d7a30f458c4577dc 100644 (file)
--- a/time.c
+++ b/time.c
@@ -102,14 +102,6 @@ sprinttv(char *buf, struct tcb *tcp, long addr, enum bitness_t bitness, int spec
        return buf + sprintf(buf, "%#lx", addr);
 }
 
-void
-print_timespec(struct tcb *tcp, long addr)
-{
-       char buf[TIMESPEC_TEXT_BUFSIZE];
-       sprint_timespec(buf, tcp, addr);
-       tprints(buf);
-}
-
 void
 sprint_timespec(char *buf, struct tcb *tcp, long addr)
 {
@@ -314,7 +306,7 @@ SYS_FUNC(clock_settime)
 {
        printclockname(tcp->u_arg[0]);
        tprints(", ");
-       printtv(tcp, tcp->u_arg[1]);
+       print_timespec(tcp, tcp->u_arg[1]);
 
        return RVAL_DECODED;
 }
@@ -325,7 +317,7 @@ SYS_FUNC(clock_gettime)
                printclockname(tcp->u_arg[0]);
                tprints(", ");
        } else {
-               printtv(tcp, tcp->u_arg[1]);
+               print_timespec(tcp, tcp->u_arg[1]);
        }
        return 0;
 }
@@ -337,7 +329,7 @@ SYS_FUNC(clock_nanosleep)
                tprints(", ");
                printflags(clockflags, tcp->u_arg[1], "TIMER_???");
                tprints(", ");
-               printtv(tcp, tcp->u_arg[2]);
+               print_timespec(tcp, tcp->u_arg[2]);
                tprints(", ");
        } else {
                /*
@@ -346,7 +338,7 @@ SYS_FUNC(clock_nanosleep)
                 */
                if (!tcp->u_arg[1] && is_erestart(tcp)) {
                        temporarily_clear_syserror(tcp);
-                       printtv(tcp, tcp->u_arg[3]);
+                       print_timespec(tcp, tcp->u_arg[3]);
                        restore_cleared_syserror(tcp);
                } else {
                        printaddr(tcp->u_arg[3]);