diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/XIHierarchy.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/XIHierarchy.c b/src/XIHierarchy.c index 3d2b4f2..441fec0 100644 --- a/src/XIHierarchy.c +++ b/src/XIHierarchy.c @@ -49,14 +49,14 @@ XIChangeHierarchy(Display* dpy, xXIChangeHierarchyReq *req; XExtDisplayInfo *info = XInput_find_display(dpy); char *data = NULL, *dptr; - int dlen = 0, i; + int dlen = 0, i, ret = Success; LockDisplay(dpy); if (_XiCheckExtInit(dpy, XInput_2_0, info) == -1) return (NoSuchExtension); if (num_changes <= 0) - return Success; + goto out; GetReq(XIChangeHierarchy, req); req->reqType = info->codes->major_opcode; @@ -91,8 +91,10 @@ XIChangeHierarchy(Display* dpy, req->length += dlen / 4; /* dlen is 4-byte aligned */ data = Xmalloc(dlen); - if (!data) - return BadAlloc; + if (!data) { + ret = BadAlloc; + goto out; + } dptr = data; for (i = 0, any = changes; i < num_changes; i++, any++) @@ -155,8 +157,10 @@ XIChangeHierarchy(Display* dpy, } Data(dpy, data, dlen); + +out: Xfree(data); UnlockDisplay(dpy); SyncHandle(); - return Success; + return ret; } |