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

Alexandre Julliard julliard at winehq.org
Wed Aug 20 08:13:43 CDT 2008


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

Author: Alexander Nicolaysen Sørnes <alex at thehandofagony.com>
Date:   Sat Aug  9 02:25:34 2008 +0200

regedit: Convert deletion to unicode.

---

 programs/regedit/edit.c     |   30 ++++++++++++++++++++----------
 programs/regedit/framewnd.c |   27 ++++++++++++++++++---------
 programs/regedit/main.c     |    2 ++
 programs/regedit/main.h     |    5 +++--
 programs/regedit/regproc.h  |    1 +
 5 files changed, 44 insertions(+), 21 deletions(-)

diff --git a/programs/regedit/edit.c b/programs/regedit/edit.c
index 954e647..f9a5abf 100644
--- a/programs/regedit/edit.c
+++ b/programs/regedit/edit.c
@@ -386,22 +386,23 @@ done:
     return result;
 }
 
-BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath)
+BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath)
 {
     BOOL result = FALSE;
     LONG lRet;
     HKEY hKey;
-    
-    lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, KEY_READ|KEY_SET_VALUE, &hKey);
+    CHAR* keyPathA = GetMultiByteString(keyPath);
+
+    lRet = RegOpenKeyExW(hKeyRoot, keyPath, 0, KEY_READ|KEY_SET_VALUE, &hKey);
     if (lRet != ERROR_SUCCESS) {
 	error_code_messagebox(hwnd, lRet);
 	return FALSE;
     }
     
-    if (messagebox(hwnd, MB_YESNO | MB_ICONEXCLAMATION, IDS_DELETE_BOX_TITLE, IDS_DELETE_BOX_TEXT, keyPath) != IDYES)
+    if (messagebox(hwnd, MB_YESNO | MB_ICONEXCLAMATION, IDS_DELETE_BOX_TITLE, IDS_DELETE_BOX_TEXT, keyPathA) != IDYES)
 	goto done;
 	
-    lRet = SHDeleteKey(hKeyRoot, keyPath);
+    lRet = SHDeleteKeyW(hKeyRoot, keyPath);
     if (lRet != ERROR_SUCCESS) {
 	error(hwnd, IDS_BAD_KEY, keyPath);
 	goto done;
@@ -410,24 +411,33 @@ BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath)
     
 done:
     RegCloseKey(hKey);
+    HeapFree(GetProcessHeap(), 0, keyPathA);
     return result;
 }
 
-BOOL DeleteValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR valueName, BOOL showMessageBox)
+BOOL DeleteValue(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath, LPCWSTR valueName, BOOL showMessageBox)
 {
     BOOL result = FALSE;
     LONG lRet;
     HKEY hKey;
-    LPCSTR visibleValueName = valueName ? valueName : g_pszDefaultValueName;
+    LPCWSTR visibleValueName = valueName ? valueName : g_pszDefaultValueNameW;
+    WCHAR empty = 0;
 
-    lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, KEY_READ | KEY_SET_VALUE, &hKey);
+    lRet = RegOpenKeyExW(hKeyRoot, keyPath, 0, KEY_READ | KEY_SET_VALUE, &hKey);
     if (lRet != ERROR_SUCCESS) return FALSE;
 
     if (showMessageBox)
-        if (messagebox(hwnd, MB_YESNO | MB_ICONEXCLAMATION, IDS_DELETE_BOX_TITLE, IDS_DELETE_BOX_TEXT, visibleValueName) != IDYES)
+    {
+        LPSTR visibleValueNameA = GetMultiByteString(visibleValueName);
+        if (messagebox(hwnd, MB_YESNO | MB_ICONEXCLAMATION, IDS_DELETE_BOX_TITLE, IDS_DELETE_BOX_TEXT, visibleValueNameA) != IDYES)
+        {
+                HeapFree(GetProcessHeap(), 0, visibleValueNameA);
 	        goto done;
+        }
+        HeapFree(GetProcessHeap(), 0, visibleValueNameA);
+    }
 
-    lRet = RegDeleteValue(hKey, valueName ? valueName : "");
+    lRet = RegDeleteValueW(hKey, valueName ? valueName : &empty);
     if (lRet != ERROR_SUCCESS && valueName) {
         error(hwnd, IDS_BAD_VALUE, valueName);
     }
