OSDN Git Service

Newly load sibling library from the same directory.
authorNicolas Capens <capn@google.com>
Thu, 21 Jun 2018 05:42:30 +0000 (01:42 -0400)
committerNicolas Capens <nicolascapens@google.com>
Fri, 22 Jun 2018 14:53:30 +0000 (14:53 +0000)
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>
src/Common/SharedLibrary.hpp
src/Common/Version.h
src/OpenGL/libEGL/libEGL.hpp
src/OpenGL/libGLES_CM/libGLES_CM.hpp
src/OpenGL/libGLESv2/libGLESv2.hpp

index 85e5e7d..39945f3 100644 (file)
@@ -31,28 +31,10 @@ void *getProcAddress(void *library, const char *name);
 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)
                {
@@ -65,9 +47,10 @@ void *loadLibrary(const std::string &libraryDirectory, const char *(&names)[n],
                }
        }
 
-       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)
                {
index 9a28e1b..6b422ac 100644 (file)
@@ -15,7 +15,7 @@
 #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)
index 7ef0d31..74ddf65 100644 (file)
@@ -99,11 +99,7 @@ private:
                                        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"};
index b9c29f5..10b8e9a 100644 (file)
@@ -260,11 +260,7 @@ private:
                                        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"};
index 1677d16..0c617c9 100644 (file)
@@ -285,11 +285,7 @@ private:
                                        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"};