From d77f6693e47084a72669c70bb28ed703269fcc25 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Tue, 18 Aug 2015 21:57:27 +0000 Subject: [PATCH] Make printnum_* functions return boolean status With this change, printnum_* functions return true iff they successfully fetched necessary data from tracee's memory. * defs.h (printnum_short, printnum_int, printnum_int64, printnum_long_int, printpair_int, printpair_int64): Return bool. * util.c (DEF_PRINTNUM, DEF_PRINTPAIR, printnum_long_int): Likewise. --- defs.h | 12 ++++++------ util.c | 36 +++++++++++++++++++----------------- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/defs.h b/defs.h index 857175de..e8a2a0da 100644 --- a/defs.h +++ b/defs.h @@ -530,15 +530,15 @@ 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 *) +extern bool printnum_short(struct tcb *, long, const char *) ATTRIBUTE_FORMAT((printf, 3, 0)); -extern void printnum_int(struct tcb *, long, const char *) +extern bool printnum_int(struct tcb *, long, const char *) ATTRIBUTE_FORMAT((printf, 3, 0)); -extern void printnum_int64(struct tcb *, long, const char *) +extern bool printnum_int64(struct tcb *, long, const char *) ATTRIBUTE_FORMAT((printf, 3, 0)); #if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 -extern void printnum_long_int(struct tcb *, long, const char *, const char *) +extern bool printnum_long_int(struct tcb *, long, const char *, const char *) ATTRIBUTE_FORMAT((printf, 3, 0)) ATTRIBUTE_FORMAT((printf, 4, 0)); # define printnum_slong(tcp, addr) \ @@ -563,9 +563,9 @@ extern void printnum_long_int(struct tcb *, long, const char *, const char *) printnum_int((tcp), (addr), "%#x") #endif -extern void printpair_int(struct tcb *, long, const char *) +extern bool printpair_int(struct tcb *, long, const char *) ATTRIBUTE_FORMAT((printf, 3, 0)); -extern void printpair_int64(struct tcb *, long, const char *) +extern bool printpair_int64(struct tcb *, long, const char *) ATTRIBUTE_FORMAT((printf, 3, 0)); extern void printpath(struct tcb *, long); extern void printpathn(struct tcb *, long, unsigned int); diff --git a/util.c b/util.c index 2a22cacc..81387891 100644 --- a/util.c +++ b/util.c @@ -385,29 +385,31 @@ printaddr(const long addr) } #define DEF_PRINTNUM(name, type) \ -void \ +bool \ printnum_ ## name(struct tcb *tcp, const long addr, const char *fmt) \ { \ type num; \ - if (!umove_or_printaddr(tcp, addr, &num)) { \ - tprints("["); \ - tprintf(fmt, num); \ - tprints("]"); \ - } \ + if (umove_or_printaddr(tcp, addr, &num)) \ + return false; \ + tprints("["); \ + tprintf(fmt, num); \ + tprints("]"); \ + return true; \ } #define DEF_PRINTPAIR(name, type) \ -void \ +bool \ printpair_ ## name(struct tcb *tcp, const long addr, const char *fmt) \ { \ type pair[2]; \ - if (!umove_or_printaddr(tcp, addr, &pair)) { \ - tprints("["); \ - tprintf(fmt, pair[0]); \ - tprints(", "); \ - tprintf(fmt, pair[1]); \ - tprints("]"); \ - } \ + if (umove_or_printaddr(tcp, addr, &pair)) \ + return false; \ + tprints("["); \ + tprintf(fmt, pair[0]); \ + tprints(", "); \ + tprintf(fmt, pair[1]); \ + tprints("]"); \ + return true; \ } DEF_PRINTNUM(int, int) @@ -417,14 +419,14 @@ DEF_PRINTNUM(int64, uint64_t) DEF_PRINTPAIR(int64, uint64_t) #if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4 -void +bool printnum_long_int(struct tcb *tcp, const long addr, const char *fmt_long, const char *fmt_int) { if (current_wordsize > sizeof(int)) { - printnum_int64(tcp, addr, fmt_long); + return printnum_int64(tcp, addr, fmt_long); } else { - printnum_int(tcp, addr, fmt_int); + return printnum_int(tcp, addr, fmt_int); } } #endif -- 2.50.1