#include <stdlib.h>
#include <string.h>
#include <limits.h>
-#include <dlfcn.h>
#include "backend.h"
static const struct backend_desc backends[] = {
{ "gbm_dri.so", &gbm_dri_backend },
- { "gbm_gallium_drm.so", NULL },
};
static const void *
load_backend(const struct backend_desc *backend)
{
- char path[PATH_MAX];
const void *init = NULL;
- void *module;
- const char *name;
- const char *entrypoint = "gbm_backend";
if (backend == NULL)
return NULL;
- name = backend->name;
-
if (backend->builtin) {
init = backend->builtin;
- } else {
- if (name[0] != '/')
- snprintf(path, sizeof path, MODULEDIR "/%s", name);
- else
- snprintf(path, sizeof path, "%s", name);
-
- module = dlopen(path, RTLD_NOW | RTLD_GLOBAL);
- if (!module) {
- fprintf(stderr,
- "failed to load module: %s\n", dlerror());
- return NULL;
- }
-
- init = dlsym(module, entrypoint);
- if (!init)
- return NULL;
}
return init;