aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/X11/XKBGetByName.c
diff options
context:
space:
mode:
authorMike Gabriel <mike.gabriel@das-netzwerkteam.de>2016-10-19 22:15:01 +0200
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2016-10-19 22:15:01 +0200
commit70ac75f4ab184c21d11b9840a47362610aaef481 (patch)
tree183b9ec7e6897fb2cea7296b461a35ca93dfce6e /nx-X11/lib/X11/XKBGetByName.c
parent6c303d9e4ffd162b8c7f59a4b135e592d923a656 (diff)
parent70e9d346fe34af127d2c827c3678e53d0f4312ae (diff)
downloadnx-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.c290
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);
}