Previously we were only attempting to obtain a handle to an already
loaded sibling library residing in the same directory. If it wasn't
already pre-loaded, we only loaded the library by name without any
directory prefix. This could lead to not finding the correct library.
Also, it's fine if the directory prefix is empty, so there's no need for
duplicate loops.
Bug b/
110407478
Change-Id: Ia55b426e58b9f4039064bba9253dae80e4fdf5cf
Reviewed-on: https://swiftshader-review.googlesource.com/19549
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
template<int n>
void *loadLibrary(const std::string &libraryDirectory, const char *(&names)[n], const char *mustContainSymbol = nullptr)
{
- if(!libraryDirectory.empty())
+ for(const char *libraryName : names)
{
- for(int i = 0; i < n; i++)
- {
- std::string nameWithPath = libraryDirectory + names[i];
- void *library = getLibraryHandle(nameWithPath.c_str());
-
- if(library)
- {
- if(!mustContainSymbol || getProcAddress(library, mustContainSymbol))
- {
- return library;
- }
-
- freeLibrary(library);
- }
- }
- }
-
- for(int i = 0; i < n; i++)
- {
- void *library = getLibraryHandle(names[i]);
+ std::string libraryPath = libraryDirectory + libraryName;
+ void *library = getLibraryHandle(libraryPath.c_str());
if(library)
{
}
}
- for(int i = 0; i < n; i++)
+ for(const char *libraryName : names)
{
- void *library = loadLibrary(names[i]);
+ std::string libraryPath = libraryDirectory + libraryName;
+ void *library = loadLibrary(libraryPath.c_str());
if(library)
{
#define MAJOR_VERSION 4
#define MINOR_VERSION 0
#define BUILD_VERSION 0
-#define BUILD_REVISION 6
+#define BUILD_REVISION 7
#define STRINGIFY(x) #x
#define MACRO_STRINGIFY(x) STRINGIFY(x)
const char *libEGL_lib[] = {"libEGL.dll", "libEGL_translator.dll"};
#endif
#elif defined(__ANDROID__)
- #if defined(__LP64__)
- const char *libEGL_lib[] = {"/vendor/lib64/egl/libEGL_swiftshader.so", "/system/lib64/egl/libEGL_swiftshader.so"};
- #else
- const char *libEGL_lib[] = {"/vendor/lib/egl/libEGL_swiftshader.so", "/system/lib/egl/libEGL_swiftshader.so"};
- #endif
+ const char *libEGL_lib[] = {"libEGL_swiftshader.so", "libEGL_swiftshader.so"};
#elif defined(__linux__)
#if defined(__LP64__)
const char *libEGL_lib[] = {"lib64EGL_translator.so", "libEGL.so.1", "libEGL.so"};
const char *libGLES_CM_lib[] = {"libGLES_CM.dll", "libGLES_CM_translator.dll"};
#endif
#elif defined(__ANDROID__)
- #if defined(__LP64__)
- const char *libGLES_CM_lib[] = {"/vendor/lib64/egl/libGLESv1_CM_swiftshader.so", "/system/lib64/egl/libGLESv1_CM_swiftshader.so"};
- #else
- const char *libGLES_CM_lib[] = {"/vendor/lib/egl/libGLESv1_CM_swiftshader.so", "/system/lib/egl/libGLESv1_CM_swiftshader.so"};
- #endif
+ const char *libGLES_CM_lib[] = {"libGLESv1_CM_swiftshader.so", "libGLESv1_CM_swiftshader.so"};
#elif defined(__linux__)
#if defined(__LP64__)
const char *libGLES_CM_lib[] = {"lib64GLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};
const char *libGLESv2_lib[] = {"libGLESv2.dll", "libGLES_V2_translator.dll"};
#endif
#elif defined(__ANDROID__)
- #if defined(__LP64__)
- const char *libGLESv2_lib[] = {"/vendor/lib64/egl/libGLESv2_swiftshader.so", "/system/lib64/egl/libGLESv2_swiftshader.so"};
- #else
- const char *libGLESv2_lib[] = {"/vendor/lib/egl/libGLESv2_swiftshader.so", "/system/lib/egl/libGLESv2_swiftshader.so"};
- #endif
+ const char *libGLESv2_lib[] = {"libGLESv2_swiftshader.so", "libGLESv2_swiftshader.so"};
#elif defined(__linux__)
#if defined(__LP64__)
const char *libGLESv2_lib[] = {"lib64GLES_V2_translator.so", "libGLESv2.so.2", "libGLESv2.so"};