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.
This commit is contained in:
Дмитрий Левин 2015-07-05 22:09:29 +00:00
parent 332a32619c
commit c88163e5bd
2 changed files with 28 additions and 33 deletions

8
defs.h
View File

@ -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}"))

53
util.c
View File

@ -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)