Alexander Nicolaysen Sørnes : regedit: Convert AddEntryToTree to unicode.

Alexandre Julliard julliard at winehq.org
Fri Aug 22 04:44:02 CDT 2008


Module: wine
Branch: master
Commit: 74cae34da8cac146fafc1e477f6edc3be26ec9ef
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=74cae34da8cac146fafc1e477f6edc3be26ec9ef

Author: Alexander Nicolaysen Sørnes <alex at thehandofagony.com>
Date:   Fri Aug 22 00:12:09 2008 +0200

regedit: Convert AddEntryToTree to unicode.

---

 programs/regedit/treeview.c |   67 +++++++++++++++++++++++-------------------
 1 files changed, 37 insertions(+), 30 deletions(-)

diff --git a/programs/regedit/treeview.c b/programs/regedit/treeview.c
index 61c13ad..dcfb7fa 100644
--- a/programs/regedit/treeview.c
+++ b/programs/regedit/treeview.c
@@ -232,26 +232,30 @@ BOOL DeleteNode(HWND hwndTV, HTREEITEM hItem)
 }
 
 /* Add an entry to the tree. Only give hKey for root nodes (HKEY_ constants) */
-static HTREEITEM AddEntryToTree(HWND hwndTV, HTREEITEM hParent, LPTSTR label, HKEY hKey, DWORD dwChildren)
+static HTREEITEM AddEntryToTree(HWND hwndTV, HTREEITEM hParent, LPWSTR label, HKEY hKey, DWORD dwChildren)
 {
     TVINSERTSTRUCT tvins;
+    CHAR* labelA = GetMultiByteString(label);
+    HTREEITEM ret;
 
     if (hKey) {
-        if (RegQueryInfoKey(hKey, 0, 0, 0, &dwChildren, 0, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS) {
+        if (RegQueryInfoKeyW(hKey, 0, 0, 0, &dwChildren, 0, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS) {
             dwChildren = 0;
         }
     }
 
     tvins.u.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN | TVIF_PARAM;
-    tvins.u.item.pszText = label;
-    tvins.u.item.cchTextMax = lstrlen(label);
+    tvins.u.item.pszText = labelA;
+    tvins.u.item.cchTextMax = lstrlen(labelA);
     tvins.u.item.iImage = Image_Closed;
     tvins.u.item.iSelectedImage = Image_Open;
     tvins.u.item.cChildren = dwChildren;
     tvins.u.item.lParam = (LPARAM)hKey;
     tvins.hInsertAfter = (HTREEITEM)(hKey ? TVI_LAST : TVI_SORT);
     tvins.hParent = hParent;
-    return TreeView_InsertItem(hwndTV, &tvins);
+    ret = TreeView_InsertItem(hwndTV, &tvins);
+    HeapFree(GetProcessHeap(), 0, labelA);
+    return ret;
 }
 
 static BOOL match_string(LPCTSTR sstring1, LPCTSTR sstring2, int mode)
@@ -388,20 +392,20 @@ static BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
 {
     HKEY hRoot, hKey, hSubKey;
     HTREEITEM childItem;
-    LPTSTR KeyPath;
+    LPWSTR KeyPath;
     DWORD dwCount, dwIndex, dwMaxSubKeyLen;
-    LPSTR Name;
+    LPWSTR Name;
     TVITEM tvItem;
     
     hRoot = NULL;
-    KeyPath = GetItemPath(hwndTV, hItem, &hRoot);
+    KeyPath = GetItemPathW(hwndTV, hItem, &hRoot);
 
     if (!KeyPath || !hRoot)
         return FALSE;
 
     if (*KeyPath) {
-        if (RegOpenKeyEx(hRoot, KeyPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS) {
-            WINE_TRACE("RegOpenKeyEx failed, \"%s\" was probably removed.\n", KeyPath);
+        if (RegOpenKeyExW(hRoot, KeyPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS) {
+            WINE_TRACE("RegOpenKeyEx failed, %s was probably removed.\n", wine_dbgstr_w(KeyPath));
             return FALSE;
         }
     } else {
@@ -409,7 +413,7 @@ static BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
     }
     HeapFree(GetProcessHeap(), 0, KeyPath);
 
-    if (RegQueryInfoKey(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;
     }
 
@@ -428,7 +432,7 @@ static BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
     }
 
     dwMaxSubKeyLen++; /* account for the \0 terminator */
-    if (!(Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(TCHAR)))) {
+    if (!(Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(WCHAR)))) {
         return FALSE;
     }
     tvItem.cchTextMax = dwMaxSubKeyLen;
@@ -440,38 +444,43 @@ static BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
     for (dwIndex = 0; dwIndex < dwCount; dwIndex++) {
         DWORD cName = dwMaxSubKeyLen, dwSubCount;
         BOOL found;
+        CHAR* NameA;
 
         found = FALSE;
-        if (RegEnumKeyEx(hKey, dwIndex, Name, &cName, 0, 0, 0, NULL) != ERROR_SUCCESS) {
+        if (RegEnumKeyExW(hKey, dwIndex, Name, &cName, 0, 0, 0, NULL) != ERROR_SUCCESS) {
             continue;
         }
 
         /* Find the number of children of the node. */
         dwSubCount = 0;
-        if (RegOpenKeyEx(hKey, Name, 0, KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS) {
+        if (RegOpenKeyExW(hKey, Name, 0, KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS) {
             if (RegQueryInfoKey(hSubKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS) {
                 dwSubCount = 0;
             }
             RegCloseKey(hSubKey);
         }
 
+        NameA = GetMultiByteString(Name);
+
         /* Check if the node is already in there. */
         for (childItem = TreeView_GetChild(hwndTV, hItem); childItem;
                 childItem = TreeView_GetNextSibling(hwndTV, childItem)) {
             tvItem.mask = TVIF_TEXT;
             tvItem.hItem = childItem;
             if (!TreeView_GetItem(hwndTV, &tvItem)) {
+                HeapFree(GetProcessHeap(), 0, NameA);
                 return FALSE;
             }
 
-            if (!stricmp(tvItem.pszText, Name)) {
+            if (!stricmp(tvItem.pszText, NameA)) {
                 found = TRUE;
+                HeapFree(GetProcessHeap(), 0, NameA);
                 break;
             }
         }
 
         if (found == FALSE) {
-            WINE_TRACE("New subkey %s\n", Name);
+            WINE_TRACE("New subkey %s\n", NameA);
             AddEntryToTree(hwndTV, hItem, Name, NULL, dwSubCount);
         }
     }
@@ -527,9 +536,7 @@ HTREEITEM InsertNode(HWND hwndTV, HTREEITEM hItem, LPWSTR name)
     if (!hItem) hItem = TreeView_GetSelection(hwndTV);
     if (!hItem) return FALSE;
     if (TreeView_GetItemState(hwndTV, hItem, TVIS_EXPANDEDONCE)) {
-	char* nameA = GetMultiByteString(name);
-	hNewItem = AddEntryToTree(hwndTV, hItem, nameA, 0, 0);
-	HeapFree(GetProcessHeap(), 0, nameA);
+	hNewItem = AddEntryToTree(hwndTV, hItem, name, 0, 0);
     } else {
 	item.mask = TVIF_CHILDREN | TVIF_HANDLE;
 	item.hItem = hItem;
@@ -568,7 +575,7 @@ static BOOL InitTreeViewItems(HWND hwndTV, LPTSTR pHostName)
 {
     TVINSERTSTRUCT tvins;
     HTREEITEM hRoot;
-    static TCHAR hkcr[] = {'H','K','E','Y','_','C','L','A','S','S','E','S','_','R','O','O','T',0},
+    static WCHAR hkcr[] = {'H','K','E','Y','_','C','L','A','S','S','E','S','_','R','O','O','T',0},
                  hkcu[] = {'H','K','E','Y','_','C','U','R','R','E','N','T','_','U','S','E','R',0},
                  hklm[] = {'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E',0},
                  hku[]  = {'H','K','E','Y','_','U','S','E','R','S',0},
@@ -646,8 +653,8 @@ BOOL UpdateExpandingTree(HWND hwndTV, HTREEITEM hItem, int state)
 {
     DWORD dwCount, dwIndex, dwMaxSubKeyLen;
     HKEY hRoot, hNewKey, hKey;
-    LPTSTR keyPath;
-    LPTSTR Name;
+    LPWSTR keyPath;
+    LPWSTR Name;
     LONG errCode;
     HCURSOR hcursorOld;
 
@@ -658,32 +665,32 @@ BOOL UpdateExpandingTree(HWND hwndTV, HTREEITEM hItem, int state)
     }
     expanding = TRUE;
     hcursorOld = SetCursor(LoadCursor(NULL, IDC_WAIT));
-    SendMessage(hwndTV, WM_SETREDRAW, FALSE, 0);
+    SendMessageW(hwndTV, WM_SETREDRAW, FALSE, 0);
 
-    keyPath = GetItemPath(hwndTV, hItem, &hRoot);
+    keyPath = GetItemPathW(hwndTV, hItem, &hRoot);
     if (!keyPath) goto done;
 
     if (*keyPath) {
-        errCode = RegOpenKeyEx(hRoot, keyPath, 0, KEY_READ, &hNewKey);
+        errCode = RegOpenKeyExW(hRoot, keyPath, 0, KEY_READ, &hNewKey);
         if (errCode != ERROR_SUCCESS) goto done;
     } else {
 	hNewKey = hRoot;
     }
 
-    errCode = RegQueryInfoKey(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;
     dwMaxSubKeyLen++; /* account for the \0 terminator */
-    Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(TCHAR));
+    Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(WCHAR));
     if (!Name) goto done;
 
     for (dwIndex = 0; dwIndex < dwCount; dwIndex++) {
         DWORD cName = dwMaxSubKeyLen, dwSubCount;
 
-        errCode = RegEnumKeyEx(hNewKey, dwIndex, Name, &cName, 0, 0, 0, 0);
+        errCode = RegEnumKeyExW(hNewKey, dwIndex, Name, &cName, 0, 0, 0, 0);
         if (errCode != ERROR_SUCCESS) continue;
-        errCode = RegOpenKeyEx(hNewKey, Name, 0, KEY_QUERY_VALUE, &hKey);
+        errCode = RegOpenKeyExW(hNewKey, Name, 0, KEY_QUERY_VALUE, &hKey);
         if (errCode == ERROR_SUCCESS) {
-            errCode = RegQueryInfoKey(hKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0);
+            errCode = RegQueryInfoKeyW(hKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0);
             RegCloseKey(hKey);
         }
         if (errCode != ERROR_SUCCESS) dwSubCount = 0;




More information about the wine-cvs mailing list