evdev.c: fix decoding of struct input_absinfo
* evdev.c (abs_ioctl): Use umove_or_printaddr.
diff --git a/evdev.c b/evdev.c
index 2775a71..a138eda 100644
--- a/evdev.c
+++ b/evdev.c
@@ -144,24 +144,34 @@
static int
abs_ioctl(struct tcb *tcp, long arg)
{
+ tprints(", ");
+
struct input_absinfo absinfo;
- if (!verbose(tcp) || umove(tcp, arg, &absinfo) < 0)
- return 0;
+ if (!umove_or_printaddr(tcp, arg, &absinfo)) {
+ tprintf("{value=%u"
+ ", minimum=%u, ",
+ absinfo.value,
+ absinfo.minimum);
- tprintf(", {value=%" PRIu32 ", minimum=%" PRIu32,
- absinfo.value, absinfo.minimum);
- if (!abbrev(tcp)) {
- tprintf(", maximum=%" PRIu32 ", fuzz=%" PRIu32,
- absinfo.maximum, absinfo.fuzz);
- tprintf(", flat=%" PRIu32, absinfo.flat);
+ if (!abbrev(tcp)) {
+ tprintf("maximum=%u"
+ ", fuzz=%u"
+ ", flat=%u",
+ absinfo.maximum,
+ absinfo.fuzz,
+ absinfo.flat);
# ifdef HAVE_STRUCT_INPUT_ABSINFO_RESOLUTION
- tprintf(", resolution=%" PRIu32, absinfo.resolution);
+ tprintf(", resolution=%u",
+ absinfo.resolution);
# endif
+ } else {
+ tprints("...");
+ }
+
tprints("}");
- } else {
- tprints(", ...}");
}
+
return 1;
}