dlls/kernel/process.c breakage due to environ

Gerald Pfeifer pfeifer at dbai.tuwien.ac.at
Fri Oct 10 03:16:09 CDT 2003


My nightly autobuilder failed to build today, after I've had no
problems for several days.  This seems to be due to yesterday's
changes in dlls/kernel:

  process.o: In function `build_initial_environment':
  wine/dlls/kernel/process.c:341: undefined reference to `environ'
  wine/dlls/kernel/process.c:357: undefined reference to `environ'
  process.o: In function `build_envp':
  wine/dlls/kernel/process.c:1018: undefined reference to `environ'
  gmake[2]: *** [kernel32.dll.so] Error 1

Part of the fix is the patch below, but this is not sufficient, as
environ simply is non-standard.  On my SuSE 8.2 box, for example,
/usr/include/unistd.h says:

  #ifdef __USE_GNU
  extern char **environ;
  #endif

In other words, on GNU/Linux you are just lucky because even if the
symbol is not declared (which is why you need the extern declaration)
it is in the library.

Gerald


ChangeLog:
Declare environ at the top, not inside functions.

Index: process.c
===================================================================
RCS file: /home/wine/wine/dlls/kernel/process.c,v
retrieving revision 1.24
diff -u -3 -p -r1.24 process.c
--- process.c	10 Oct 2003 00:12:17 -0000	1.24
+++ process.c	10 Oct 2003 08:11:52 -0000
@@ -73,6 +73,8 @@ extern void SHELL_LoadRegistry(void);
 extern void VERSION_Init( const WCHAR *appname );
 extern void MODULE_InitLoadPath(void);

+extern char **environ;
+
 /***********************************************************************
  *           contains_path
  */
@@ -331,7 +333,6 @@ static HMODULE load_pe_exe( const WCHAR
  */
 static BOOL build_initial_environment(void)
 {
-    extern char **environ;
     ULONG size = 1;
     char **e;
     WCHAR *p, *endptr;
@@ -1007,7 +1008,6 @@ static char **build_envp( const WCHAR *e

     if ((envp = malloc( count * sizeof(*envp) )))
     {
-        extern char **environ;
         char **envptr = envp;
         char **unixptr = environ;
         char *p;



More information about the wine-devel mailing list