1054f235c61f3840213d2bd53d28202a372b53741Steven Thomas#include <dlfcn.h> 2054f235c61f3840213d2bd53d28202a372b53741Steven Thomas#include <jni.h> 3054f235c61f3840213d2bd53d28202a372b53741Steven Thomas 4054f235c61f3840213d2bd53d28202a372b53741Steven Thomas#include <string> 5054f235c61f3840213d2bd53d28202a372b53741Steven Thomas 6054f235c61f3840213d2bd53d28202a372b53741Steven Thomasextern "C" { 7054f235c61f3840213d2bd53d28202a372b53741Steven Thomas 8054f235c61f3840213d2bd53d28202a372b53741Steven ThomasJNIEXPORT jlong JNICALL 9054f235c61f3840213d2bd53d28202a372b53741Steven ThomasJava_com_google_vr_platform_Dvr_nativeLoadLibrary( 10054f235c61f3840213d2bd53d28202a372b53741Steven Thomas JNIEnv* env, jclass, jstring java_library) { 11054f235c61f3840213d2bd53d28202a372b53741Steven Thomas if (!java_library) 12054f235c61f3840213d2bd53d28202a372b53741Steven Thomas return 0; 13054f235c61f3840213d2bd53d28202a372b53741Steven Thomas 14054f235c61f3840213d2bd53d28202a372b53741Steven Thomas // Convert the Java String object to a C++ null-terminated string. 15054f235c61f3840213d2bd53d28202a372b53741Steven Thomas const char* data = env->GetStringUTFChars(java_library, NULL); 16054f235c61f3840213d2bd53d28202a372b53741Steven Thomas size_t size = env->GetStringUTFLength(java_library); 17054f235c61f3840213d2bd53d28202a372b53741Steven Thomas std::string library(data, size); 18054f235c61f3840213d2bd53d28202a372b53741Steven Thomas env->ReleaseStringUTFChars(java_library, data); 19054f235c61f3840213d2bd53d28202a372b53741Steven Thomas 20054f235c61f3840213d2bd53d28202a372b53741Steven Thomas // Return the handle to the requested library. 21054f235c61f3840213d2bd53d28202a372b53741Steven Thomas return reinterpret_cast<jlong>( 22054f235c61f3840213d2bd53d28202a372b53741Steven Thomas dlopen(library.c_str(), RTLD_NOW | RTLD_LOCAL)); 23054f235c61f3840213d2bd53d28202a372b53741Steven Thomas} 24054f235c61f3840213d2bd53d28202a372b53741Steven Thomas 25054f235c61f3840213d2bd53d28202a372b53741Steven Thomas} // extern "C" 26