+ open_wrapper_handles ();
+}
+
+static void
+call_first_gl_call_callbacks (void)
+{
+ char *callbacks = getenv ("GLAZE_FIRST_GL_CALL_CALLBACK");
+ char *name, *names, *save;
+ void (*callback) (void);
+ int i;
+
+ if (callbacks == NULL)
+ return;
+
+ names = strdup (callbacks);
+ if (names == NULL) {
+ fprintf (stderr, "Out of memory\n");
+ exit (1);
+ }
+
+ for (name = strtok_r (names, ":", &save);
+ name;
+ name = strtok_r (NULL, ":", &save))
+ {
+ for (i = 0; i < num_wrapper_handles; i++) {
+ callback = dlsym (wrapper_handles[i], name);
+ if (callback) {
+ (callback) ();
+ goto NEXT_NAME;
+ }
+ }
+ fprintf (stderr, "Error: Failed to find function %s "
+ "in any GLAZE_WRAPPER library.\n", name);
+ NEXT_NAME:
+ ;
+ }
+
+ free (names);
+}
+
+static void *
+find_symbol_in_glaze_wrappers (const char *name)
+{
+ void *symbol;
+ int i;
+
+ for (i = 0; i < num_wrapper_handles; i++) {
+ symbol = dlsym (wrapper_handles[i], name);
+ if (symbol)
+ return symbol;
+ }
+
+ return NULL;