Alexandre Julliard : wineandroid.drv: Load libwine dynamically.

Alexandre Julliard julliard at winehq.org
Fri Sep 11 14:51:44 CDT 2020


Module: wine
Branch: master
Commit: 4935576d4a5cb13bc58eebfca1ca43bc43866ff9
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=4935576d4a5cb13bc58eebfca1ca43bc43866ff9

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri Sep 11 11:43:21 2020 +0200

wineandroid.drv: Load libwine dynamically.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wineandroid.drv/Makefile.in |  1 -
 dlls/wineandroid.drv/android.h   |  4 ++--
 dlls/wineandroid.drv/device.c    |  4 ++--
 dlls/wineandroid.drv/init.c      | 17 ++++++++++++++---
 4 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/dlls/wineandroid.drv/Makefile.in b/dlls/wineandroid.drv/Makefile.in
index fcc988b211..aab69c88de 100644
--- a/dlls/wineandroid.drv/Makefile.in
+++ b/dlls/wineandroid.drv/Makefile.in
@@ -1,6 +1,5 @@
 MODULE  = wineandroid.drv
 IMPORTS = uuid ole32 user32 gdi32 advapi32 ntoskrnl
-EXTRALIBS = -lwine
 
 C_SRCS = \
 	device.c \
diff --git a/dlls/wineandroid.drv/android.h b/dlls/wineandroid.drv/android.h
index befaa3c27d..7db10d87f1 100644
--- a/dlls/wineandroid.drv/android.h
+++ b/dlls/wineandroid.drv/android.h
@@ -155,7 +155,7 @@ union event_data
 
 int send_event( const union event_data *data ) DECLSPEC_HIDDEN;
 
-extern JavaVM *wine_get_java_vm(void);
-extern jobject wine_get_java_object(void);
+extern JavaVM * (*p_wine_get_java_vm)(void);
+extern jobject (*p_wine_get_java_object)(void);
 
 #endif  /* __WINE_ANDROID_H */
diff --git a/dlls/wineandroid.drv/device.c b/dlls/wineandroid.drv/device.c
index c9321c4899..c2eb63382a 100644
--- a/dlls/wineandroid.drv/device.c
+++ b/dlls/wineandroid.drv/device.c
@@ -687,7 +687,7 @@ static int status_to_android_error( NTSTATUS status )
 
 static jobject load_java_method( jmethodID *method, const char *name, const char *args )
 {
-    jobject object = wine_get_java_object();
+    jobject object = p_wine_get_java_object();
 
     if (!*method)
     {
@@ -1163,7 +1163,7 @@ static DWORD CALLBACK device_thread( void *arg )
 
     TRACE( "starting process %x\n", GetCurrentProcessId() );
 
-    if (!(java_vm = wine_get_java_vm())) return 0;  /* not running under Java */
+    if (!(java_vm = p_wine_get_java_vm())) return 0;  /* not running under Java */
 
     init_java_thread( java_vm );
 
diff --git a/dlls/wineandroid.drv/init.c b/dlls/wineandroid.drv/init.c
index 7b2850e452..43d4de0d6d 100644
--- a/dlls/wineandroid.drv/init.c
+++ b/dlls/wineandroid.drv/init.c
@@ -104,7 +104,7 @@ void set_screen_dpi( DWORD dpi )
  */
 static void fetch_display_metrics(void)
 {
-    if (wine_get_java_vm()) return;  /* for Java threads it will be set when the top view is created */
+    if (p_wine_get_java_vm()) return;  /* for Java threads it will be set when the top view is created */
 
     SERVER_START_REQ( get_window_rectangles )
     {
@@ -620,16 +620,27 @@ static void load_android_libs(void)
 #undef DECL_FUNCPTR
 #undef LOAD_FUNCPTR
 
+JavaVM * (*p_wine_get_java_vm)(void) = NULL;
+jobject (*p_wine_get_java_object)(void) = NULL;
+
 static BOOL process_attach(void)
 {
     jclass class;
-    jobject object = wine_get_java_object();
+    jobject object;
     JNIEnv *jni_env;
     JavaVM *java_vm;
+    void *libwine;
+
+    if (!(libwine = dlopen( "libwine.so", RTLD_NOW ))) return FALSE;
+
+    p_wine_get_java_vm = dlsym( libwine, "wine_get_java_vm" );
+    p_wine_get_java_object = dlsym( libwine, "wine_get_java_object" );
+
+    object = p_wine_get_java_object();
 
     load_hardware_libs();
 
-    if ((java_vm = wine_get_java_vm()))  /* running under Java */
+    if ((java_vm = p_wine_get_java_vm()))  /* running under Java */
     {
 #ifdef __i386__
         WORD old_fs;




More information about the wine-cvs mailing list