Mesa (master): glx/glvnd: Use bsearch() in FindGLXFunction instead of open-coding it

Adam Jackson ajax at kemper.freedesktop.org
Wed Nov 2 18:52:59 UTC 2016


Module: Mesa
Branch: master
Commit: afaaf623d4d95b3ac736e72c744f683a2b804e1d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=afaaf623d4d95b3ac736e72c744f683a2b804e1d

Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Sep 14 14:02:56 2016 -0400

glx/glvnd: Use bsearch() in FindGLXFunction instead of open-coding it

Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>
Signed-off-by: Adam Jackson <ajax at redhat.com>

---

 src/glx/glxglvnd.c | 34 ++++++++++++++++------------------
 1 file changed, 16 insertions(+), 18 deletions(-)

diff --git a/src/glx/glxglvnd.c b/src/glx/glxglvnd.c
index 2fc9b00..b6b4151 100644
--- a/src/glx/glxglvnd.c
+++ b/src/glx/glxglvnd.c
@@ -1,11 +1,11 @@
 #include <string.h>
+#include <stdlib.h>
 #include <X11/Xlib.h>
 
 #include "glvnd/libglxabi.h"
 
 #include "glxglvnd.h"
 
-
 static Bool __glXGLVNDIsScreenSupported(Display *dpy, int screen)
 {
     /* TODO: Think of a better heuristic... */
@@ -17,26 +17,24 @@ static void *__glXGLVNDGetProcAddress(const GLubyte *procName)
     return glXGetProcAddressARB(procName);
 }
 
+static int
+compare(const void *l, const void *r)
+{
+    const char *s = *(const char **)r;
+    return strcmp(l, s);
+}
+
 static unsigned FindGLXFunction(const GLubyte *name)
 {
-    int first = 0;
-    int last = DI_FUNCTION_COUNT - 1;
-
-    while (first <= last) {
-        int middle = (first + last) / 2;
-        int comp = strcmp(__glXDispatchTableStrings[middle],
-                          (const char *) name);
-
-        if (comp < 0)
-            first = middle + 1;
-        else if (comp > 0)
-            last = middle - 1;
-        else
-            return middle;
-    }
+    const char **match;
+
+    match = bsearch(name, __glXDispatchTableStrings, DI_FUNCTION_COUNT,
+                    sizeof(const char *), compare);
+
+    if (match == NULL)
+        return DI_FUNCTION_COUNT;
 
-    /* Just point to the dummy entry at the end of the respective table */
-    return DI_FUNCTION_COUNT;
+    return match - __glXDispatchTableStrings;
 }
 
 static void *__glXGLVNDGetDispatchAddress(const GLubyte *procName)




More information about the mesa-commit mailing list