2007-09-22 Dmitry V. Levin <ldv@altlinux.org>

* 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.
This commit is contained in:
Roland McGrath 2007-11-01 21:50:54 +00:00
parent f17106ee78
commit 6bc09daaf6
4 changed files with 77 additions and 22 deletions

2
defs.h
View File

@ -457,6 +457,8 @@ extern void printpath P((struct tcb *, long));
extern void printpathn P((struct tcb *, long, int)); extern void printpathn P((struct tcb *, long, int));
extern void printtv_bitness P((struct tcb *, long, enum bitness_t, 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 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 #ifdef HAVE_SIGINFO_T
extern void printsiginfo P((siginfo_t *, int)); extern void printsiginfo P((siginfo_t *, int));
#endif #endif

13
desc.c
View File

@ -816,8 +816,7 @@ struct tcb *tcp;
} }
int int
sys_io_getevents(tcp) sys_io_getevents(struct tcb * tcp)
struct tcb *tcp;
{ {
if (entering(tcp)) { if (entering(tcp)) {
tprintf("%ld, %ld, %ld, ", tcp->u_arg[0], tcp->u_arg[1], tprintf("%ld, %ld, %ld, ", tcp->u_arg[0], tcp->u_arg[1],
@ -851,15 +850,7 @@ struct tcb *tcp;
#endif #endif
} }
if (tcp->u_arg[4] == 0) print_timespec(tcp, tcp->u_arg[4]);
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("{...}");
}
} }
return 0; return 0;
} }

View File

@ -417,15 +417,10 @@ decode_poll(struct tcb *tcp, long pts)
strcat(outstr, "]"); strcat(outstr, "]");
if (pts) { if (pts) {
struct timespec ts;
char str[128]; char str[128];
sprintf(str, "%sleft ", cumlen ? ", " : ""); sprintf(str, "%sleft ", cumlen ? ", " : "");
if (umove(tcp, pts, &ts) == 0) sprint_timespec(str + strlen(str), tcp, pts);
sprintf(str + strlen(str), "{%lu, %lu}",
ts.tv_sec, ts.tv_nsec);
else
strcat(str, "{...}");
if ((cumlen += strlen(str)) < sizeof(outstr)) if ((cumlen += strlen(str)) < sizeof(outstr))
strcat(outstr, str); strcat(outstr, str);
} }
@ -459,11 +454,8 @@ sys_ppoll(struct tcb *tcp)
{ {
int rc = decode_poll(tcp, tcp->u_arg[2]); int rc = decode_poll(tcp, tcp->u_arg[2]);
if (entering(tcp)) { if (entering(tcp)) {
struct timespec ts; print_timespec(tcp, tcp->u_arg[2]);
if (umove(tcp, tcp->u_arg[2], &ts) == 0) tprintf(", ");
tprintf("{%lu, %lu}, ", ts.tv_sec, ts.tv_nsec);
else
tprintf("{...}, ");
print_sigset(tcp, tcp->u_arg[3], 0); print_sigset(tcp, tcp->u_arg[3], 0);
tprintf(", %lu", tcp->u_arg[4]); tprintf(", %lu", tcp->u_arg[4]);
} }

70
time.c
View File

@ -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 int
sys_time(tcp) sys_time(tcp)
struct tcb *tcp; struct tcb *tcp;