diff options
-rw-r--r-- | Xext/security.c | 4 | ||||
-rw-r--r-- | Xext/xselinux_hooks.c | 4 | ||||
-rw-r--r-- | dix/dispatch.c | 23 | ||||
-rw-r--r-- | dix/extension.c | 14 | ||||
-rw-r--r-- | include/dixstruct.h | 1 | ||||
-rw-r--r-- | include/extension.h | 2 | ||||
-rw-r--r-- | record/record.c | 8 |
7 files changed, 20 insertions, 36 deletions
diff --git a/Xext/security.c b/Xext/security.c index 0a63aa280..6fc1eafdd 100644 --- a/Xext/security.c +++ b/Xext/security.c @@ -148,9 +148,7 @@ SecurityLabelInitial(void) static _X_INLINE const char * SecurityLookupRequestName(ClientPtr client) { - int major = ((xReq *)client->requestBuffer)->reqType; - int minor = MinorOpcodeOfRequest(client); - return LookupRequestName(major, minor); + return LookupRequestName(client->majorOp, client->minorOp); } diff --git a/Xext/xselinux_hooks.c b/Xext/xselinux_hooks.c index f1d8e5d2f..0d4c9ab11 100644 --- a/Xext/xselinux_hooks.c +++ b/Xext/xselinux_hooks.c @@ -263,8 +263,8 @@ SELinuxAudit(void *auditdata, if (client) { REQUEST(xReq); if (stuff) { - major = stuff->reqType; - minor = MinorOpcodeOfRequest(client); + major = client->majorOp; + minor = client->minorOp; } } if (audit->id) diff --git a/dix/dispatch.c b/dix/dispatch.c index 6e3361573..b39271fd9 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -337,8 +337,6 @@ DisableLimitedSchedulingLatency(void) SmartScheduleLatencyLimited = 0; } -#define MAJOROP ((xReq *)client->requestBuffer)->reqType - void Dispatch(void) { @@ -419,21 +417,28 @@ Dispatch(void) } client->sequence++; + client->majorOp = ((xReq *)client->requestBuffer)->reqType; + client->minorOp = 0; + if (client->majorOp >= EXTENSION_BASE) { + ExtensionEntry *ext = GetExtensionEntry(client->majorOp); + if (ext) + client->minorOp = ext->MinorOpcode(client); + } #ifdef XSERVER_DTRACE - XSERVER_REQUEST_START(LookupMajorName(MAJOROP), MAJOROP, + XSERVER_REQUEST_START(LookupMajorName(client->majorOp), client->majorOp, ((xReq *)client->requestBuffer)->length, client->index, client->requestBuffer); #endif if (result > (maxBigRequestSize << 2)) result = BadLength; else { - result = XaceHookDispatch(client, MAJOROP); + result = XaceHookDispatch(client, client->majorOp); if (result == Success) - result = (* client->requestVector[MAJOROP])(client); + result = (* client->requestVector[client->majorOp])(client); XaceHookAuditEnd(client, result); } #ifdef XSERVER_DTRACE - XSERVER_REQUEST_DONE(LookupMajorName(MAJOROP), MAJOROP, + XSERVER_REQUEST_DONE(LookupMajorName(client->majorOp), client->majorOp, client->sequence, client->index, result); #endif @@ -444,8 +449,8 @@ Dispatch(void) } else if (result != Success) { - SendErrorToClient(client, MAJOROP, - MinorOpcodeOfRequest(client), + SendErrorToClient(client, client->majorOp, + client->minorOp, client->errorValue, result); break; } @@ -466,8 +471,6 @@ Dispatch(void) SmartScheduleLatencyLimited = 0; } -#undef MAJOROP - static int VendorRelease = VENDOR_RELEASE; static char *VendorString = VENDOR_NAME; diff --git a/dix/extension.c b/dix/extension.c index 53aaf051f..cc516b6ba 100644 --- a/dix/extension.c +++ b/dix/extension.c @@ -228,20 +228,6 @@ StandardMinorOpcode(ClientPtr client) return ((xReq *)client->requestBuffer)->data; } -unsigned short -MinorOpcodeOfRequest(ClientPtr client) -{ - unsigned char major; - - major = ((xReq *)client->requestBuffer)->reqType; - if (major < EXTENSION_BASE) - return 0; - major -= EXTENSION_BASE; - if (major >= NumExtensions) - return 0; - return (*extensions[major]->MinorOpcode)(client); -} - void CloseDownExtensions(void) { diff --git a/include/dixstruct.h b/include/dixstruct.h index 6cc961478..0a85f40b6 100644 --- a/include/dixstruct.h +++ b/include/dixstruct.h @@ -122,6 +122,7 @@ typedef struct _Client { DeviceIntPtr clientPtr; ClientIdPtr clientIds; + unsigned short majorOp, minorOp; } ClientRec; /* diff --git a/include/extension.h b/include/extension.h index ee6260eb5..17accafd9 100644 --- a/include/extension.h +++ b/include/extension.h @@ -52,8 +52,6 @@ _XFUNCPROTOBEGIN extern _X_EXPORT unsigned short StandardMinorOpcode(ClientPtr /*client*/); -extern _X_EXPORT unsigned short MinorOpcodeOfRequest(ClientPtr /*client*/); - extern _X_EXPORT Bool EnableDisableExtension(const char *name, Bool enable); extern _X_EXPORT void EnableDisableExtensionError(const char *name, Bool enable); diff --git a/record/record.c b/record/record.c index db77b64f5..b956b4ab8 100644 --- a/record/record.c +++ b/record/record.c @@ -552,7 +552,7 @@ RecordARequest(ClientPtr client) } else /* extension, check minor opcode */ { - int minorop = MinorOpcodeOfRequest(client); + int minorop = client->minorOp; int numMinOpInfo; RecordMinorOpPtr pMinorOpInfo = pRCAP->pRequestMinOpInfo; @@ -609,12 +609,9 @@ RecordAReply(CallbackListPtr *pcbl, pointer nulldata, pointer calldata) RecordContextPtr pContext; RecordClientsAndProtocolPtr pRCAP; int eci; - int majorop; ReplyInfoRec *pri = (ReplyInfoRec *)calldata; ClientPtr client = pri->client; - REQUEST(xReq); - majorop = stuff->reqType; for (eci = 0; eci < numEnabledContexts; eci++) { pContext = ppAllContexts[eci]; @@ -622,6 +619,7 @@ RecordAReply(CallbackListPtr *pcbl, pointer nulldata, pointer calldata) NULL); if (pRCAP) { + int majorop = client->majorOp; if (pContext->continuedReply) { RecordAProtocolElement(pContext, client, XRecordFromServer, @@ -642,7 +640,7 @@ RecordAReply(CallbackListPtr *pcbl, pointer nulldata, pointer calldata) } else /* extension, check minor opcode */ { - int minorop = MinorOpcodeOfRequest(client); + int minorop = client->minorOp; int numMinOpInfo; RecordMinorOpPtr pMinorOpInfo = pRCAP->pReplyMinOpInfo; assert (pMinorOpInfo); |