Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
793ddc99
Commit
793ddc99
authored
Jul 28, 2017
by
Hugh McMaster
Committed by
Alexandre Julliard
Jul 28, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
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
>
parent
e0a527ab
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
31 additions
and
39 deletions
+31
-39
treeview.c
programs/regedit/treeview.c
+31
-39
No files found.
programs/regedit/treeview.c
View file @
793ddc99
...
...
@@ -51,7 +51,6 @@ static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY* phKey, LPWSTR* pKe
{
TVITEMW
item
;
int
maxChars
,
chars
;
LPWSTR
newStr
;
HTREEITEM
hParent
;
item
.
mask
=
TVIF_PARAM
;
...
...
@@ -82,10 +81,9 @@ static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY* phKey, LPWSTR* pKe
*
pPathLen
+=
chars
;
break
;
}
newStr
=
HeapReAlloc
(
GetProcessHeap
(),
0
,
*
pKeyPath
,
*
pMaxChars
*
2
);
if
(
!
newStr
)
return
FALSE
;
*
pKeyPath
=
newStr
;
*
pMaxChars
*=
2
;
*
pKeyPath
=
heap_xrealloc
(
*
pKeyPath
,
*
pMaxChars
);
}
while
(
TRUE
);
return
TRUE
;
...
...
@@ -101,7 +99,7 @@ LPWSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY* phRootKey)
if
(
!
hItem
)
return
NULL
;
}
pathBuffer
=
HeapAlloc
(
GetProcessHeap
(),
0
,
maxLen
*
sizeof
(
WCHAR
));
pathBuffer
=
heap_xalloc
(
maxLen
*
sizeof
(
WCHAR
));
if
(
!
pathBuffer
)
return
NULL
;
*
pathBuffer
=
0
;
if
(
!
get_item_path
(
hwndTV
,
hItem
,
phRootKey
,
&
pathBuffer
,
&
pathLen
,
&
maxLen
))
return
NULL
;
...
...
@@ -118,10 +116,10 @@ static LPWSTR get_path_component(LPCWSTR *lplpKeyName) {
lpPos
++
;
if
(
*
lpPos
&&
lpPos
==
*
lplpKeyName
)
return
NULL
;
len
=
lpPos
+
1
-
(
*
lplpKeyName
);
lpResult
=
HeapAlloc
(
GetProcessHeap
(),
0
,
len
*
sizeof
(
WCHAR
));
if
(
!
lpResult
)
/* that would be very odd */
return
NULL
;
lpResult
=
heap_xalloc
(
len
*
sizeof
(
WCHAR
));
lstrcpynW
(
lpResult
,
*
lplpKeyName
,
len
);
*
lplpKeyName
=
*
lpPos
?
lpPos
+
1
:
NULL
;
return
lpResult
;
...
...
@@ -155,7 +153,7 @@ HTREEITEM FindPathInTree(HWND hwndTV, LPCWSTR lpKeyName) {
SendMessageW
(
hwndTV
,
TVM_EXPAND
,
TVE_EXPAND
,
(
LPARAM
)
hItem
);
if
(
!
lpKeyName
)
{
HeapFree
(
GetProcessHeap
(),
0
,
lpItemName
);
heap_free
(
lpItemName
);
return
hItem
;
}
hOldItem
=
hItem
;
...
...
@@ -164,7 +162,7 @@ HTREEITEM FindPathInTree(HWND hwndTV, LPCWSTR lpKeyName) {
}
hItem
=
(
HTREEITEM
)
SendMessageW
(
hwndTV
,
TVM_GETNEXTITEM
,
TVGN_NEXT
,
(
LPARAM
)
hItem
);
}
HeapFree
(
GetProcessHeap
(),
0
,
lpItemName
);
heap_free
(
lpItemName
);
if
(
!
hItem
)
return
valid_path
?
hOldItem
:
hRoot
;
}
...
...
@@ -239,20 +237,20 @@ static BOOL match_item(HWND hwndTV, HTREEITEM hItem, LPCWSTR sstring, int mode,
return
FALSE
;
if
(
RegOpenKeyExW
(
hRoot
,
KeyPath
,
0
,
KEY_READ
,
&
hKey
)
!=
ERROR_SUCCESS
)
{
HeapFree
(
GetProcessHeap
(),
0
,
KeyPath
);
heap_free
(
KeyPath
);
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
))
return
FALSE
;
lenName
=
++
lenNameMax
;
if
(
!
(
valName
=
HeapAlloc
(
GetProcessHeap
(),
0
,
lenName
*
sizeof
(
valName
[
0
])
)))
return
FALSE
;
valName
=
heap_xalloc
(
lenName
*
sizeof
(
WCHAR
));
adjust
=
0
;
/* RegEnumValue won't return empty default value, so fake it when dealing with *row,
which corresponds to list view rows, not value ids */
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
(
match_string
(
valName
,
sstring
,
mode
))
{
HeapFree
(
GetProcessHeap
(),
0
,
valName
);
HeapFree
(
GetProcessHeap
(),
0
,
buffer
);
heap_free
(
valName
);
heap_free
(
buffer
);
RegCloseKey
(
hKey
);
*
row
=
i
+
adjust
;
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
(
!
buffer
)
buffer
=
HeapAlloc
(
GetProcessHeap
(),
0
,
lenValueMax
);
if
(
!
buffer
)
break
;
buffer
=
heap_xalloc
(
lenValueMax
);
lenName
=
lenNameMax
;
lenValue
=
lenValueMax
;
if
(
ERROR_SUCCESS
!=
RegEnumValueW
(
hKey
,
i
,
valName
,
&
lenName
,
NULL
,
&
type
,
(
LPBYTE
)
buffer
,
&
lenValue
))
break
;
if
(
match_string
(
buffer
,
sstring
,
mode
))
{
HeapFree
(
GetProcessHeap
(),
0
,
valName
);
HeapFree
(
GetProcessHeap
(),
0
,
buffer
);
heap_free
(
valName
);
heap_free
(
buffer
);
RegCloseKey
(
hKey
);
*
row
=
i
+
adjust
;
return
TRUE
;
...
...
@@ -298,8 +295,8 @@ static BOOL match_item(HWND hwndTV, HTREEITEM hItem, LPCWSTR sstring, int mode,
i
++
;
}
HeapFree
(
GetProcessHeap
(),
0
,
valName
);
HeapFree
(
GetProcessHeap
(),
0
,
buffer
);
heap_free
(
valName
);
heap_free
(
buffer
);
RegCloseKey
(
hKey
);
}
return
FALSE
;
...
...
@@ -375,7 +372,7 @@ static BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
}
else
{
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
)
{
return
FALSE
;
...
...
@@ -396,14 +393,10 @@ static BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
}
dwMaxSubKeyLen
++
;
/* account for the \0 terminator */
if
(
!
(
Name
=
HeapAlloc
(
GetProcessHeap
(),
0
,
dwMaxSubKeyLen
*
sizeof
(
WCHAR
))))
{
return
FALSE
;
}
Name
=
heap_xalloc
(
dwMaxSubKeyLen
*
sizeof
(
WCHAR
));
tvItem
.
cchTextMax
=
dwMaxSubKeyLen
;
if
(
!
(
tvItem
.
pszText
=
HeapAlloc
(
GetProcessHeap
(),
0
,
dwMaxSubKeyLen
*
sizeof
(
WCHAR
))))
{
HeapFree
(
GetProcessHeap
(),
0
,
Name
);
return
FALSE
;
}
tvItem
.
pszText
=
heap_xalloc
(
dwMaxSubKeyLen
*
sizeof
(
WCHAR
));
/* Now go through all the children in the registry, and check if any have to be added. */
for
(
dwIndex
=
0
;
dwIndex
<
dwCount
;
dwIndex
++
)
{
...
...
@@ -430,8 +423,8 @@ static BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
tvItem
.
mask
=
TVIF_TEXT
;
tvItem
.
hItem
=
childItem
;
if
(
!
TreeView_GetItemW
(
hwndTV
,
&
tvItem
))
{
HeapFree
(
GetProcessHeap
(),
0
,
Name
);
HeapFree
(
GetProcessHeap
(),
0
,
tvItem
.
pszText
);
heap_free
(
Name
);
heap_free
(
tvItem
.
pszText
);
return
FALSE
;
}
...
...
@@ -446,8 +439,8 @@ static BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
AddEntryToTree
(
hwndTV
,
hItem
,
Name
,
NULL
,
dwSubCount
);
}
}
HeapFree
(
GetProcessHeap
(),
0
,
Name
);
HeapFree
(
GetProcessHeap
(),
0
,
tvItem
.
pszText
);
heap_free
(
Name
);
heap_free
(
tvItem
.
pszText
);
RegCloseKey
(
hKey
);
/* 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
);
if
(
errCode
!=
ERROR_SUCCESS
)
goto
done
;
dwMaxSubKeyLen
++
;
/* account for the \0 terminator */
Name
=
HeapAlloc
(
GetProcessHeap
(),
0
,
dwMaxSubKeyLen
*
sizeof
(
WCHAR
));
if
(
!
Name
)
goto
done
;
Name
=
heap_xalloc
(
dwMaxSubKeyLen
*
sizeof
(
WCHAR
));
for
(
dwIndex
=
0
;
dwIndex
<
dwCount
;
dwIndex
++
)
{
DWORD
cName
=
dwMaxSubKeyLen
,
dwSubCount
;
...
...
@@ -675,7 +667,7 @@ BOOL UpdateExpandingTree(HWND hwndTV, HTREEITEM hItem, int state)
AddEntryToTree
(
hwndTV
,
hItem
,
Name
,
NULL
,
dwSubCount
);
}
RegCloseKey
(
hNewKey
);
HeapFree
(
GetProcessHeap
(),
0
,
Name
);
heap_free
(
Name
);
done:
item
.
mask
=
TVIF_STATE
;
...
...
@@ -686,7 +678,7 @@ done:
SendMessageW
(
hwndTV
,
WM_SETREDRAW
,
TRUE
,
0
);
SetCursor
(
hcursorOld
);
expanding
=
FALSE
;
HeapFree
(
GetProcessHeap
(),
0
,
keyPath
);
heap_free
(
keyPath
);
return
TRUE
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment