aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/xkb/xkb.c
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/xkb/xkb.c')
-rw-r--r--xorg-server/xkb/xkb.c321
1 files changed, 158 insertions, 163 deletions
diff --git a/xorg-server/xkb/xkb.c b/xorg-server/xkb/xkb.c
index efb178c7c..11660bf47 100644
--- a/xorg-server/xkb/xkb.c
+++ b/xorg-server/xkb/xkb.c
@@ -182,14 +182,13 @@ ProcXkbUseExtension(ClientPtr client)
stuff->wantedMinor, SERVER_XKB_MAJOR_VERSION,
SERVER_XKB_MINOR_VERSION);
}
- rep = (xkbUseExtensionReply) {
- .type = X_Reply,
- .supported = supported,
- .sequenceNumber = client->sequence,
- .length = 0,
- .serverMajor = SERVER_XKB_MAJOR_VERSION,
- .serverMinor = SERVER_XKB_MINOR_VERSION
- };
+ memset(&rep, 0, sizeof(xkbUseExtensionReply));
+ rep.type = X_Reply;
+ rep.supported = supported;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.serverMajor = SERVER_XKB_MAJOR_VERSION;
+ rep.serverMinor = SERVER_XKB_MINOR_VERSION;
if (client->swapped) {
swaps(&rep.sequenceNumber);
swaps(&rep.serverMajor);
@@ -579,22 +578,21 @@ ProcXkbGetState(ClientPtr client)
CHK_KBD_DEVICE(dev, stuff->deviceSpec, client, DixGetAttrAccess);
xkb = &dev->key->xkbInfo->state;
- rep = (xkbGetStateReply) {
- .type = X_Reply,
- .deviceID = dev->id,
- .sequenceNumber = client->sequence,
- .length = 0,
- .mods = XkbStateFieldFromRec(xkb) & 0xff,
- .baseMods = xkb->base_mods,
- .latchedMods = xkb->latched_mods,
- .lockedMods = xkb->locked_mods,
- .group = xkb->group,
- .lockedGroup = xkb->locked_group,
- .baseGroup = xkb->base_group,
- .latchedGroup = xkb->latched_group,
- .compatState = xkb->compat_state,
- .ptrBtnState = xkb->ptr_buttons
- };
+ memset(&rep, 0, sizeof(xkbGetStateReply));
+ rep.type = X_Reply;
+ rep.deviceID = dev->id;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.mods = XkbStateFieldFromRec(xkb) & 0xff;
+ rep.baseMods = xkb->base_mods;
+ rep.latchedMods = xkb->latched_mods;
+ rep.lockedMods = xkb->locked_mods;
+ rep.group = xkb->group;
+ rep.lockedGroup = xkb->locked_group;
+ rep.baseGroup = xkb->base_group;
+ rep.latchedGroup = xkb->latched_group;
+ rep.compatState = xkb->compat_state;
+ rep.ptrBtnState = xkb->ptr_buttons;
if (client->swapped) {
swaps(&rep.sequenceNumber);
swaps(&rep.ptrBtnState);
@@ -691,38 +689,38 @@ ProcXkbGetControls(ClientPtr client)
CHK_KBD_DEVICE(dev, stuff->deviceSpec, client, DixGetAttrAccess);
xkb = dev->key->xkbInfo->desc->ctrls;
- rep = (xkbGetControlsReply) {
- .type = X_Reply,
- .deviceID = ((DeviceIntPtr) dev)->id,
- .sequenceNumber = client->sequence,
- .length = bytes_to_int32(SIZEOF(xkbGetControlsReply) -
- SIZEOF(xGenericReply)),
- .mkDfltBtn = xkb->mk_dflt_btn,
- .numGroups = xkb->num_groups,
- .groupsWrap = xkb->groups_wrap,
- .internalMods = xkb->internal.mask,
- .ignoreLockMods = xkb->ignore_lock.mask,
- .internalRealMods = xkb->internal.real_mods,
- .ignoreLockRealMods = xkb->ignore_lock.real_mods,
- .internalVMods = xkb->internal.vmods,
- .ignoreLockVMods = xkb->ignore_lock.vmods,
- .repeatDelay = xkb->repeat_delay,
- .repeatInterval = xkb->repeat_interval,
- .slowKeysDelay = xkb->slow_keys_delay,
- .debounceDelay = xkb->debounce_delay,
- .mkDelay = xkb->mk_delay,
- .mkInterval = xkb->mk_interval,
- .mkTimeToMax = xkb->mk_time_to_max,
- .mkMaxSpeed = xkb->mk_max_speed,
- .mkCurve = xkb->mk_curve,
- .axOptions = xkb->ax_options,
- .axTimeout = xkb->ax_timeout,
- .axtOptsMask = xkb->axt_opts_mask,
- .axtOptsValues = xkb->axt_opts_values,
- .axtCtrlsMask = xkb->axt_ctrls_mask,
- .axtCtrlsValues = xkb->axt_ctrls_values,
- .enabledCtrls = xkb->enabled_ctrls,
- };
+
+ rep.type = X_Reply;
+ rep.deviceID = ((DeviceIntPtr) dev)->id;
+ rep.sequenceNumber = client->sequence;
+ rep.length = bytes_to_int32(SIZEOF(xkbGetControlsReply) -
+ SIZEOF(xGenericReply));
+ rep.mkDfltBtn = xkb->mk_dflt_btn;
+ rep.numGroups = xkb->num_groups;
+ rep.groupsWrap = xkb->groups_wrap;
+ rep.internalMods = xkb->internal.mask;
+ rep.ignoreLockMods = xkb->ignore_lock.mask;
+ rep.internalRealMods = xkb->internal.real_mods;
+ rep.ignoreLockRealMods = xkb->ignore_lock.real_mods;
+ rep.internalVMods = xkb->internal.vmods;
+ rep.ignoreLockVMods = xkb->ignore_lock.vmods;
+ rep.repeatDelay = xkb->repeat_delay;
+ rep.repeatInterval = xkb->repeat_interval;
+ rep.slowKeysDelay = xkb->slow_keys_delay;
+ rep.debounceDelay = xkb->debounce_delay;
+ rep.mkDelay = xkb->mk_delay;
+ rep.mkInterval = xkb->mk_interval;
+ rep.mkTimeToMax = xkb->mk_time_to_max;
+ rep.mkMaxSpeed = xkb->mk_max_speed;
+ rep.mkCurve = xkb->mk_curve;
+ rep.axOptions = xkb->ax_options;
+ rep.axTimeout = xkb->ax_timeout;
+ rep.axtOptsMask = xkb->axt_opts_mask;
+ rep.axtOptsValues = xkb->axt_opts_values;
+ rep.axtCtrlsMask = xkb->axt_ctrls_mask;
+ rep.axtCtrlsValues = xkb->axt_ctrls_values;
+ rep.enabledCtrls = xkb->enabled_ctrls;
+
memcpy(rep.perKeyRepeat, xkb->per_key_repeat, XkbPerKeyBitArraySize);
if (client->swapped) {
swaps(&rep.sequenceNumber);
@@ -1464,16 +1462,14 @@ ProcXkbGetMap(ClientPtr client)
CHK_MASK_LEGAL(0x03, stuff->partial, XkbAllMapComponentsMask);
xkb = dev->key->xkbInfo->desc;
- rep = (xkbGetMapReply) {
- .type = X_Reply,
- .deviceID = dev->id,
- .sequenceNumber = client->sequence,
- .length = (SIZEOF(xkbGetMapReply) - SIZEOF(xGenericReply)) >> 2,
- .present = stuff->partial | stuff->full,
- .minKeyCode = xkb->min_key_code,
- .maxKeyCode = xkb->max_key_code
- };
-
+ memset(&rep, 0, sizeof(xkbGetMapReply));
+ rep.type = X_Reply;
+ rep.deviceID = dev->id;
+ rep.sequenceNumber = client->sequence;
+ rep.length = (SIZEOF(xkbGetMapReply) - SIZEOF(xGenericReply)) >> 2;
+ rep.present = stuff->partial | stuff->full;
+ rep.minKeyCode = xkb->min_key_code;
+ rep.maxKeyCode = xkb->max_key_code;
if (stuff->full & XkbKeyTypesMask) {
rep.firstType = 0;
rep.nTypes = xkb->map->num_types;
@@ -2778,14 +2774,14 @@ ProcXkbGetCompatMap(ClientPtr client)
xkb = dev->key->xkbInfo->desc;
compat = xkb->compat;
- rep = (xkbGetCompatMapReply) {
- .type = X_Reply,
- .sequenceNumber = client->sequence,
- .length = 0,
- .deviceID = dev->id,
- .firstSI = stuff->firstSI,
- .nSI = stuff->nSI
- };
+
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.deviceID = dev->id;
+ rep.firstSI = stuff->firstSI;
+ rep.nSI = stuff->nSI;
+
if (stuff->getAllSI) {
rep.firstSI = 0;
rep.nSI = compat->num_si;
@@ -3042,13 +3038,12 @@ ProcXkbGetIndicatorState(ClientPtr client)
if (!sli)
return BadAlloc;
- rep = (xkbGetIndicatorStateReply) {
- .type = X_Reply,
- .deviceID = dev->id,
- .sequenceNumber = client->sequence,
- .length = 0,
- .state = sli->effectiveState
- };
+
+ rep.type = X_Reply;
+ rep.deviceID = dev->id;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.state = sli->effectiveState;
if (client->swapped) {
swaps(&rep.sequenceNumber);
@@ -3155,13 +3150,13 @@ ProcXkbGetIndicatorMap(ClientPtr client)
xkb = dev->key->xkbInfo->desc;
leds = xkb->indicators;
- rep = (xkbGetIndicatorMapReply) {
- .type = X_Reply,
- .deviceID = dev->id,
- .sequenceNumber = client->sequence,
- .length = 0,
- .which = stuff->which
- };
+
+ rep.type = X_Reply;
+ rep.deviceID = dev->id;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.which = stuff->which;
+
XkbComputeGetIndicatorMapReplySize(leds, &rep);
return XkbSendIndicatorMap(client, leds, &rep);
}
@@ -3312,13 +3307,13 @@ ProcXkbGetNamedIndicator(ClientPtr client)
}
}
- rep = (xkbGetNamedIndicatorReply) {
- .type = X_Reply,
- .sequenceNumber = client->sequence,
- .length = 0,
- .deviceID = dev->id,
- .indicator = stuff->indicator
- };
+
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.deviceID = dev->id;
+ rep.indicator = stuff->indicator;
+
if (map != NULL) {
rep.found = TRUE;
rep.on = ((sli->effectiveState & (1 << i)) != 0);
@@ -3894,18 +3889,18 @@ ProcXkbGetNames(ClientPtr client)
CHK_MASK_LEGAL(0x01, stuff->which, XkbAllNamesMask);
xkb = dev->key->xkbInfo->desc;
- rep = (xkbGetNamesReply) {
- .type = X_Reply,
- .deviceID = dev->id,
- .sequenceNumber = client->sequence,
- .length = 0,
- .which = stuff->which,
- .nTypes = xkb->map->num_types,
- .firstKey = xkb->min_key_code,
- .nKeys = XkbNumKeys(xkb),
- .nKeyAliases = xkb->names ? xkb->names->num_key_aliases : 0,
- .nRadioGroups = xkb->names ? xkb->names->num_rg : 0
- };
+ memset(&rep, 0, sizeof(xkbGetNamesReply));
+ rep.type = X_Reply;
+ rep.deviceID = dev->id;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.which = stuff->which;
+ rep.nTypes = xkb->map->num_types;
+ rep.firstKey = xkb->min_key_code;
+ rep.nKeys = XkbNumKeys(xkb);
+ rep.nKeyAliases = xkb->names ? xkb->names->num_key_aliases : 0;
+ rep.nRadioGroups = xkb->names ? xkb->names->num_rg : 0;
+
XkbComputeGetNamesReplySize(xkb, &rep);
return XkbSendNames(client, xkb, &rep);
}
@@ -4943,12 +4938,12 @@ ProcXkbGetGeometry(ClientPtr client)
CHK_ATOM_OR_NONE(stuff->name);
geom = XkbLookupNamedGeometry(dev, stuff->name, &shouldFree);
- rep = (xkbGetGeometryReply) {
- .type = X_Reply,
- .deviceID = dev->id,
- .sequenceNumber = client->sequence,
- .length = 0
- };
+
+ rep.type = X_Reply;
+ rep.deviceID = dev->id;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+
status = XkbComputeGetGeometryReplySize(geom, &rep, stuff->name);
if (status != Success)
return status;
@@ -5531,15 +5526,15 @@ ProcXkbPerClientFlags(ClientPtr client)
}
}
- rep = (xkbPerClientFlagsReply) {
- .type = X_Reply,
- .sequenceNumber = client->sequence,
- .length = 0,
- .supported = XkbPCF_AllFlagsMask,
- .value = client->xkbClientFlags & XkbPCF_AllFlagsMask,
- .autoCtrls = interest ? interest->autoCtrls : 0,
- .autoCtrlValues = interest ? interest->autoCtrlValues : 0,
- };
+ memset(&rep, 0, sizeof(xkbPerClientFlagsReply));
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.supported = XkbPCF_AllFlagsMask;
+ rep.value = client->xkbClientFlags & XkbPCF_AllFlagsMask;
+ rep.autoCtrls = interest ? interest->autoCtrls : 0;
+ rep.autoCtrlValues = interest ? interest->autoCtrlValues : 0;
+
if (client->swapped) {
swaps(&rep.sequenceNumber);
swapl(&rep.supported);
@@ -5651,19 +5646,18 @@ ProcXkbListComponents(ClientPtr client)
list.pool = NULL;
return status;
}
- rep = (xkbListComponentsReply) {
- .type = X_Reply,
- .deviceID = dev->id,
- .sequenceNumber = client->sequence,
- .length = XkbPaddedSize(list.nPool) / 4,
- .nKeymaps = 0,
- .nKeycodes = list.nFound[_XkbListKeycodes],
- .nTypes = list.nFound[_XkbListTypes],
- .nCompatMaps = list.nFound[_XkbListCompat],
- .nSymbols = list.nFound[_XkbListSymbols],
- .nGeometries = list.nFound[_XkbListGeometry],
- .extra = 0
- };
+ memset(&rep, 0, sizeof(xkbListComponentsReply));
+ rep.type = X_Reply;
+ rep.deviceID = dev->id;
+ rep.sequenceNumber = client->sequence;
+ rep.length = XkbPaddedSize(list.nPool) / 4;
+ rep.nKeymaps = 0;
+ rep.nKeycodes = list.nFound[_XkbListKeycodes];
+ rep.nTypes = list.nFound[_XkbListTypes];
+ rep.nCompatMaps = list.nFound[_XkbListCompat];
+ rep.nSymbols = list.nFound[_XkbListSymbols];
+ rep.nGeometries = list.nFound[_XkbListGeometry];
+ rep.extra = 0;
if (list.nTotal > list.maxRtrn)
rep.extra = (list.nTotal - list.maxRtrn);
if (client->swapped) {
@@ -5718,6 +5712,8 @@ ProcXkbGetKbdByName(ClientPtr client)
if (!(client->xkbClientFlags & _XkbClientInitialized))
return BadAccess;
+ memset(&mrep,0,sizeof(mrep)); //MH
+
CHK_KBD_DEVICE(dev, stuff->deviceSpec, client, access_mode);
master = GetMaster(dev, MASTER_KEYBOARD);
@@ -6264,25 +6260,24 @@ ProcXkbGetDeviceInfo(ClientPtr client)
wanted &= ~XkbXI_IndicatorsMask;
nameLen = XkbSizeCountedString(dev->name);
- rep = (xkbGetDeviceInfoReply) {
- .type = X_Reply,
- .deviceID = dev->id,
- .sequenceNumber = client->sequence,
- .length = nameLen / 4,
- .present = wanted,
- .supported = XkbXI_AllDeviceFeaturesMask,
- .unsupported = 0,
- .nDeviceLedFBs = 0,
- .firstBtnWanted = 0,
- .nBtnsWanted = 0,
- .firstBtnRtrn = 0,
- .nBtnsRtrn = 0,
- .totalBtns = dev->button ? dev->button->numButtons : 0,
- .hasOwnState = (dev->key && dev->key->xkbInfo),
- .dfltKbdFB = dev->kbdfeed ? dev->kbdfeed->ctrl.id : XkbXINone,
- .dfltLedFB = dev->leds ? dev->leds->ctrl.id : XkbXINone,
- .devType = dev->xinput_type
- };
+ memset((char *) &rep, 0, SIZEOF(xkbGetDeviceInfoReply));
+ rep.type = X_Reply;
+ rep.deviceID = dev->id;
+ rep.sequenceNumber = client->sequence;
+ rep.length = nameLen / 4;
+ rep.present = wanted;
+ rep.supported = XkbXI_AllDeviceFeaturesMask;
+ rep.unsupported = 0;
+ rep.nDeviceLedFBs = 0;
+ rep.firstBtnWanted = 0;
+ rep.nBtnsWanted = 0;
+ rep.firstBtnRtrn = 0;
+ rep.nBtnsRtrn = 0;
+ rep.totalBtns = dev->button ? dev->button->numButtons : 0;
+ rep.hasOwnState = (dev->key && dev->key->xkbInfo);
+ rep.dfltKbdFB = dev->kbdfeed ? dev->kbdfeed->ctrl.id : XkbXINone;
+ rep.dfltLedFB = dev->leds ? dev->leds->ctrl.id : XkbXINone;
+ rep.devType = dev->xinput_type;
ledClass = stuff->ledClass;
ledID = stuff->ledID;
@@ -6748,15 +6743,15 @@ ProcXkbSetDebuggingFlags(ClientPtr client)
xkbDebugFlags = newFlags;
xkbDebugCtrls = newCtrls;
- rep = (xkbSetDebuggingFlagsReply) {
- .type = X_Reply,
- .sequenceNumber = client->sequence,
- .length = 0,
- .currentFlags = newFlags,
- .currentCtrls = newCtrls,
- .supportedFlags = ~0,
- .supportedCtrls = ~0
- };
+
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.currentFlags = newFlags;
+ rep.currentCtrls = newCtrls;
+ rep.supportedFlags = ~0;
+ rep.supportedCtrls = ~0;
+
if (client->swapped) {
swaps(&rep.sequenceNumber);
swapl(&rep.currentFlags);