Implement __p__wpgmptr, _wpgmptr.

Avoid using static storage for pgm pointers.
This commit is contained in:
Jon Griffiths 2003-07-18 22:54:47 +00:00 committed by Alexandre Julliard
parent f554f8f58f
commit 622a343e9f
2 changed files with 21 additions and 10 deletions

View file

@ -62,8 +62,8 @@ char **MSVCRT___initenv = 0;
MSVCRT_wchar_t **MSVCRT___winitenv = 0;
int MSVCRT_timezone;
int MSVCRT_app_type;
char MSVCRT_pgm[MAX_PATH];
char* MSVCRT__pgmptr = 0;
WCHAR* MSVCRT__wpgmptr = 0;
/* Get a snapshot of the current environment
* and construct the __p__environ array
@ -155,6 +155,11 @@ unsigned int* __p__commode(void) { return &MSVCRT__commode; }
*/
char** __p__pgmptr(void) { return &MSVCRT__pgmptr; }
/***********************************************************************
* __p__wpgmptr (MSVCRT.@)
*/
WCHAR** __p__wpgmptr(void) { return &MSVCRT__wpgmptr; }
/***********************************************************************
* __p__fmode (MSVCRT.@)
*/
@ -284,9 +289,13 @@ void msvcrt_init_args(void)
MSVCRT___initenv= msvcrt_SnapshotOfEnvironmentA(NULL);
MSVCRT___winitenv= msvcrt_SnapshotOfEnvironmentW(NULL);
MSVCRT_pgm[0] = '\0';
GetModuleFileNameA(0, MSVCRT_pgm, sizeof(MSVCRT_pgm)/sizeof(MSVCRT_pgm[0]));
MSVCRT__pgmptr = MSVCRT_pgm;
MSVCRT__pgmptr = HeapAlloc(GetProcessHeap(), 0, MAX_PATH);
if (MSVCRT__pgmptr)
GetModuleFileNameA(0, MSVCRT__pgmptr, MAX_PATH);
MSVCRT__wpgmptr = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR));
if (MSVCRT__wpgmptr)
GetModuleFileNameW(0, MSVCRT__wpgmptr, MAX_PATH);
}
@ -294,10 +303,12 @@ void msvcrt_init_args(void)
void msvcrt_free_args(void)
{
/* FIXME: more things to free */
if (MSVCRT___initenv) HeapFree(GetProcessHeap(), 0,MSVCRT___initenv);
if (MSVCRT___winitenv) HeapFree(GetProcessHeap(), 0,MSVCRT___winitenv);
if (MSVCRT__environ) HeapFree(GetProcessHeap(), 0,MSVCRT__environ);
if (MSVCRT__wenviron) HeapFree(GetProcessHeap(), 0,MSVCRT__wenviron);
if (MSVCRT___initenv) HeapFree(GetProcessHeap(), 0, MSVCRT___initenv);
if (MSVCRT___winitenv) HeapFree(GetProcessHeap(), 0, MSVCRT___winitenv);
if (MSVCRT__environ) HeapFree(GetProcessHeap(), 0, MSVCRT__environ);
if (MSVCRT__wenviron) HeapFree(GetProcessHeap(), 0, MSVCRT__wenviron);
if (MSVCRT__pgmptr) HeapFree(GetProcessHeap(), 0, MSVCRT__pgmptr);
if (MSVCRT__wpgmptr) HeapFree(GetProcessHeap(), 0, MSVCRT__wpgmptr);
}
/*********************************************************************

View file

@ -128,7 +128,7 @@
@ cdecl __p__winmajor()
@ cdecl __p__winminor()
@ cdecl __p__winver()
@ stub __p__wpgmptr #()
@ cdecl __p__wpgmptr()
@ stub __pioinfo #()
@ stub __pxcptinfoptrs #()
@ cdecl __set_app_type(long) MSVCRT___set_app_type
@ -533,7 +533,7 @@
@ cdecl _wmktemp(wstr)
@ varargs _wopen(wstr long)
@ stub _wperror #(wstr)
@ stub _wpgmptr # extern
@ extern _wpgmptr MSVCRT__wpgmptr
@ stub _wpopen #(wstr wstr)
@ cdecl _wputenv(wstr)
@ cdecl _wremove(wstr)