/** * Load a module and create the driver object. */ static EGLBoolean _eglLoadModule(_EGLModule *mod) { _EGLMain_t mainFunc; lib_handle lib; _EGLDriver *drv; if (mod->Driver) return EGL_TRUE; if (mod->BuiltIn) { lib = (lib_handle) NULL; mainFunc = mod->BuiltIn; } else { mainFunc = _eglOpenLibrary(mod->Path, &lib); if (!mainFunc) return EGL_FALSE; } drv = mainFunc(NULL); if (!drv) { return EGL_FALSE; } if (!drv->Name) { _eglLog(_EGL_WARNING, "Driver loaded from %s has no name", mod->Path); drv->Name = "UNNAMED"; } mod->Handle = (void *) lib; mod->Driver = drv; return EGL_TRUE; }
/** * Load the named driver. The path and args passed will be * owned by the driver and freed. */ static _EGLDriver * _eglLoadDriver(char *path, char *args) { _EGLMain_t mainFunc; lib_handle lib; _EGLDriver *drv = NULL; mainFunc = _eglOpenLibrary(path, &lib); if (!mainFunc) return NULL; drv = mainFunc(args); if (!drv) { if (lib) close_library(lib); return NULL; } if (!drv->Name) { _eglLog(_EGL_WARNING, "Driver loaded from %s has no name", path); drv->Name = "UNNAMED"; } drv->Path = path; drv->Args = args; drv->LibHandle = lib; return drv; }