Take care of lpProfileInfo->lpProfilePath in LoadUserProfileW

Return required size in GetUserProfileDirectoryW if buffer is too small

svn path=/trunk/; revision=28314
This commit is contained in:
Hervé Poussineau 2007-08-13 14:18:49 +00:00
parent e78d113358
commit c13edbee03

View file

@ -766,7 +766,7 @@ GetUserProfileDirectoryW (HANDLE hToken,
dwLength = wcslen (szImagePath) + 1; dwLength = wcslen (szImagePath) + 1;
if (*lpcchSize < dwLength) if (*lpcchSize < dwLength)
{ {
DPRINT1 ("Buffer too small\n"); *lpcchSize = dwLength;
SetLastError (ERROR_INSUFFICIENT_BUFFER); SetLastError (ERROR_INSUFFICIENT_BUFFER);
return FALSE; return FALSE;
} }
@ -859,11 +859,19 @@ LoadUserProfileW(
return TRUE; return TRUE;
} }
if (lpProfileInfo->lpProfilePath)
{
wcscpy(szUserHivePath, lpProfileInfo->lpProfilePath);
}
else
{
/* FIXME: check if MS Windows allows lpProfileInfo->lpProfilePath to be NULL */
if (!GetProfilesDirectoryW(szUserHivePath, &dwLength)) if (!GetProfilesDirectoryW(szUserHivePath, &dwLength))
{ {
DPRINT1("GetProfilesDirectoryW() failed (error %ld)\n", GetLastError()); DPRINT1("GetProfilesDirectoryW() failed (error %ld)\n", GetLastError());
return FALSE; return FALSE;
} }
}
wcscat(szUserHivePath, L"\\"); wcscat(szUserHivePath, L"\\");
wcscat(szUserHivePath, lpProfileInfo->lpUserName); wcscat(szUserHivePath, lpProfileInfo->lpUserName);