summaryrefslogtreecommitdiff
path: root/Xi/xiqueryversion.c
diff options
context:
space:
mode:
Diffstat (limited to 'Xi/xiqueryversion.c')
-rw-r--r--Xi/xiqueryversion.c49
1 files changed, 30 insertions, 19 deletions
diff --git a/Xi/xiqueryversion.c b/Xi/xiqueryversion.c
index 95a8efa..b807a53 100644
--- a/Xi/xiqueryversion.c
+++ b/Xi/xiqueryversion.c
@@ -70,26 +70,37 @@ ProcXIQueryVersion(ClientPtr client)
pXIClient = dixLookupPrivate(&client->devPrivates, XIClientPrivateKey);
- if (version_compare(XIVersion.major_version, XIVersion.minor_version,
- stuff->major_version, stuff->minor_version) > 0) {
- major = stuff->major_version;
- minor = stuff->minor_version;
+ if (pXIClient->major_version) {
+ if (version_compare(stuff->major_version, stuff->minor_version,
+ pXIClient->major_version, pXIClient->minor_version) < 0) {
+ client->errorValue = stuff->major_version;
+ return BadValue;
+ }
+ major = pXIClient->major_version;
+ minor = pXIClient->minor_version;
+ } else {
+ if (version_compare(XIVersion.major_version, XIVersion.minor_version,
+ stuff->major_version, stuff->minor_version) > 0) {
+ major = stuff->major_version;
+ minor = stuff->minor_version;
+ }
+ else {
+ major = XIVersion.major_version;
+ minor = XIVersion.minor_version;
+ }
+
+ pXIClient->major_version = major;
+ pXIClient->minor_version = minor;
}
- else {
- major = XIVersion.major_version;
- minor = XIVersion.minor_version;
- }
-
- pXIClient->major_version = major;
- pXIClient->minor_version = minor;
- memset(&rep, 0, sizeof(xXIQueryVersionReply));
- rep.repType = X_Reply;
- rep.RepType = X_XIQueryVersion;
- rep.length = 0;
- rep.sequenceNumber = client->sequence;
- rep.major_version = major;
- rep.minor_version = minor;
+ rep = (xXIQueryVersionReply) {
+ .repType = X_Reply,
+ .RepType = X_XIQueryVersion,
+ .sequenceNumber = client->sequence,
+ .length = 0,
+ .major_version = major,
+ .minor_version = minor
+ };
WriteReplyToClient(client, sizeof(xXIQueryVersionReply), &rep);
@@ -116,5 +127,5 @@ SRepXIQueryVersion(ClientPtr client, int size, xXIQueryVersionReply * rep)
swapl(&rep->length);
swaps(&rep->major_version);
swaps(&rep->minor_version);
- WriteToClient(client, size, (char *) rep);
+ WriteToClient(client, size, rep);
}