Alexandre Julliard : libwine: Export __wine_get_main_environment on Mac OS to make sure it' s reevaluated when used.
Alexandre Julliard
julliard at winehq.org
Wed Apr 1 10:11:28 CDT 2009
Module: wine
Branch: master
Commit: 8edf353bd2b03994357f7e3e1191a8c8ff71c12d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8edf353bd2b03994357f7e3e1191a8c8ff71c12d
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Apr 1 14:36:49 2009 +0200
libwine: Export __wine_get_main_environment on Mac OS to make sure it's reevaluated when used.
---
dlls/kernel32/process.c | 11 +++++++++--
include/wine/library.h | 1 -
libs/wine/loader.c | 14 +++++++++++++-
3 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index f2d8567..0dd7f67 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -56,6 +56,13 @@ WINE_DEFAULT_DEBUG_CHANNEL(process);
WINE_DECLARE_DEBUG_CHANNEL(file);
WINE_DECLARE_DEBUG_CHANNEL(relay);
+#ifdef __APPLE__
+extern char **__wine_get_main_environment(void);
+#define environ __wine_get_main_environment()
+#else
+extern char **environ;
+#endif
+
typedef struct
{
LPSTR lpEnvAddress;
@@ -267,7 +274,7 @@ static BOOL find_exe_file( const WCHAR *name, WCHAR *buffer, int buflen, HANDLE
*
* Build the Win32 environment from the Unix environment
*/
-static BOOL build_initial_environment( char **environ )
+static BOOL build_initial_environment(void)
{
SIZE_T size = 1;
char **e;
@@ -989,7 +996,7 @@ void CDECL __wine_kernel_init(void)
if (!params->Environment)
{
/* Copy the parent environment */
- if (!build_initial_environment( __wine_main_environ )) exit(1);
+ if (!build_initial_environment()) exit(1);
/* convert old configuration to new format */
convert_old_config();
diff --git a/include/wine/library.h b/include/wine/library.h
index 1102390..474cfb2 100644
--- a/include/wine/library.h
+++ b/include/wine/library.h
@@ -65,7 +65,6 @@ extern int wine_dll_get_owner( const char *name, char *buffer, int size, int *fi
extern int __wine_main_argc;
extern char **__wine_main_argv;
extern WCHAR **__wine_main_wargv;
-extern char **__wine_main_environ;
extern void __wine_dll_register( const IMAGE_NT_HEADERS *header, const char *filename );
extern void wine_init( int argc, char *argv[], char *error, int error_size );
diff --git a/libs/wine/loader.c b/libs/wine/loader.c
index b7dd8b3..d10a6e0 100644
--- a/libs/wine/loader.c
+++ b/libs/wine/loader.c
@@ -441,6 +441,18 @@ static void *map_dll( const IMAGE_NT_HEADERS *nt_descr )
/***********************************************************************
+ * __wine_get_main_environment
+ *
+ * Return an environment pointer to work around lack of environ variable.
+ * Only exported on Mac OS.
+ */
+char **__wine_get_main_environment(void)
+{
+ return environ;
+}
+
+
+/***********************************************************************
* __wine_dll_register
*
* Register a built-in DLL descriptor.
@@ -638,7 +650,7 @@ void wine_init( int argc, char *argv[], char *error, int error_size )
build_dll_path();
__wine_main_argc = argc;
__wine_main_argv = argv;
- __wine_main_environ = environ;
+ __wine_main_environ = __wine_get_main_environment();
mmap_init();
for (path = first_dll_path( "ntdll.dll", 0, &context ); path; path = next_dll_path( &context ))
More information about the wine-cvs
mailing list