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