improved error handling in RegRenameKey

svn path=/trunk/; revision=18642
This commit is contained in:
Thomas Bluemel 2005-10-20 18:17:06 +00:00
parent 7da9542b29
commit 582c386e46

View file

@ -1622,23 +1622,27 @@ LONG RegRenameKey(HKEY hKey, LPCTSTR lpSubKey, LPCTSTR lpNewName)
LPTSTR lpNewSubKey = NULL; LPTSTR lpNewSubKey = NULL;
LONG Ret = 0; LONG Ret = 0;
s = _tcsrchr(lpSubKey, '\\'); s = _tcsrchr(lpSubKey, _T('\\'));
if (s) if (s)
{ {
s++; s++;
lpNewSubKey = (LPTSTR) HeapAlloc(GetProcessHeap(), 0, (s - lpSubKey + _tcslen(lpNewName) + 1) * sizeof(TCHAR)); lpNewSubKey = (LPTSTR) HeapAlloc(GetProcessHeap(), 0, (s - lpSubKey + _tcslen(lpNewName) + 1) * sizeof(TCHAR));
if (lpNewName != NULL) { if (lpNewSubKey != NULL)
{
memcpy(lpNewSubKey, lpSubKey, (s - lpSubKey) * sizeof(TCHAR)); memcpy(lpNewSubKey, lpSubKey, (s - lpSubKey) * sizeof(TCHAR));
_tcscpy(lpNewSubKey + (s - lpSubKey), lpNewName); _tcscpy(lpNewSubKey + (s - lpSubKey), lpNewName);
lpNewName = lpNewSubKey; lpNewName = lpNewSubKey;
} }
else
return ERROR_NOT_ENOUGH_MEMORY;
} }
if (lpNewName != NULL) {
Ret = RegMoveKey(hKey, lpNewName, hKey, lpSubKey); Ret = RegMoveKey(hKey, lpNewName, hKey, lpSubKey);
if (s) {
if (lpNewSubKey)
{
HeapFree(GetProcessHeap(), 0, lpNewSubKey); HeapFree(GetProcessHeap(), 0, lpNewSubKey);
} }
}
return Ret; return Ret;
} }