Author: hpoussin
Date: Mon Aug 13 18:18:49 2007
New Revision: 28314
URL:
http://svn.reactos.org/svn/reactos?rev=28314&view=rev
Log:
Take care of lpProfileInfo->lpProfilePath in LoadUserProfileW
Return required size in GetUserProfileDirectoryW if buffer is too small
Modified:
trunk/reactos/dll/win32/userenv/profile.c
Modified: trunk/reactos/dll/win32/userenv/profile.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/userenv/profile.…
==============================================================================
--- trunk/reactos/dll/win32/userenv/profile.c (original)
+++ trunk/reactos/dll/win32/userenv/profile.c Mon Aug 13 18:18:49 2007
@@ -766,7 +766,7 @@
dwLength = wcslen (szImagePath) + 1;
if (*lpcchSize < dwLength)
{
- DPRINT1 ("Buffer too small\n");
+ *lpcchSize = dwLength;
SetLastError (ERROR_INSUFFICIENT_BUFFER);
return FALSE;
}
@@ -859,10 +859,18 @@
return TRUE;
}
- if (!GetProfilesDirectoryW(szUserHivePath, &dwLength))
- {
- DPRINT1("GetProfilesDirectoryW() failed (error %ld)\n",
GetLastError());
- return FALSE;
+ if (lpProfileInfo->lpProfilePath)
+ {
+ wcscpy(szUserHivePath, lpProfileInfo->lpProfilePath);
+ }
+ else
+ {
+ /* FIXME: check if MS Windows allows lpProfileInfo->lpProfilePath to be NULL
*/
+ if (!GetProfilesDirectoryW(szUserHivePath, &dwLength))
+ {
+ DPRINT1("GetProfilesDirectoryW() failed (error %ld)\n",
GetLastError());
+ return FALSE;
+ }
}
wcscat(szUserHivePath, L"\\");