X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fglx%2Fglxglvnd.c;h=b6b415114c9fd29afaac83fc6b9841bd21765562;hb=acfd88204e886e671da97b895fd2d1ee39b61256;hp=c7c35ca3a14753cf03ed5663fd77e9913d98e5c5;hpb=22a9e00aab66d3dd6890e9eaac3f429c0ddec17e;p=mesa.git diff --git a/src/glx/glxglvnd.c b/src/glx/glxglvnd.c index c7c35ca3a14..b6b415114c9 100644 --- a/src/glx/glxglvnd.c +++ b/src/glx/glxglvnd.c @@ -1,11 +1,11 @@ #include +#include #include #include "glvnd/libglxabi.h" #include "glxglvnd.h" - static Bool __glXGLVNDIsScreenSupported(Display *dpy, int screen) { /* TODO: Think of a better heuristic... */ @@ -17,34 +17,41 @@ static void *__glXGLVNDGetProcAddress(const GLubyte *procName) return glXGetProcAddressARB(procName); } -static int FindGLXFunction(const GLubyte *name) +static int +compare(const void *l, const void *r) { - int i; + const char *s = *(const char **)r; + return strcmp(l, s); +} - for (i = 0; i < DI_FUNCTION_COUNT; i++) { - if (strcmp((const char *) name, __glXDispatchTableStrings[i]) == 0) - return i; - } - return -1; +static unsigned FindGLXFunction(const GLubyte *name) +{ + const char **match; + + match = bsearch(name, __glXDispatchTableStrings, DI_FUNCTION_COUNT, + sizeof(const char *), compare); + + if (match == NULL) + return DI_FUNCTION_COUNT; + + return match - __glXDispatchTableStrings; } static void *__glXGLVNDGetDispatchAddress(const GLubyte *procName) { - int internalIndex = FindGLXFunction(procName); + unsigned internalIndex = FindGLXFunction(procName); - if (internalIndex >= 0) { - return __glXDispatchFunctions[internalIndex]; - } - - return NULL; + return __glXDispatchFunctions[internalIndex]; } static void __glXGLVNDSetDispatchIndex(const GLubyte *procName, int index) { - int internalIndex = FindGLXFunction(procName); + unsigned internalIndex = FindGLXFunction(procName); + + if (internalIndex == DI_FUNCTION_COUNT) + return; /* unknown or static dispatch */ - if (internalIndex >= 0) - __glXDispatchTableIndices[internalIndex] = index; + __glXDispatchTableIndices[internalIndex] = index; } _X_EXPORT Bool __glx_Main(uint32_t version, const __GLXapiExports *exports,