From 6bc09daaf6b249b35dec4283b165b1f39e6d6a0d Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Thu, 1 Nov 2007 21:50:54 +0000 Subject: [PATCH] 2007-09-22 Dmitry V. Levin * time.c (print_timespec, sprint_timespec): New functions. * defs.h (print_timespec, sprint_timespec): Declare them. * desc.c (sys_io_getevents): Use print_timespec. * stream.c (sys_ppoll): Likewise. (decode_poll): Use sprint_timespec. --- defs.h | 2 ++ desc.c | 13 ++--------- stream.c | 14 +++--------- time.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+), 22 deletions(-) diff --git a/defs.h b/defs.h index 2905a33c..d8c1710b 100644 --- a/defs.h +++ b/defs.h @@ -457,6 +457,8 @@ extern void printpath P((struct tcb *, long)); extern void printpathn P((struct tcb *, long, int)); extern void printtv_bitness P((struct tcb *, long, enum bitness_t, int)); extern void sprinttv P((struct tcb *, long, enum bitness_t, char *)); +extern void print_timespec P((struct tcb *, long)); +extern void sprint_timespec P((char *, struct tcb *, long)); #ifdef HAVE_SIGINFO_T extern void printsiginfo P((siginfo_t *, int)); #endif diff --git a/desc.c b/desc.c index 47aa92c8..43bab648 100644 --- a/desc.c +++ b/desc.c @@ -816,8 +816,7 @@ struct tcb *tcp; } int -sys_io_getevents(tcp) -struct tcb *tcp; +sys_io_getevents(struct tcb * tcp) { if (entering(tcp)) { tprintf("%ld, %ld, %ld, ", tcp->u_arg[0], tcp->u_arg[1], @@ -851,15 +850,7 @@ struct tcb *tcp; #endif } - if (tcp->u_arg[4] == 0) - tprintf("NULL"); - else { - struct timespec to; - if (umove(tcp, tcp->u_arg[4], &to) == 0) - tprintf("{%lu, %lu}", to.tv_sec, to.tv_nsec); - else - tprintf("{...}"); - } + print_timespec(tcp, tcp->u_arg[4]); } return 0; } diff --git a/stream.c b/stream.c index dfdfdb2f..e97392cc 100644 --- a/stream.c +++ b/stream.c @@ -417,15 +417,10 @@ decode_poll(struct tcb *tcp, long pts) strcat(outstr, "]"); if (pts) { - struct timespec ts; char str[128]; sprintf(str, "%sleft ", cumlen ? ", " : ""); - if (umove(tcp, pts, &ts) == 0) - sprintf(str + strlen(str), "{%lu, %lu}", - ts.tv_sec, ts.tv_nsec); - else - strcat(str, "{...}"); + sprint_timespec(str + strlen(str), tcp, pts); if ((cumlen += strlen(str)) < sizeof(outstr)) strcat(outstr, str); } @@ -459,11 +454,8 @@ sys_ppoll(struct tcb *tcp) { int rc = decode_poll(tcp, tcp->u_arg[2]); if (entering(tcp)) { - struct timespec ts; - if (umove(tcp, tcp->u_arg[2], &ts) == 0) - tprintf("{%lu, %lu}, ", ts.tv_sec, ts.tv_nsec); - else - tprintf("{...}, "); + print_timespec(tcp, tcp->u_arg[2]); + tprintf(", "); print_sigset(tcp, tcp->u_arg[3], 0); tprintf(", %lu", tcp->u_arg[4]); } diff --git a/time.c b/time.c index ce309b68..676aace4 100644 --- a/time.c +++ b/time.c @@ -150,6 +150,76 @@ sprinttv(struct tcb *tcp, long addr, enum bitness_t bitness, char *buf) } } +void print_timespec (struct tcb *tcp, long addr) +{ + if (addr == 0) + tprintf("NULL"); + else if (!verbose(tcp)) + tprintf("%#lx", addr); + else { + int rc; + +#if defined(LINUX) && SUPPORTED_PERSONALITIES > 1 + if (personality_wordsize[current_personality] == 4) + { + struct timeval32 tv; + + if ((rc = umove(tcp, addr, &tv)) >= 0) + tprintf("{%u, %u}", + tv.tv_sec, tv.tv_usec); + } else + { +#endif + struct timespec ts; + + if ((rc = umove(tcp, addr, &ts)) >= 0) + tprintf("{%lu, %lu}", + (unsigned long) ts.tv_sec, + (unsigned long) ts.tv_nsec); +#if defined(LINUX) && SUPPORTED_PERSONALITIES > 1 + } +#endif + + if (rc < 0) + tprintf("{...}"); + } +} + +void sprint_timespec (char *buf, struct tcb *tcp, long addr) +{ + if (addr == 0) + strcpy(buf, "NULL"); + else if (!verbose(tcp)) + sprintf(buf, "%#lx", addr); + else { + int rc; + +#if defined(LINUX) && SUPPORTED_PERSONALITIES > 1 + if (personality_wordsize[current_personality] == 4) + { + struct timeval32 tv; + + if ((rc = umove(tcp, addr, &tv)) >= 0) + sprintf(buf, "{%u, %u}", + tv.tv_sec, tv.tv_usec); + } else + { +#endif + struct timespec ts; + + if ((rc = umove(tcp, addr, &ts)) >= 0) + sprintf(buf, "{%lu, %lu}", + (unsigned long) ts.tv_sec, + (unsigned long) ts.tv_nsec); +#if defined(LINUX) && SUPPORTED_PERSONALITIES > 1 + } +#endif + + if (rc < 0) + strcpy(buf, "{...}"); + } +} + int sys_time(tcp) struct tcb *tcp;