diff --git a/dlls/msvcrt/data.c b/dlls/msvcrt/data.c index aaeb4fd4e1e..36b75a5faf4 100644 --- a/dlls/msvcrt/data.c +++ b/dlls/msvcrt/data.c @@ -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); } /********************************************************************* diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 1d350d59091..cf4ed4511b1 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -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)