From c88163e5bd3673892abfb2e0792d35eca93d087f Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Sun, 5 Jul 2015 22:09:29 +0000 Subject: [PATCH] Add two generic integer printing functions Add printnum_short and printnum_int64 in addition to already existing printnum_int and printnum_long. * defs.h (printnum_short, printnum_int64): New prototypes. * util.c (DEF_PRINTNUM): New macro. (printnum_int, printnum_long): Use DEF_PRINTNUM. (printnum_short, printnum_int64): New functions. --- defs.h | 8 ++++++++ util.c | 53 ++++++++++++++++++++--------------------------------- 2 files changed, 28 insertions(+), 33 deletions(-) diff --git a/defs.h b/defs.h index 9afba0d4..35a86e00 100644 --- a/defs.h +++ b/defs.h @@ -529,10 +529,18 @@ extern void dumpiov_in_mmsghdr(struct tcb *, long); extern void dumpiov(struct tcb *, int, long); extern void dumpstr(struct tcb *, long, int); extern void printstr(struct tcb *, long, long); +extern void printnum_short(struct tcb *, long, const char *) + ATTRIBUTE_FORMAT((printf, 3, 0)); extern void printnum_int(struct tcb *, long, const char *) ATTRIBUTE_FORMAT((printf, 3, 0)); extern void printnum_long(struct tcb *, long, const char *) ATTRIBUTE_FORMAT((printf, 3, 0)); +#if SIZEOF_LONG == 8 +# define printnum_int64 printnum_long +#else +extern void printnum_int64(struct tcb *, long, const char *) + ATTRIBUTE_FORMAT((printf, 3, 0)); +#endif extern void printpath(struct tcb *, long); extern void printpathn(struct tcb *, long, unsigned int); #define TIMESPEC_TEXT_BUFSIZE (sizeof(long)*3 * 2 + sizeof("{%u, %u}")) diff --git a/util.c b/util.c index 04d13cb0..98c624b0 100644 --- a/util.c +++ b/util.c @@ -384,41 +384,28 @@ printaddr(const long addr) tprintf("%#lx", addr); } -void -printnum_long(struct tcb *tcp, long addr, const char *fmt) -{ - long num; - - if (!addr) { - tprints("NULL"); - return; - } - if (umove(tcp, addr, &num) < 0) { - tprintf("%#lx", addr); - return; - } - tprints("["); - tprintf(fmt, num); - tprints("]"); +#define DEF_PRINTNUM(name, type) \ +void \ +printnum_ ## name(struct tcb *tcp, const long addr, const char *fmt) \ +{ \ + type num; \ + if (!addr) \ + tprints("NULL"); \ + else if (umove(tcp, addr, &num) < 0) \ + tprintf("%#lx", addr); \ + else { \ + tprints("["); \ + tprintf(fmt, num); \ + tprints("]"); \ + } \ } -void -printnum_int(struct tcb *tcp, long addr, const char *fmt) -{ - int num; - - if (!addr) { - tprints("NULL"); - return; - } - if (umove(tcp, addr, &num) < 0) { - tprintf("%#lx", addr); - return; - } - tprints("["); - tprintf(fmt, num); - tprints("]"); -} +DEF_PRINTNUM(long, long) +DEF_PRINTNUM(int, int) +DEF_PRINTNUM(short, short) +#if SIZEOF_LONG != 8 +DEF_PRINTNUM(int64, uint64_t) +#endif const char * sprinttime(time_t t) -- 2.40.0