diff --git a/programs/regedit/framewnd.c b/programs/regedit/framewnd.c
index b661019..873a255 100644
--- a/programs/regedit/framewnd.c
+++ b/programs/regedit/framewnd.c
@@ -675,29 +675,38 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
         break;
     case ID_EDIT_DELETE:
 	if (GetFocus() == g_pChildWnd->hTreeWnd) {
+	    WCHAR* keyPathW = GetWideString(keyPath);
 	    if (keyPath == 0 || *keyPath == 0) {
 	        MessageBeep(MB_ICONHAND); 
-            } else if (DeleteKey(hWnd, hKeyRoot, keyPath)) {
+            } else if (DeleteKey(hWnd, hKeyRoot, keyPathW)) {
 		DeleteNode(g_pChildWnd->hTreeWnd, 0);
             }
+            HeapFree(GetProcessHeap(), 0, keyPathW);
 	} else if (GetFocus() == g_pChildWnd->hListWnd) {
         curIndex = ListView_GetNextItem(g_pChildWnd->hListWnd, -1, LVNI_SELECTED);
         while(curIndex != -1) {
+            WCHAR* valueNameW;
+            WCHAR* keyPathW;
+
             valueName = GetItemText(g_pChildWnd->hListWnd, curIndex);
             curIndex = ListView_GetNextItem(g_pChildWnd->hListWnd, curIndex, LVNI_SELECTED);
             if(curIndex != -1 && firstItem) {
-                TCHAR title[256];
-                TCHAR text[1024];
-                if(!LoadString(hInst, IDS_DELETE_BOX_TITLE, title, COUNT_OF(title)))
-                    lstrcpy(title, "Error");
-                if(!LoadString(hInst, IDS_DELETE_BOX_TEXT_MULTIPLE, text, COUNT_OF(text)))
-                    lstrcpy(text, "Unknown error string!");
-                if (MessageBox(hWnd, text, title, MB_YESNO | MB_ICONEXCLAMATION) != IDYES)
+                if (MessageBoxW(hWnd, MAKEINTRESOURCEW(IDS_DELETE_BOX_TEXT_MULTIPLE),
+                                MAKEINTRESOURCEW(IDS_DELETE_BOX_TITLE),
+                                MB_YESNO | MB_ICONEXCLAMATION) != IDYES)
                     break;
             }
-            if (!DeleteValue(hWnd, hKeyRoot, keyPath, valueName, curIndex==-1 && firstItem))
+            valueNameW = GetWideString(valueName);
+            keyPathW = GetWideString(keyPath);
+            if (!DeleteValue(hWnd, hKeyRoot, keyPathW, valueNameW, curIndex==-1 && firstItem))
+            {
+                HeapFree(GetProcessHeap(), 0, valueNameW);
+                HeapFree(GetProcessHeap(), 0, keyPathW);
                 break;
+            }
             firstItem = FALSE;
+            HeapFree(GetProcessHeap(), 0, valueNameW);
+            HeapFree(GetProcessHeap(), 0, keyPathW);
         }
 		RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath, NULL);
 	}
diff --git a/programs/regedit/main.c b/programs/regedit/main.c
index 2b95287..2b37565 100644
--- a/programs/regedit/main.c
+++ b/programs/regedit/main.c
@@ -30,6 +30,7 @@
 #include "main.h"
 
 TCHAR g_pszDefaultValueName[64];
+WCHAR g_pszDefaultValueNameW[64];
 
 BOOL ProcessCmdLine(LPSTR lpCmdLine);
 
@@ -171,6 +172,7 @@ int APIENTRY WinMain(HINSTANCE hInstance,
     /* Initialize global strings */
     LoadString(hInstance, IDS_APP_TITLE, szTitle, COUNT_OF(szTitle));
     LoadString(hInstance, IDS_REGISTRY_DEFAULT_VALUE, g_pszDefaultValueName, COUNT_OF(g_pszDefaultValueName));
+    LoadStringW(hInstance, IDS_REGISTRY_DEFAULT_VALUE, g_pszDefaultValueNameW, COUNT_OF(g_pszDefaultValueNameW));
 
     /* Store instance handle in our global variable */
     hInst = hInstance;
diff --git a/programs/regedit/main.h b/programs/regedit/main.h
index 7547ea0..f0f0c64 100644
--- a/programs/regedit/main.h
+++ b/programs/regedit/main.h
@@ -91,6 +91,7 @@ extern TCHAR szTitle[];
 extern const TCHAR szFrameClass[];
 extern const TCHAR szChildClass[];
 extern TCHAR g_pszDefaultValueName[];
+extern WCHAR g_pszDefaultValueNameW[];
 
 /* about.c */
 extern void ShowAboutBox(HWND hWnd);
@@ -129,8 +130,8 @@ extern HTREEITEM FindNext(HWND hwndTV, HTREEITEM hItem, LPCTSTR sstring, int mod
 extern BOOL CreateKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPTSTR newKeyName);
 extern BOOL CreateValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, DWORD valueType, LPTSTR valueName);
 extern BOOL ModifyValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR valueName);
-extern BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath);
-extern BOOL DeleteValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR valueName, BOOL showMessageBox);
+extern BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath);
+extern BOOL DeleteValue(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath, LPCWSTR valueName, BOOL showMessageBox);
 extern BOOL RenameValue(HWND hwnd, HKEY hRootKey, LPCTSTR keyPath, LPCTSTR oldName, LPCTSTR newName);
 extern BOOL RenameKey(HWND hwnd, HKEY hRootKey, LPCTSTR keyPath, LPCTSTR newName);
 extern void error(HWND hwnd, INT resId, ...);
diff --git a/programs/regedit/regproc.h b/programs/regedit/regproc.h
index 0621d8b..7122379 100644
--- a/programs/regedit/regproc.h
+++ b/programs/regedit/regproc.h
@@ -25,3 +25,4 @@ BOOL export_registry_key(CHAR *file_name, CHAR *reg_key_name);
 BOOL import_registry_file(FILE *in);
 void delete_registry_key(WCHAR *reg_key_name);
 WCHAR* GetWideString(const char* strA);
+CHAR* GetMultiByteString(const WCHAR* strW);




More information about the wine-cvs mailing list