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