From 5f6a839d23f126efd7ccd63011e6bd84c8e4ef5f Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Mon, 28 Nov 2016 02:45:13 +0000 Subject: [PATCH] Split print_time.c After commit v4.14-136-g151d1d1 that removed the last object common for timespec and timeval parsers there is no need to keep them all in a single file. * print_timespec.c: New file. * print_timeval.c: Likewise. * Makefile.am (strace_SOURCES): Add them. * print_time.c: Move all timespec related code to print_timespec.c. Move all timeval related code to print_timeval.c. --- Makefile.am | 2 + print_time.c | 239 +---------------------------------------------- print_timespec.c | 125 +++++++++++++++++++++++++ print_timeval.c | 176 ++++++++++++++++++++++++++++++++++ 4 files changed, 304 insertions(+), 238 deletions(-) create mode 100644 print_timespec.c create mode 100644 print_timeval.c diff --git a/Makefile.am b/Makefile.am index 80e80fcc..336fb9b0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -184,6 +184,8 @@ strace_SOURCES = \ print_statfs.c \ print_struct_stat.c \ print_time.c \ + print_timespec.c \ + print_timeval.c \ print_timex.c \ printmode.c \ printrusage.c \ diff --git a/print_time.c b/print_time.c index 34c1c304..82d64fa2 100644 --- a/print_time.c +++ b/print_time.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Dmitry V. Levin + * Copyright (c) 2015-2016 Dmitry V. Levin * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -28,172 +28,9 @@ #include "defs.h" #include DEF_MPERS_TYPE(time_t) -#include DEF_MPERS_TYPE(timespec_t) -#include DEF_MPERS_TYPE(timeval_t) - -typedef struct timespec timespec_t; -typedef struct timeval timeval_t; #include MPERS_DEFS -#ifndef UTIME_NOW -# define UTIME_NOW ((1l << 30) - 1l) -#endif -#ifndef UTIME_OMIT -# define UTIME_OMIT ((1l << 30) - 2l) -#endif - -static const char timespec_fmt[] = "{tv_sec=%jd, tv_nsec=%jd}"; -static const char timeval_fmt[] = "{tv_sec=%jd, tv_usec=%jd}"; - -static void -print_timespec_t(const timespec_t *t) -{ - tprintf(timespec_fmt, (intmax_t) t->tv_sec, (intmax_t) t->tv_nsec); -} - -static void -print_timespec_t_utime(const timespec_t *t) -{ - switch (t->tv_nsec) { - case UTIME_NOW: - tprints("UTIME_NOW"); - break; - case UTIME_OMIT: - tprints("UTIME_OMIT"); - break; - default: - print_timespec_t(t); - break; - } -} - -static void -print_timeval_t(const timeval_t *t) -{ - tprintf(timeval_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(const char *, sprint_timespec, - struct tcb *tcp, const long addr) -{ - timespec_t t; - static char buf[sizeof(timespec_fmt) + 3 * sizeof(t)]; - - if (!addr) { - strcpy(buf, "NULL"); - } else if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)) || - umove(tcp, addr, &t)) { - snprintf(buf, sizeof(buf), "%#lx", addr); - } else { - snprintf(buf, sizeof(buf), timespec_fmt, - (intmax_t) t.tv_sec, (intmax_t) t.tv_nsec); - } - - return buf; -} - -MPERS_PRINTER_DECL(void, print_timespec_utime_pair, - struct tcb *tcp, const long addr) -{ - timespec_t t[2]; - - if (umove_or_printaddr(tcp, addr, &t)) - return; - - tprints("["); - print_timespec_t_utime(&t[0]); - tprints(", "); - print_timespec_t_utime(&t[1]); - tprints("]"); -} - -MPERS_PRINTER_DECL(void, print_itimerspec, - struct tcb *tcp, const long addr) -{ - timespec_t t[2]; - - if (umove_or_printaddr(tcp, addr, &t)) - return; - - tprints("{it_interval="); - print_timespec_t(&t[0]); - tprints(", it_value="); - print_timespec_t(&t[1]); - tprints("}"); -} - -MPERS_PRINTER_DECL(void, print_timeval, - struct tcb *tcp, const long addr) -{ - timeval_t t; - - if (umove_or_printaddr(tcp, addr, &t)) - return; - - print_timeval_t(&t); -} - -MPERS_PRINTER_DECL(void, print_timeval_pair, - struct tcb *tcp, const long addr) -{ - timeval_t t[2]; - - if (umove_or_printaddr(tcp, addr, &t)) - return; - - tprints("["); - print_timeval_t(&t[0]); - tprints(", "); - print_timeval_t(&t[1]); - tprints("]"); -} - -MPERS_PRINTER_DECL(const char *, sprint_timeval, - struct tcb *tcp, const long addr) -{ - timeval_t t; - static char buf[sizeof(timeval_fmt) + 3 * sizeof(t)]; - - if (!addr) { - strcpy(buf, "NULL"); - } else if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)) || - umove(tcp, addr, &t)) { - snprintf(buf, sizeof(buf), "%#lx", addr); - } else { - snprintf(buf, sizeof(buf), timeval_fmt, - (intmax_t) t.tv_sec, (intmax_t) t.tv_usec); - } - - return buf; -} - -MPERS_PRINTER_DECL(void, print_itimerval, - struct tcb *tcp, const long addr) -{ - timeval_t t[2]; - - if (umove_or_printaddr(tcp, addr, &t)) - return; - - tprints("{it_interval="); - print_timeval_t(&t[0]); - tprints(", it_value="); - print_timeval_t(&t[1]); - tprints("}"); -} - SYS_FUNC(time) { if (exiting(tcp)) { @@ -205,77 +42,3 @@ SYS_FUNC(time) return 0; } - -#ifdef ALPHA - -typedef struct { - int tv_sec, tv_usec; -} timeval32_t; - -static void -print_timeval32_t(const timeval32_t *t) -{ - tprintf(timeval_fmt, (intmax_t) t->tv_sec, (intmax_t) t->tv_usec); -} - -void -print_timeval32(struct tcb *tcp, const long addr) -{ - timeval32_t t; - - if (umove_or_printaddr(tcp, addr, &t)) - return; - - print_timeval32_t(&t); -} - -void -print_timeval32_pair(struct tcb *tcp, const long addr) -{ - timeval32_t t[2]; - - if (umove_or_printaddr(tcp, addr, &t)) - return; - - tprints("["); - print_timeval32_t(&t[0]); - tprints(", "); - print_timeval32_t(&t[1]); - tprints("]"); -} - -void -print_itimerval32(struct tcb *tcp, const long addr) -{ - timeval32_t t[2]; - - if (umove_or_printaddr(tcp, addr, &t)) - return; - - tprints("{it_interval="); - print_timeval32_t(&t[0]); - tprints(", it_value="); - print_timeval32_t(&t[1]); - tprints("}"); -} - -const char * -sprint_timeval32(struct tcb *tcp, const long addr) -{ - timeval32_t t; - static char buf[sizeof(timeval_fmt) + 3 * sizeof(t)]; - - if (!addr) { - strcpy(buf, "NULL"); - } else if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)) || - umove(tcp, addr, &t)) { - snprintf(buf, sizeof(buf), "%#lx", addr); - } else { - snprintf(buf, sizeof(buf), timeval_fmt, - (intmax_t) t.tv_sec, (intmax_t) t.tv_usec); - } - - return buf; -} - -#endif /* ALPHA */ diff --git a/print_timespec.c b/print_timespec.c new file mode 100644 index 00000000..ee16cf87 --- /dev/null +++ b/print_timespec.c @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2015-2016 Dmitry V. Levin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "defs.h" + +#include DEF_MPERS_TYPE(timespec_t) + +typedef struct timespec timespec_t; + +#include MPERS_DEFS + +#ifndef UTIME_NOW +# define UTIME_NOW ((1l << 30) - 1l) +#endif +#ifndef UTIME_OMIT +# define UTIME_OMIT ((1l << 30) - 2l) +#endif + +static const char timespec_fmt[] = "{tv_sec=%jd, tv_nsec=%jd}"; + +static void +print_timespec_t(const timespec_t *t) +{ + tprintf(timespec_fmt, (intmax_t) t->tv_sec, (intmax_t) t->tv_nsec); +} + +static void +print_timespec_t_utime(const timespec_t *t) +{ + switch (t->tv_nsec) { + case UTIME_NOW: + tprints("UTIME_NOW"); + break; + case UTIME_OMIT: + tprints("UTIME_OMIT"); + break; + default: + print_timespec_t(t); + break; + } +} + +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(const char *, sprint_timespec, + struct tcb *tcp, const long addr) +{ + timespec_t t; + static char buf[sizeof(timespec_fmt) + 3 * sizeof(t)]; + + if (!addr) { + strcpy(buf, "NULL"); + } else if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)) || + umove(tcp, addr, &t)) { + snprintf(buf, sizeof(buf), "%#lx", addr); + } else { + snprintf(buf, sizeof(buf), timespec_fmt, + (intmax_t) t.tv_sec, (intmax_t) t.tv_nsec); + } + + return buf; +} + +MPERS_PRINTER_DECL(void, print_timespec_utime_pair, + struct tcb *tcp, const long addr) +{ + timespec_t t[2]; + + if (umove_or_printaddr(tcp, addr, &t)) + return; + + tprints("["); + print_timespec_t_utime(&t[0]); + tprints(", "); + print_timespec_t_utime(&t[1]); + tprints("]"); +} + +MPERS_PRINTER_DECL(void, print_itimerspec, + struct tcb *tcp, const long addr) +{ + timespec_t t[2]; + + if (umove_or_printaddr(tcp, addr, &t)) + return; + + tprints("{it_interval="); + print_timespec_t(&t[0]); + tprints(", it_value="); + print_timespec_t(&t[1]); + tprints("}"); +} diff --git a/print_timeval.c b/print_timeval.c new file mode 100644 index 00000000..ca943949 --- /dev/null +++ b/print_timeval.c @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2015-2016 Dmitry V. Levin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "defs.h" + +#include DEF_MPERS_TYPE(timeval_t) + +typedef struct timeval timeval_t; + +#include MPERS_DEFS + +static const char timeval_fmt[] = "{tv_sec=%jd, tv_usec=%jd}"; + +static void +print_timeval_t(const timeval_t *t) +{ + tprintf(timeval_fmt, (intmax_t) t->tv_sec, (intmax_t) t->tv_usec); +} + +MPERS_PRINTER_DECL(void, print_timeval, + struct tcb *tcp, const long addr) +{ + timeval_t t; + + if (umove_or_printaddr(tcp, addr, &t)) + return; + + print_timeval_t(&t); +} + +MPERS_PRINTER_DECL(void, print_timeval_pair, + struct tcb *tcp, const long addr) +{ + timeval_t t[2]; + + if (umove_or_printaddr(tcp, addr, &t)) + return; + + tprints("["); + print_timeval_t(&t[0]); + tprints(", "); + print_timeval_t(&t[1]); + tprints("]"); +} + +MPERS_PRINTER_DECL(const char *, sprint_timeval, + struct tcb *tcp, const long addr) +{ + timeval_t t; + static char buf[sizeof(timeval_fmt) + 3 * sizeof(t)]; + + if (!addr) { + strcpy(buf, "NULL"); + } else if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)) || + umove(tcp, addr, &t)) { + snprintf(buf, sizeof(buf), "%#lx", addr); + } else { + snprintf(buf, sizeof(buf), timeval_fmt, + (intmax_t) t.tv_sec, (intmax_t) t.tv_usec); + } + + return buf; +} + +MPERS_PRINTER_DECL(void, print_itimerval, + struct tcb *tcp, const long addr) +{ + timeval_t t[2]; + + if (umove_or_printaddr(tcp, addr, &t)) + return; + + tprints("{it_interval="); + print_timeval_t(&t[0]); + tprints(", it_value="); + print_timeval_t(&t[1]); + tprints("}"); +} + +#ifdef ALPHA + +typedef struct { + int tv_sec, tv_usec; +} timeval32_t; + +static void +print_timeval32_t(const timeval32_t *t) +{ + tprintf(timeval_fmt, (intmax_t) t->tv_sec, (intmax_t) t->tv_usec); +} + +void +print_timeval32(struct tcb *tcp, const long addr) +{ + timeval32_t t; + + if (umove_or_printaddr(tcp, addr, &t)) + return; + + print_timeval32_t(&t); +} + +void +print_timeval32_pair(struct tcb *tcp, const long addr) +{ + timeval32_t t[2]; + + if (umove_or_printaddr(tcp, addr, &t)) + return; + + tprints("["); + print_timeval32_t(&t[0]); + tprints(", "); + print_timeval32_t(&t[1]); + tprints("]"); +} + +void +print_itimerval32(struct tcb *tcp, const long addr) +{ + timeval32_t t[2]; + + if (umove_or_printaddr(tcp, addr, &t)) + return; + + tprints("{it_interval="); + print_timeval32_t(&t[0]); + tprints(", it_value="); + print_timeval32_t(&t[1]); + tprints("}"); +} + +const char * +sprint_timeval32(struct tcb *tcp, const long addr) +{ + timeval32_t t; + static char buf[sizeof(timeval_fmt) + 3 * sizeof(t)]; + + if (!addr) { + strcpy(buf, "NULL"); + } else if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)) || + umove(tcp, addr, &t)) { + snprintf(buf, sizeof(buf), "%#lx", addr); + } else { + snprintf(buf, sizeof(buf), timeval_fmt, + (intmax_t) t.tv_sec, (intmax_t) t.tv_usec); + } + + return buf; +} + +#endif /* ALPHA */