]> granicus.if.org Git - strace/commitdiff
evdev.c: fix decoding of struct input_absinfo
authorDmitry V. Levin <ldv@altlinux.org>
Fri, 27 May 2016 00:41:14 +0000 (00:41 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Sat, 28 May 2016 00:56:46 +0000 (00:56 +0000)
* evdev.c (abs_ioctl): Use umove_or_printaddr.

evdev.c

diff --git a/evdev.c b/evdev.c
index 2775a71816e2e9ad67e392b7f57d48c18b149ba1..a138edab502f725c31b89032e7c131afda61f032 100644 (file)
--- a/evdev.c
+++ b/evdev.c
@@ -144,24 +144,34 @@ ff_effect_ioctl(struct tcb *tcp, long arg)
 static int
 abs_ioctl(struct tcb *tcp, long arg)
 {
-       struct input_absinfo absinfo;
+       tprints(", ");
 
-       if (!verbose(tcp) || umove(tcp, arg, &absinfo) < 0)
-               return 0;
+       struct input_absinfo absinfo;
 
-       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 (!umove_or_printaddr(tcp, arg, &absinfo)) {
+               tprintf("{value=%u"
+                       ", minimum=%u, ",
+                       absinfo.value,
+                       absinfo.minimum);
+
+               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;
 }