regedit: Use the heap_*() functions in treeview.c where possible.

Signed-off-by: Hugh McMaster <hugh.mcmaster@outlook.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Hugh McMaster 2017-07-28 13:22:18 +00:00 committed by Alexandre Julliard
parent e0a527ab43
commit 793ddc992c

View file

@ -51,7 +51,6 @@ static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY* phKey, LPWSTR* pKe
{ {
TVITEMW item; TVITEMW item;
int maxChars, chars; int maxChars, chars;
LPWSTR newStr;
HTREEITEM hParent; HTREEITEM hParent;
item.mask = TVIF_PARAM; item.mask = TVIF_PARAM;
@ -82,10 +81,9 @@ static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY* phKey, LPWSTR* pKe
*pPathLen += chars; *pPathLen += chars;
break; break;
} }
newStr = HeapReAlloc(GetProcessHeap(), 0, *pKeyPath, *pMaxChars * 2);
if (!newStr) return FALSE;
*pKeyPath = newStr;
*pMaxChars *= 2; *pMaxChars *= 2;
*pKeyPath = heap_xrealloc(*pKeyPath, *pMaxChars);
} while(TRUE); } while(TRUE);
return TRUE; return TRUE;
@ -101,7 +99,7 @@ LPWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY* phRootKey)
if (!hItem) return NULL; if (!hItem) return NULL;
} }
pathBuffer = HeapAlloc(GetProcessHeap(), 0, maxLen*sizeof(WCHAR)); pathBuffer = heap_xalloc(maxLen * sizeof(WCHAR));
if (!pathBuffer) return NULL; if (!pathBuffer) return NULL;
*pathBuffer = 0; *pathBuffer = 0;
if (!get_item_path(hwndTV, hItem, phRootKey, &pathBuffer, &pathLen, &maxLen)) return NULL; if (!get_item_path(hwndTV, hItem, phRootKey, &pathBuffer, &pathLen, &maxLen)) return NULL;
@ -118,10 +116,10 @@ static LPWSTR get_path_component(LPCWSTR *lplpKeyName) {
lpPos++; lpPos++;
if (*lpPos && lpPos == *lplpKeyName) if (*lpPos && lpPos == *lplpKeyName)
return NULL; return NULL;
len = lpPos+1-(*lplpKeyName); len = lpPos+1-(*lplpKeyName);
lpResult = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); lpResult = heap_xalloc(len * sizeof(WCHAR));
if (!lpResult) /* that would be very odd */
return NULL;
lstrcpynW(lpResult, *lplpKeyName, len); lstrcpynW(lpResult, *lplpKeyName, len);
*lplpKeyName = *lpPos ? lpPos+1 : NULL; *lplpKeyName = *lpPos ? lpPos+1 : NULL;
return lpResult; return lpResult;
@ -155,7 +153,7 @@ HTREEITEM FindPathInTree(HWND hwndTV, LPCWSTR lpKeyName) {
SendMessageW(hwndTV, TVM_EXPAND, TVE_EXPAND, (LPARAM)hItem ); SendMessageW(hwndTV, TVM_EXPAND, TVE_EXPAND, (LPARAM)hItem );
if (!lpKeyName) if (!lpKeyName)
{ {
HeapFree(GetProcessHeap(), 0, lpItemName); heap_free(lpItemName);
return hItem; return hItem;
} }
hOldItem = hItem; hOldItem = hItem;
@ -164,7 +162,7 @@ HTREEITEM FindPathInTree(HWND hwndTV, LPCWSTR lpKeyName) {
} }
hItem = (HTREEITEM)SendMessageW(hwndTV, TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM)hItem); hItem = (HTREEITEM)SendMessageW(hwndTV, TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM)hItem);
} }
HeapFree(GetProcessHeap(), 0, lpItemName); heap_free(lpItemName);
if (!hItem) if (!hItem)
return valid_path ? hOldItem : hRoot; return valid_path ? hOldItem : hRoot;
} }
@ -239,20 +237,20 @@ static BOOL match_item(HWND hwndTV, HTREEITEM hItem, LPCWSTR sstring, int mode,
return FALSE; return FALSE;
if (RegOpenKeyExW(hRoot, KeyPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS) { if (RegOpenKeyExW(hRoot, KeyPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS) {
HeapFree(GetProcessHeap(), 0, KeyPath); heap_free(KeyPath);
return FALSE; return FALSE;
} }
HeapFree(GetProcessHeap(), 0, KeyPath); heap_free(KeyPath);
if (ERROR_SUCCESS != RegQueryInfoKeyW(hKey, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &lenNameMax, &lenValueMax, NULL, NULL)) if (ERROR_SUCCESS != RegQueryInfoKeyW(hKey, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &lenNameMax, &lenValueMax, NULL, NULL))
return FALSE; return FALSE;
lenName = ++lenNameMax; lenName = ++lenNameMax;
if (!(valName = HeapAlloc(GetProcessHeap(), 0, lenName * sizeof(valName[0]) ))) valName = heap_xalloc(lenName * sizeof(WCHAR));
return FALSE;
adjust = 0; adjust = 0;
/* RegEnumValue won't return empty default value, so fake it when dealing with *row, /* RegEnumValue won't return empty default value, so fake it when dealing with *row,
which corresponds to list view rows, not value ids */ which corresponds to list view rows, not value ids */
if (ERROR_SUCCESS == RegEnumValueW(hKey, 0, valName, &lenName, NULL, NULL, NULL, NULL) && *valName) if (ERROR_SUCCESS == RegEnumValueW(hKey, 0, valName, &lenName, NULL, NULL, NULL, NULL) && *valName)
@ -270,8 +268,8 @@ static BOOL match_item(HWND hwndTV, HTREEITEM hItem, LPCWSTR sstring, int mode,
if (mode & SEARCH_VALUES) { if (mode & SEARCH_VALUES) {
if (match_string(valName, sstring, mode)) { if (match_string(valName, sstring, mode)) {
HeapFree(GetProcessHeap(), 0, valName); heap_free(valName);
HeapFree(GetProcessHeap(), 0, buffer); heap_free(buffer);
RegCloseKey(hKey); RegCloseKey(hKey);
*row = i+adjust; *row = i+adjust;
return TRUE; return TRUE;
@ -280,16 +278,15 @@ static BOOL match_item(HWND hwndTV, HTREEITEM hItem, LPCWSTR sstring, int mode,
if ((mode & SEARCH_CONTENT) && (type == REG_EXPAND_SZ || type == REG_SZ)) { if ((mode & SEARCH_CONTENT) && (type == REG_EXPAND_SZ || type == REG_SZ)) {
if (!buffer) if (!buffer)
buffer = HeapAlloc(GetProcessHeap(), 0, lenValueMax); buffer = heap_xalloc(lenValueMax);
if (!buffer)
break;
lenName = lenNameMax; lenName = lenNameMax;
lenValue = lenValueMax; lenValue = lenValueMax;
if (ERROR_SUCCESS != RegEnumValueW(hKey, i, valName, &lenName, NULL, &type, (LPBYTE)buffer, &lenValue)) if (ERROR_SUCCESS != RegEnumValueW(hKey, i, valName, &lenName, NULL, &type, (LPBYTE)buffer, &lenValue))
break; break;
if (match_string(buffer, sstring, mode)) { if (match_string(buffer, sstring, mode)) {
HeapFree(GetProcessHeap(), 0, valName); heap_free(valName);
HeapFree(GetProcessHeap(), 0, buffer); heap_free(buffer);
RegCloseKey(hKey); RegCloseKey(hKey);
*row = i+adjust; *row = i+adjust;
return TRUE; return TRUE;
@ -298,8 +295,8 @@ static BOOL match_item(HWND hwndTV, HTREEITEM hItem, LPCWSTR sstring, int mode,
i++; i++;
} }
HeapFree(GetProcessHeap(), 0, valName); heap_free(valName);
HeapFree(GetProcessHeap(), 0, buffer); heap_free(buffer);
RegCloseKey(hKey); RegCloseKey(hKey);
} }
return FALSE; return FALSE;
@ -375,7 +372,7 @@ static BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
} else { } else {
hKey = hRoot; hKey = hRoot;
} }
HeapFree(GetProcessHeap(), 0, KeyPath); heap_free(KeyPath);
if (RegQueryInfoKeyW(hKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS) { if (RegQueryInfoKeyW(hKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS) {
return FALSE; return FALSE;
@ -396,14 +393,10 @@ static BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
} }
dwMaxSubKeyLen++; /* account for the \0 terminator */ dwMaxSubKeyLen++; /* account for the \0 terminator */
if (!(Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(WCHAR)))) { Name = heap_xalloc(dwMaxSubKeyLen * sizeof(WCHAR));
return FALSE;
}
tvItem.cchTextMax = dwMaxSubKeyLen; tvItem.cchTextMax = dwMaxSubKeyLen;
if (!(tvItem.pszText = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(WCHAR)))) { tvItem.pszText = heap_xalloc(dwMaxSubKeyLen * sizeof(WCHAR));
HeapFree(GetProcessHeap(), 0, Name);
return FALSE;
}
/* Now go through all the children in the registry, and check if any have to be added. */ /* Now go through all the children in the registry, and check if any have to be added. */
for (dwIndex = 0; dwIndex < dwCount; dwIndex++) { for (dwIndex = 0; dwIndex < dwCount; dwIndex++) {
@ -430,8 +423,8 @@ static BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
tvItem.mask = TVIF_TEXT; tvItem.mask = TVIF_TEXT;
tvItem.hItem = childItem; tvItem.hItem = childItem;
if (!TreeView_GetItemW(hwndTV, &tvItem)) { if (!TreeView_GetItemW(hwndTV, &tvItem)) {
HeapFree(GetProcessHeap(), 0, Name); heap_free(Name);
HeapFree(GetProcessHeap(), 0, tvItem.pszText); heap_free(tvItem.pszText);
return FALSE; return FALSE;
} }
@ -446,8 +439,8 @@ static BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
AddEntryToTree(hwndTV, hItem, Name, NULL, dwSubCount); AddEntryToTree(hwndTV, hItem, Name, NULL, dwSubCount);
} }
} }
HeapFree(GetProcessHeap(), 0, Name); heap_free(Name);
HeapFree(GetProcessHeap(), 0, tvItem.pszText); heap_free(tvItem.pszText);
RegCloseKey(hKey); RegCloseKey(hKey);
/* Now go through all the children in the tree, and check if any have to be removed. */ /* Now go through all the children in the tree, and check if any have to be removed. */
@ -658,8 +651,7 @@ BOOL UpdateExpandingTree(HWND hwndTV, HTREEITEM hItem, int state)
errCode = RegQueryInfoKeyW(hNewKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0); errCode = RegQueryInfoKeyW(hNewKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0);
if (errCode != ERROR_SUCCESS) goto done; if (errCode != ERROR_SUCCESS) goto done;
dwMaxSubKeyLen++; /* account for the \0 terminator */ dwMaxSubKeyLen++; /* account for the \0 terminator */
Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(WCHAR)); Name = heap_xalloc(dwMaxSubKeyLen * sizeof(WCHAR));
if (!Name) goto done;
for (dwIndex = 0; dwIndex < dwCount; dwIndex++) { for (dwIndex = 0; dwIndex < dwCount; dwIndex++) {
DWORD cName = dwMaxSubKeyLen, dwSubCount; DWORD cName = dwMaxSubKeyLen, dwSubCount;
@ -675,7 +667,7 @@ BOOL UpdateExpandingTree(HWND hwndTV, HTREEITEM hItem, int state)
AddEntryToTree(hwndTV, hItem, Name, NULL, dwSubCount); AddEntryToTree(hwndTV, hItem, Name, NULL, dwSubCount);
} }
RegCloseKey(hNewKey); RegCloseKey(hNewKey);
HeapFree(GetProcessHeap(), 0, Name); heap_free(Name);
done: done:
item.mask = TVIF_STATE; item.mask = TVIF_STATE;
@ -686,7 +678,7 @@ done:
SendMessageW(hwndTV, WM_SETREDRAW, TRUE, 0); SendMessageW(hwndTV, WM_SETREDRAW, TRUE, 0);
SetCursor(hcursorOld); SetCursor(hcursorOld);
expanding = FALSE; expanding = FALSE;
HeapFree(GetProcessHeap(), 0, keyPath); heap_free(keyPath);
return TRUE; return TRUE;
} }