msvcrt: environ handling
Francois Gouget
fgouget at free.fr
Wed May 30 21:47:52 CDT 2001
Now that the environment is initialized correctly, we should free
memory too when msvcrt is being unloaded.
Changelog:
* dlls/msvcrt/data.c
Call FreeEnvironmentStrings when msvcrt is unloaded
--
Francois Gouget fgouget at free.fr http://fgouget.free.fr/
{free} || die "";
-------------- next part --------------
Index: dlls/msvcrt/data.c
===================================================================
RCS file: /home/cvs/wine/wine/dlls/msvcrt/data.c,v
retrieving revision 1.9
diff -u -r1.9 data.c
--- dlls/msvcrt/data.c 2001/05/22 19:17:26 1.9
+++ dlls/msvcrt/data.c 2001/05/30 19:46:10
@@ -42,6 +42,9 @@
int MSVCRT_timezone;
int MSVCRT_app_type;
+static char* environ_strings;
+static WCHAR* wenviron_strings;
+
typedef void (*_INITTERMFUN)(void);
/***********************************************************************
@@ -136,14 +139,14 @@
}
/* INTERNAL: Since we can't rely on Winelib startup code calling w/getmainargs,
- * we initialise data values during DLL loading. The when called by a native
+ * we initialise data values during DLL loading. When called by a native
* program we simply return the data we've already initialised. This also means
* you can call multiple times without leaking
*/
void msvcrt_init_args(void)
{
- char *cmdline, **xargv = NULL, *ptr, *env;
- WCHAR *wcmdline, **wxargv = NULL, *wptr, *wenv;
+ char *cmdline, **xargv = NULL, *ptr;
+ WCHAR *wcmdline, **wxargv = NULL, *wptr;
int xargc,end,last_arg,afterlastspace,count;
DWORD version;
@@ -222,9 +226,9 @@
TRACE("found %d arguments\n",MSVCRT___argc);
- env = GetEnvironmentStringsA();
+ environ_strings = GetEnvironmentStringsA();
count = 1; /* for NULL sentinel */
- for (ptr = env; *ptr; ptr += strlen(ptr) + 1)
+ for (ptr = environ_strings; *ptr; ptr += strlen(ptr) + 1)
{
count++;
}
@@ -232,7 +236,7 @@
if (MSVCRT__environ)
{
count = 0;
- for (ptr = env; *ptr; ptr += strlen(ptr) + 1)
+ for (ptr = environ_strings; *ptr; ptr += strlen(ptr) + 1)
{
MSVCRT__environ[count++] = ptr;
}
@@ -241,9 +245,9 @@
MSVCRT___initenv = MSVCRT__environ;
- wenv = GetEnvironmentStringsW();
+ wenviron_strings = GetEnvironmentStringsW();
count = 1; /* for NULL sentinel */
- for (wptr = wenv; *wptr; wptr += lstrlenW(wptr) + 1)
+ for (wptr = wenviron_strings; *wptr; wptr += lstrlenW(wptr) + 1)
{
count++;
}
@@ -251,7 +255,7 @@
if (MSVCRT__wenviron)
{
count = 0;
- for (wptr = wenv; *wptr; wptr += lstrlenW(wptr) + 1)
+ for (wptr = wenviron_strings; *wptr; wptr += lstrlenW(wptr) + 1)
{
MSVCRT__wenviron[count++] = wptr;
}
@@ -264,7 +268,9 @@
/* INTERNAL: free memory used by args */
void msvcrt_free_args(void)
{
- /* FIXME */
+ /* FIXME: more things to free */
+ FreeEnvironmentStringsA(environ_strings);
+ FreeEnvironmentStringsW(wenviron_strings);
}
/*********************************************************************
More information about the wine-patches
mailing list