(!1880) dix: simplify extension query

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2025-03-25 14:58:55 +01:00
parent c8604a144d
commit 49faf3ca53

View File

@ -142,19 +142,6 @@ AddExtension(const char *name, int NumEvents, int NumErrors,
return ext; return ext;
} }
static int
FindExtension(const char *extname, int len)
{
int i;
for (i = 0; i < NumExtensions; i++) {
if ((strlen(extensions[i]->name) == len) &&
!strncmp(extname, extensions[i]->name, len))
break;
}
return ((i == NumExtensions) ? -1 : i);
}
/* /*
* CheckExtension returns the extensions[] entry for the requested * CheckExtension returns the extensions[] entry for the requested
* extension name. Maybe this could just return a Bool instead? * extension name. Maybe this could just return a Bool instead?
@ -162,12 +149,12 @@ FindExtension(const char *extname, int len)
ExtensionEntry * ExtensionEntry *
CheckExtension(const char *extname) CheckExtension(const char *extname)
{ {
int n; for (int i = 0; i < NumExtensions; i++) {
if (extensions[i] &&
n = FindExtension(extname, strlen(extname)); extensions[i]->name &&
if (n != -1) strcmp(extensions[i]->name, extname) == 0)
return extensions[n]; return extensions[i];
else }
return NULL; return NULL;
} }
@ -224,7 +211,6 @@ int
ProcQueryExtension(ClientPtr client) ProcQueryExtension(ClientPtr client)
{ {
xQueryExtensionReply reply; xQueryExtensionReply reply;
int i;
REQUEST(xQueryExtensionReq); REQUEST(xQueryExtensionReq);
@ -240,14 +226,17 @@ ProcQueryExtension(ClientPtr client)
if (!NumExtensions) if (!NumExtensions)
reply.present = xFalse; reply.present = xFalse;
else { else {
i = FindExtension((char *) &stuff[1], stuff->nbytes); char extname[PATH_MAX] = { 0 };
if (i < 0 || !ExtensionAvailable(client, extensions[i])) strncpy(extname, (char *) &stuff[1], min(stuff->nbytes, sizeof(extname)-1));
ExtensionEntry *extEntry = CheckExtension(extname);
if (!extEntry || !ExtensionAvailable(client, extEntry))
reply.present = xFalse; reply.present = xFalse;
else { else {
reply.present = xTrue; reply.present = xTrue;
reply.major_opcode = extensions[i]->base; reply.major_opcode = extEntry->base;
reply.first_event = extensions[i]->eventBase; reply.first_event = extEntry->eventBase;
reply.first_error = extensions[i]->errorBase; reply.first_error = extEntry->errorBase;
} }
} }
WriteReplyToClient(client, sizeof(xQueryExtensionReply), &reply); WriteReplyToClient(client, sizeof(xQueryExtensionReply), &reply);