Alexander Nicolaysen Sørnes : regedit: Use unicode for all key deletion.

Alexandre Julliard julliard at winehq.org
Thu Jul 10 08:58:48 CDT 2008


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

Author: Alexander Nicolaysen Sørnes <alex at thehandofagony.com>
Date:   Wed Jul  9 18:18:14 2008 +0200

regedit: Use unicode for all key deletion.

---

 programs/regedit/regedit.c |    6 ++++-
 programs/regedit/regproc.c |   46 ++++++++++++++++---------------------------
 programs/regedit/regproc.h |    4 +-
 3 files changed, 24 insertions(+), 32 deletions(-)

diff --git a/programs/regedit/regedit.c b/programs/regedit/regedit.c
index ea8aee9..fca0cac 100644
--- a/programs/regedit/regedit.c
+++ b/programs/regedit/regedit.c
@@ -186,8 +186,12 @@ static BOOL PerformRegAction(REGEDIT_ACTION action, LPSTR s)
                         getAppName());
                 fprintf(stderr,usage);
                 exit(1);
+            } else
+            {
+                WCHAR* reg_key_nameW = GetWideString(reg_key_name, lstrlenA(reg_key_name)+1);
+                delete_registry_key(reg_key_nameW);
+                HeapFree(GetProcessHeap(), 0, reg_key_nameW);
             }
-            delete_registry_key(reg_key_name);
             break;
         }
     case ACTION_EXPORT: {
diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index a169889..7101e3a 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -75,6 +75,20 @@ if (!(p)) \
 }
 
 /******************************************************************************
+ * Allocates memory and convers input from multibyte to wide chars
+ * Returned string must be freed by the caller
+ */
+WCHAR* GetWideString(char* strA, int len)
+{
+    WCHAR* strW = NULL;
+
+    strW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+    CHECK_ENOUGH_MEMORY(strW);
+    MultiByteToWideChar(CP_ACP, 0, strA, len, strW, len);
+    return strW;
+}
+
+/******************************************************************************
  * Allocates memory and convers input from wide chars to multibyte
  * Returned string must be freed by the caller
  */
@@ -529,12 +543,8 @@ static void processRegEntry(LPSTR stdInput)
         /* delete the key if we encounter '-' at the start of reg key */
         if ( stdInput[0] == '-')
         {
-            WCHAR* stdInputW = NULL;
-            int size = keyEnd - stdInput - 1;
-            stdInputW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size * sizeof(WCHAR));
-            CHECK_ENOUGH_MEMORY(stdInputW);
-            MultiByteToWideChar(CP_ACP, 0, stdInput + 1, size, stdInputW, size);
-            delete_registry_keyW(stdInputW);
+            WCHAR* stdInputW = GetWideString(stdInput + 1, keyEnd - stdInput);
+            delete_registry_key(stdInputW);
             HeapFree(GetProcessHeap(), 0, stdInputW);
         } else if ( openKey(stdInput) != ERROR_SUCCESS )
         {
@@ -1062,29 +1072,7 @@ BOOL import_registry_file(LPTSTR filename)
  * reg_key_name - full name of registry branch to delete. Ignored if is NULL,
  *      empty, points to register key class, does not exist.
  */
-void delete_registry_key(CHAR *reg_key_name)
-{
-    CHAR *key_name;
-    HKEY key_class;
-
-    if (!reg_key_name || !reg_key_name[0])
-        return;
-
-    if (!parseKeyName(reg_key_name, &key_class, &key_name)) {
-        fprintf(stderr,"%s: Incorrect registry class specification in '%s'\n",
-                getAppName(), reg_key_name);
-        exit(1);
-    }
-    if (!*key_name) {
-        fprintf(stderr,"%s: Can't delete registry class '%s'\n",
-                getAppName(), reg_key_name);
-        exit(1);
-    }
-
-    RegDeleteTreeA(key_class, key_name);
-}
-
-void delete_registry_keyW(WCHAR *reg_key_name)
+void delete_registry_key(WCHAR *reg_key_name)
 {
     WCHAR *key_name = NULL;
     HKEY key_class;
diff --git a/programs/regedit/regproc.h b/programs/regedit/regproc.h
index 59e1b0c..9faf8b1 100644
--- a/programs/regedit/regproc.h
+++ b/programs/regedit/regproc.h
@@ -23,6 +23,6 @@ const CHAR *getAppName(void);
 
 BOOL export_registry_key(CHAR *file_name, CHAR *reg_key_name);
 BOOL import_registry_file(LPTSTR filename);
-void delete_registry_key(CHAR *reg_key_name);
-void delete_registry_keyW(WCHAR *reg_key_name);
+void delete_registry_key(WCHAR *reg_key_name);
+WCHAR* GetWideString(char* strA, int len);
 void processRegLines(FILE *in);




More information about the wine-cvs mailing list