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; MSVCRT_wchar_t **MSVCRT___winitenv = 0;
int MSVCRT_timezone; int MSVCRT_timezone;
int MSVCRT_app_type; int MSVCRT_app_type;
char MSVCRT_pgm[MAX_PATH];
char* MSVCRT__pgmptr = 0; char* MSVCRT__pgmptr = 0;
WCHAR* MSVCRT__wpgmptr = 0;
/* Get a snapshot of the current environment /* Get a snapshot of the current environment
* and construct the __p__environ array * 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; } char** __p__pgmptr(void) { return &MSVCRT__pgmptr; }
/***********************************************************************
* __p__wpgmptr (MSVCRT.@)
*/
WCHAR** __p__wpgmptr(void) { return &MSVCRT__wpgmptr; }
/*********************************************************************** /***********************************************************************
* __p__fmode (MSVCRT.@) * __p__fmode (MSVCRT.@)
*/ */
@ -284,9 +289,13 @@ void msvcrt_init_args(void)
MSVCRT___initenv= msvcrt_SnapshotOfEnvironmentA(NULL); MSVCRT___initenv= msvcrt_SnapshotOfEnvironmentA(NULL);
MSVCRT___winitenv= msvcrt_SnapshotOfEnvironmentW(NULL); MSVCRT___winitenv= msvcrt_SnapshotOfEnvironmentW(NULL);
MSVCRT_pgm[0] = '\0'; MSVCRT__pgmptr = HeapAlloc(GetProcessHeap(), 0, MAX_PATH);
GetModuleFileNameA(0, MSVCRT_pgm, sizeof(MSVCRT_pgm)/sizeof(MSVCRT_pgm[0])); if (MSVCRT__pgmptr)
MSVCRT__pgmptr = MSVCRT_pgm; GetModuleFileNameA(0, MSVCRT__pgmptr, MAX_PATH);
MSVCRT__wpgmptr = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR));
if (MSVCRT__wpgmptr)
GetModuleFileNameW(0, MSVCRT__wpgmptr, MAX_PATH);
} }
@ -298,6 +307,8 @@ void msvcrt_free_args(void)
if (MSVCRT___winitenv) HeapFree(GetProcessHeap(), 0, MSVCRT___winitenv); if (MSVCRT___winitenv) HeapFree(GetProcessHeap(), 0, MSVCRT___winitenv);
if (MSVCRT__environ) HeapFree(GetProcessHeap(), 0, MSVCRT__environ); if (MSVCRT__environ) HeapFree(GetProcessHeap(), 0, MSVCRT__environ);
if (MSVCRT__wenviron) HeapFree(GetProcessHeap(), 0, MSVCRT__wenviron); 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__winmajor()
@ cdecl __p__winminor() @ cdecl __p__winminor()
@ cdecl __p__winver() @ cdecl __p__winver()
@ stub __p__wpgmptr #() @ cdecl __p__wpgmptr()
@ stub __pioinfo #() @ stub __pioinfo #()
@ stub __pxcptinfoptrs #() @ stub __pxcptinfoptrs #()
@ cdecl __set_app_type(long) MSVCRT___set_app_type @ cdecl __set_app_type(long) MSVCRT___set_app_type
@ -533,7 +533,7 @@
@ cdecl _wmktemp(wstr) @ cdecl _wmktemp(wstr)
@ varargs _wopen(wstr long) @ varargs _wopen(wstr long)
@ stub _wperror #(wstr) @ stub _wperror #(wstr)
@ stub _wpgmptr # extern @ extern _wpgmptr MSVCRT__wpgmptr
@ stub _wpopen #(wstr wstr) @ stub _wpopen #(wstr wstr)
@ cdecl _wputenv(wstr) @ cdecl _wputenv(wstr)
@ cdecl _wremove(wstr) @ cdecl _wremove(wstr)