MCPcopy Create free account
hub / github.com/VirtualGL/virtualgl / loadEGLSymbol

Function loadEGLSymbol

server/faker-sym.cpp:182–245  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

180
181
182static void *loadEGLSymbol(const char *name, bool optional)
183{
184 char *err = NULL;
185
186 if(!__eglGetProcAddress)
187 {
188 if(strlen(fconfig.egllib) > 0)
189 {
190 dlerror(); // Clear error state
191 void *dllhnd = _vgl_dlopen(fconfig.egllib, RTLD_LAZY);
192 err = dlerror();
193 if(!dllhnd)
194 {
195 vglout.print("[VGL] ERROR: Could not open %s\n", fconfig.egllib);
196 if(err) vglout.print("[VGL] %s\n", err);
197 return NULL;
198 }
199 egldllhnd = dllhnd;
200 }
201 else egldllhnd = RTLD_NEXT;
202
203 dlerror(); // Clear error state
204 __eglGetProcAddress =
205 (_eglGetProcAddressType)dlsym(egldllhnd, "eglGetProcAddress");
206 err = dlerror();
207
208 if(!__eglGetProcAddress)
209 {
210 vglout.print("[VGL] ERROR: Could not load EGL functions");
211 if(strlen(fconfig.egllib) > 0)
212 vglout.print(" from %s", fconfig.egllib);
213 vglout.print("\n");
214 if(err) vglout.print("[VGL] %s\n", err);
215 return NULL;
216 }
217 }
218
219 void *sym = NULL;
220 if(!strcmp(name, "eglGetProcAddress"))
221 sym = (void *)__eglGetProcAddress;
222 else
223 {
224 if(fconfig.dlsymloader)
225 {
226 dlerror(); // Clear error state
227 sym = dlsym(egldllhnd, (char *)name);
228 err = dlerror();
229 }
230 else
231 {
232 sym = (void *)__eglGetProcAddress(name);
233 }
234 }
235
236 if(!sym && (fconfig.verbose || !optional))
237 {
238 vglout.print("[VGL] %s: Could not load function \"%s\"",
239 optional ? "WARNING" : "ERROR", name);

Callers 1

loadSymbolFunction · 0.85

Calls 2

_vgl_dlopenFunction · 0.85
printMethod · 0.45

Tested by

no test coverage detected