Module: wine Branch: master Commit: 4935576d4a5cb13bc58eebfca1ca43bc43866ff9 URL: https://source.winehq.org/git/wine.git/?a=commit;h=4935576d4a5cb13bc58eebfca...
Author: Alexandre Julliard julliard@winehq.org Date: Fri Sep 11 11:43:21 2020 +0200
wineandroid.drv: Load libwine dynamically.
Signed-off-by: Alexandre Julliard julliard@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;