diff options
author | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2016-10-19 22:15:01 +0200 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2016-10-19 22:15:01 +0200 |
commit | 70ac75f4ab184c21d11b9840a47362610aaef481 (patch) | |
tree | 183b9ec7e6897fb2cea7296b461a35ca93dfce6e /nx-X11/lib/X11/XKBGetByName.c | |
parent | 6c303d9e4ffd162b8c7f59a4b135e592d923a656 (diff) | |
parent | 70e9d346fe34af127d2c827c3678e53d0f4312ae (diff) | |
download | nx-libs-70ac75f4ab184c21d11b9840a47362610aaef481.tar.gz nx-libs-70ac75f4ab184c21d11b9840a47362610aaef481.tar.bz2 nx-libs-70ac75f4ab184c21d11b9840a47362610aaef481.zip |
Merge branch 'uli42-pr/libX11_further_backports' into 3.6.x
Attributes GH PR #222: https://github.com/ArcticaProject/nx-libs/pull/222
Diffstat (limited to 'nx-X11/lib/X11/XKBGetByName.c')
-rw-r--r-- | nx-X11/lib/X11/XKBGetByName.c | 290 |
1 files changed, 151 insertions, 139 deletions
diff --git a/nx-X11/lib/X11/XKBGetByName.c b/nx-X11/lib/X11/XKBGetByName.c index 5c6eca0e2..c673781ed 100644 --- a/nx-X11/lib/X11/XKBGetByName.c +++ b/nx-X11/lib/X11/XKBGetByName.c @@ -35,32 +35,32 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE. /***====================================================================***/ XkbDescPtr -XkbGetKeyboardByName( Display * dpy, - unsigned deviceSpec, - XkbComponentNamesPtr names, - unsigned want, - unsigned need, - Bool load) +XkbGetKeyboardByName(Display *dpy, + unsigned deviceSpec, + XkbComponentNamesPtr names, + unsigned want, + unsigned need, + Bool load) { - register xkbGetKbdByNameReq * req; - xkbGetKbdByNameReply rep; - int len,extraLen; - char * str; - XkbDescPtr xkb; - int mapLen,codesLen,typesLen,compatLen; - int symsLen,geomLen; - XkbInfoPtr xkbi; - - if ( (dpy==NULL) || (dpy->flags & XlibDisplayNoXkb) || - (!dpy->xkb_info && !XkbUseExtension(dpy,NULL,NULL)) ) - return NULL; - - xkbi= dpy->xkb_info; - xkb = (XkbDescRec *)_XkbCalloc(1,sizeof(XkbDescRec)); + register xkbGetKbdByNameReq *req; + xkbGetKbdByNameReply rep; + int len, extraLen = 0; + char *str; + XkbDescPtr xkb; + int mapLen, codesLen, typesLen, compatLen; + int symsLen, geomLen; + XkbInfoPtr xkbi; + + if ((dpy == NULL) || (dpy->flags & XlibDisplayNoXkb) || + (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) + return NULL; + + xkbi = dpy->xkb_info; + xkb = (XkbDescRec *) _XkbCalloc(1, sizeof(XkbDescRec)); if (!xkb) - return NULL; + return NULL; xkb->device_spec = deviceSpec; - xkb->map = (XkbClientMapRec *)_XkbCalloc(1,sizeof(XkbClientMapRec)); + xkb->map = (XkbClientMapRec *) _XkbCalloc(1, sizeof(XkbClientMapRec)); xkb->dpy = dpy; LockDisplay(dpy); @@ -68,147 +68,159 @@ XkbGetKeyboardByName( Display * dpy, req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbGetKbdByName; req->deviceSpec = xkb->device_spec; - req->want= want; - req->need= need; - req->load= load; + req->want = want; + req->need = need; + req->load = load; - mapLen= codesLen= typesLen= compatLen= symsLen= geomLen= 0; + mapLen = codesLen = typesLen = compatLen = symsLen = geomLen = 0; if (names) { - if (names->keymap) - mapLen= (int)strlen(names->keymap); - if (names->keycodes) - codesLen= (int)strlen(names->keycodes); - if (names->types) - typesLen= (int)strlen(names->types); - if (names->compat) - compatLen= (int)strlen(names->compat); - if (names->symbols) - symsLen= (int)strlen(names->symbols); - if (names->geometry) - geomLen= (int)strlen(names->geometry); - if (mapLen>255) mapLen= 255; - if (codesLen>255) codesLen= 255; - if (typesLen>255) typesLen= 255; - if (compatLen>255) compatLen= 255; - if (symsLen>255) symsLen= 255; - if (geomLen>255) geomLen= 255; + if (names->keymap) + mapLen = (int) strlen(names->keymap); + if (names->keycodes) + codesLen = (int) strlen(names->keycodes); + if (names->types) + typesLen = (int) strlen(names->types); + if (names->compat) + compatLen = (int) strlen(names->compat); + if (names->symbols) + symsLen = (int) strlen(names->symbols); + if (names->geometry) + geomLen = (int) strlen(names->geometry); + if (mapLen > 255) + mapLen = 255; + if (codesLen > 255) + codesLen = 255; + if (typesLen > 255) + typesLen = 255; + if (compatLen > 255) + compatLen = 255; + if (symsLen > 255) + symsLen = 255; + if (geomLen > 255) + geomLen = 255; } - else mapLen= codesLen= typesLen= compatLen= symsLen= geomLen= 0; - - len= mapLen+codesLen+typesLen+compatLen+symsLen+geomLen+6; - len= XkbPaddedSize(len); - req->length+= len/4; - BufAlloc(char *,str,len); - *str++= mapLen; - if (mapLen>0) { - memcpy(str,names->keymap,mapLen); - str+= mapLen; + else + mapLen = codesLen = typesLen = compatLen = symsLen = geomLen = 0; + + len = mapLen + codesLen + typesLen + compatLen + symsLen + geomLen + 6; + len = XkbPaddedSize(len); + req->length += len / 4; + BufAlloc(char *, str, len); + + *str++ = mapLen; + if (mapLen > 0) { + memcpy(str, names->keymap, mapLen); + str += mapLen; } - *str++= codesLen; - if (codesLen>0) { - memcpy(str,names->keycodes,codesLen); - str+= codesLen; + *str++ = codesLen; + if (codesLen > 0) { + memcpy(str, names->keycodes, codesLen); + str += codesLen; } - *str++= typesLen; - if (typesLen>0) { - memcpy(str,names->types,typesLen); - str+= typesLen; + *str++ = typesLen; + if (typesLen > 0) { + memcpy(str, names->types, typesLen); + str += typesLen; } - *str++= compatLen; - if (compatLen>0) { - memcpy(str,names->compat,compatLen); - str+= compatLen; + *str++ = compatLen; + if (compatLen > 0) { + memcpy(str, names->compat, compatLen); + str += compatLen; } - *str++= symsLen; - if (symsLen>0) { - memcpy(str,names->symbols,symsLen); - str+= symsLen; + *str++ = symsLen; + if (symsLen > 0) { + memcpy(str, names->symbols, symsLen); + str += symsLen; } - *str++= geomLen; - if (geomLen>0) { - memcpy(str,names->geometry,geomLen); - str+= geomLen; + *str++ = geomLen; + if (geomLen > 0) { + memcpy(str, names->geometry, geomLen); + str += geomLen; } - if ((!_XReply(dpy, (xReply *)&rep, 0, xFalse))||(!rep.reported)) - goto BAILOUT; - extraLen= (int)rep.length*4; + if ((!_XReply(dpy, (xReply *) &rep, 0, xFalse)) || (!rep.reported)) + goto BAILOUT; + extraLen = (int) rep.length * 4; - xkb->device_spec= rep.deviceID; + xkb->device_spec = rep.deviceID; xkb->min_key_code = rep.minKeyCode; xkb->max_key_code = rep.maxKeyCode; - if (rep.reported&(XkbGBN_SymbolsMask|XkbGBN_TypesMask)) { - xkbGetMapReply mrep; - Status status; - int nread= 0; - - _XRead(dpy, (char *)&mrep, SIZEOF(xkbGetMapReply)); - extraLen-= SIZEOF(xkbGetMapReply); - status= _XkbReadGetMapReply(dpy,&mrep,xkb,&nread); - extraLen-= nread; - if (status!=Success) - goto BAILOUT; + if (rep.reported & (XkbGBN_SymbolsMask | XkbGBN_TypesMask)) { + xkbGetMapReply mrep; + Status status; + int nread = 0; + + _XRead(dpy, (char *) &mrep, SIZEOF(xkbGetMapReply)); + extraLen -= SIZEOF(xkbGetMapReply); + status = _XkbReadGetMapReply(dpy, &mrep, xkb, &nread); + extraLen -= nread; + if (status != Success) + goto BAILOUT; } - if (rep.reported&XkbGBN_CompatMapMask) { - xkbGetCompatMapReply crep; - Status status; - int nread= 0; - - _XRead(dpy, (char *)&crep, SIZEOF(xkbGetCompatMapReply)); - extraLen-= SIZEOF(xkbGetCompatMapReply); - status= _XkbReadGetCompatMapReply(dpy,&crep,xkb,&nread); - extraLen-= nread; - if (status!=Success) - goto BAILOUT; + if (rep.reported & XkbGBN_CompatMapMask) { + xkbGetCompatMapReply crep; + Status status; + int nread = 0; + + _XRead(dpy, (char *) &crep, SIZEOF(xkbGetCompatMapReply)); + extraLen -= SIZEOF(xkbGetCompatMapReply); + status = _XkbReadGetCompatMapReply(dpy, &crep, xkb, &nread); + extraLen -= nread; + if (status != Success) + goto BAILOUT; } - if (rep.reported&XkbGBN_IndicatorMapMask) { - xkbGetIndicatorMapReply irep; - Status status; - int nread= 0; - - _XRead(dpy, (char *)&irep, SIZEOF(xkbGetIndicatorMapReply)); - extraLen-= SIZEOF(xkbGetIndicatorMapReply); - status= _XkbReadGetIndicatorMapReply(dpy,&irep,xkb,&nread); - extraLen-= nread; - if (status!=Success) - goto BAILOUT; + if (rep.reported & XkbGBN_IndicatorMapMask) { + xkbGetIndicatorMapReply irep; + Status status; + int nread = 0; + + _XRead(dpy, (char *) &irep, SIZEOF(xkbGetIndicatorMapReply)); + extraLen -= SIZEOF(xkbGetIndicatorMapReply); + status = _XkbReadGetIndicatorMapReply(dpy, &irep, xkb, &nread); + extraLen -= nread; + if (status != Success) + goto BAILOUT; } - if (rep.reported&(XkbGBN_KeyNamesMask|XkbGBN_OtherNamesMask)) { - xkbGetNamesReply nrep; - Status status; - int nread= 0; - - _XRead(dpy, (char *)&nrep, SIZEOF(xkbGetNamesReply)); - extraLen-= SIZEOF(xkbGetNamesReply); - status= _XkbReadGetNamesReply(dpy,&nrep,xkb,&nread); - extraLen-= nread; - if (status!=Success) - goto BAILOUT; + if (rep.reported & (XkbGBN_KeyNamesMask | XkbGBN_OtherNamesMask)) { + xkbGetNamesReply nrep; + Status status; + int nread = 0; + + _XRead(dpy, (char *) &nrep, SIZEOF(xkbGetNamesReply)); + extraLen -= SIZEOF(xkbGetNamesReply); + status = _XkbReadGetNamesReply(dpy, &nrep, xkb, &nread); + extraLen -= nread; + if (status != Success) + goto BAILOUT; } - if (rep.reported&XkbGBN_GeometryMask) { - xkbGetGeometryReply grep; - Status status; - int nread= 0; - - _XRead(dpy, (char *)&grep, SIZEOF(xkbGetGeometryReply)); - extraLen-= SIZEOF(xkbGetGeometryReply); - status= _XkbReadGetGeometryReply(dpy,&grep,xkb,&nread); - extraLen-= nread; - if (status!=Success) - goto BAILOUT; + if (rep.reported & XkbGBN_GeometryMask) { + xkbGetGeometryReply grep; + Status status; + int nread = 0; + + _XRead(dpy, (char *) &grep, SIZEOF(xkbGetGeometryReply)); + extraLen -= SIZEOF(xkbGetGeometryReply); + status = _XkbReadGetGeometryReply(dpy, &grep, xkb, &nread); + extraLen -= nread; + if (status != Success) + goto BAILOUT; } + if (extraLen > 0) + goto BAILOUT; UnlockDisplay(dpy); SyncHandle(); return xkb; -BAILOUT: - if (xkb!=NULL) - XkbFreeKeyboard(xkb,XkbAllComponentsMask,xTrue); + BAILOUT: + if (xkb != NULL) + XkbFreeKeyboard(xkb, XkbAllComponentsMask, xTrue); + if (extraLen > 0) + _XEatData(dpy, extraLen); UnlockDisplay(dpy); SyncHandle(); return NULL; } XkbDescPtr -XkbGetKeyboard(Display *dpy,unsigned which,unsigned deviceSpec) +XkbGetKeyboard(Display *dpy, unsigned which, unsigned deviceSpec) { - return XkbGetKeyboardByName(dpy,deviceSpec,NULL,which,which,False); + return XkbGetKeyboardByName(dpy, deviceSpec, NULL, which, which, False); } |