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)); {
_tcscpy(lpNewSubKey + (s - lpSubKey), lpNewName); memcpy(lpNewSubKey, lpSubKey, (s - lpSubKey) * sizeof(TCHAR));
lpNewName = lpNewSubKey; _tcscpy(lpNewSubKey + (s - lpSubKey), lpNewName);
} lpNewName = lpNewSubKey;
}
else
return ERROR_NOT_ENOUGH_MEMORY;
}
Ret = RegMoveKey(hKey, lpNewName, hKey, lpSubKey);
if (lpNewSubKey)
{
HeapFree(GetProcessHeap(), 0, lpNewSubKey);
} }
if (lpNewName != NULL) {
Ret = RegMoveKey(hKey, lpNewName, hKey, lpSubKey);
if (s) {
HeapFree(GetProcessHeap(), 0, lpNewSubKey);
}
}
return Ret; return Ret;
} }