evdev.c: fix decoding of struct input_absinfo

* evdev.c (abs_ioctl): Use umove_or_printaddr.
This commit is contained in:
Дмитрий Левин 2016-05-27 00:41:14 +00:00
parent 3a45eb3711
commit e167006908

32
evdev.c
View File

@ -144,24 +144,34 @@ ff_effect_ioctl(struct tcb *tcp, long arg)
static int static int
abs_ioctl(struct tcb *tcp, long arg) abs_ioctl(struct tcb *tcp, long arg)
{ {
tprints(", ");
struct input_absinfo absinfo; struct input_absinfo absinfo;
if (!verbose(tcp) || umove(tcp, arg, &absinfo) < 0) if (!umove_or_printaddr(tcp, arg, &absinfo)) {
return 0; tprintf("{value=%u"
", minimum=%u, ",
absinfo.value,
absinfo.minimum);
tprintf(", {value=%" PRIu32 ", minimum=%" PRIu32, if (!abbrev(tcp)) {
absinfo.value, absinfo.minimum); tprintf("maximum=%u"
if (!abbrev(tcp)) { ", fuzz=%u"
tprintf(", maximum=%" PRIu32 ", fuzz=%" PRIu32, ", flat=%u",
absinfo.maximum, absinfo.fuzz); absinfo.maximum,
tprintf(", flat=%" PRIu32, absinfo.flat); absinfo.fuzz,
absinfo.flat);
# ifdef HAVE_STRUCT_INPUT_ABSINFO_RESOLUTION # ifdef HAVE_STRUCT_INPUT_ABSINFO_RESOLUTION
tprintf(", resolution=%" PRIu32, absinfo.resolution); tprintf(", resolution=%u",
absinfo.resolution);
# endif # endif
} else {
tprints("...");
}
tprints("}"); tprints("}");
} else {
tprints(", ...}");
} }
return 1; return 1;
} }