[PATCH v2 libXi] Set ndevices to 0 in the error case
Niels Ole Salscheider
niels_ole at salscheider-online.de
Sat Oct 8 09:35:57 UTC 2016
v2: Fix formating issues
Signed-off-by: Niels Ole Salscheider <niels_ole at salscheider-online.de>
---
src/XListDev.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/src/XListDev.c b/src/XListDev.c
index d0c6bf2..f47ad97 100644
--- a/src/XListDev.c
+++ b/src/XListDev.c
@@ -189,8 +189,10 @@ XListInputDevices(
XExtDisplayInfo *info = XInput_find_display(dpy);
LockDisplay(dpy);
- if (_XiCheckExtInit(dpy, XInput_Initial_Release, info) == -1)
+ if (_XiCheckExtInit(dpy, XInput_Initial_Release, info) == -1) {
+ *ndevices = 0;
return ((XDeviceInfo *) NULL);
+ }
GetReq(ListInputDevices, req);
req->reqType = info->codes->major_opcode;
@@ -199,6 +201,7 @@ XListInputDevices(
if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
+ *ndevices = 0;
return (XDeviceInfo *) NULL;
}
@@ -212,6 +215,7 @@ XListInputDevices(
_XEatDataWords(dpy, rep.length);
UnlockDisplay(dpy);
SyncHandle();
+ *ndevices = 0;
return (XDeviceInfo *) NULL;
}
_XRead(dpy, (char *)list, rlen);
@@ -220,15 +224,19 @@ XListInputDevices(
sav_any = any;
end = (char *)list + rlen;
for (i = 0; i < *ndevices; i++, list++) {
- if(SizeClassInfo(&any, end - (char *)any, (int)list->num_classes, &s))
- goto out;
+ if(SizeClassInfo(&any, end - (char *)any, (int)list->num_classes, &s)) {
+ *ndevices = 0;
+ goto out;
+ }
size += s;
}
Nptr = ((unsigned char *)list) + rlen;
for (i = 0, nptr = (unsigned char *)any; i < *ndevices; i++) {
- if (nptr >= Nptr)
+ if (nptr >= Nptr) {
+ *ndevices = 0;
goto out;
+ }
size += *nptr + 1;
nptr += (*nptr + 1);
}
@@ -238,6 +246,7 @@ XListInputDevices(
XFree((char *)slist);
UnlockDisplay(dpy);
SyncHandle();
+ *ndevices = 0;
return (XDeviceInfo *) NULL;
}
sclist = clist;
--
2.10.1
More information about the xorg-devel
mailing list