Hugh McMaster : regedit: Simplify parseKeyName.

Alexandre Julliard julliard at winehq.org
Tue Apr 25 16:22:36 CDT 2017


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

Author: Hugh McMaster <hugh.mcmaster at outlook.com>
Date:   Tue Apr 25 13:30:56 2017 +0000

regedit: Simplify parseKeyName.

Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 programs/regedit/regproc.c | 53 +++++++++++++---------------------------------
 1 file changed, 15 insertions(+), 38 deletions(-)

diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index 96c4564..1672f22 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -301,50 +301,27 @@ static int REGPROC_unescape_string(WCHAR* str)
     return val_idx;
 }
 
-static BOOL parseKeyName(LPWSTR lpKeyName, HKEY *hKey, LPWSTR *lpKeyPath)
+static HKEY parseKeyName(LPWSTR lpKeyName, LPWSTR *lpKeyPath)
 {
-    WCHAR* lpSlash = NULL;
-    unsigned int i, len;
+    unsigned int i;
 
     if (lpKeyName == NULL)
-        return FALSE;
+        return 0;
 
-    for(i = 0; *(lpKeyName+i) != 0; i++)
-    {
-        if(*(lpKeyName+i) == '\\')
-        {
-            lpSlash = lpKeyName+i;
-            break;
-        }
-    }
+    *lpKeyPath = strchrW(lpKeyName, '\\');
+    if (*lpKeyPath) (*lpKeyPath)++;
 
-    if (lpSlash)
-    {
-        len = lpSlash-lpKeyName;
-    }
-    else
+    for (i = 0; i < ARRAY_SIZE(reg_class_keys); i++)
     {
-        len = lstrlenW(lpKeyName);
-        lpSlash = lpKeyName+len;
-    }
-    *hKey = NULL;
-
-    for (i = 0; i < ARRAY_SIZE(reg_class_keys); i++) {
-        if (CompareStringW(LOCALE_USER_DEFAULT, 0, lpKeyName, len, reg_class_namesW[i], -1) == CSTR_EQUAL &&
-            len == lstrlenW(reg_class_namesW[i])) {
-            *hKey = reg_class_keys[i];
-            break;
+        int len = lstrlenW(reg_class_namesW[i]);
+        if (!strncmpW(lpKeyName, reg_class_namesW[i], len) &&
+           (lpKeyName[len] == 0 || lpKeyName[len] == '\\'))
+        {
+            return reg_class_keys[i];
         }
     }
 
-    if (*hKey == NULL)
-        return FALSE;
-
-
-    if (*lpSlash != '\0')
-        lpSlash++;
-    *lpKeyPath = lpSlash;
-    return TRUE;
+    return 0;
 }
 
 /* Globals used by the setValue() & co */
@@ -490,7 +467,7 @@ static LONG openKeyW(WCHAR* stdInput)
         return ERROR_INVALID_PARAMETER;
 
     /* Get the registry class */
-    if (!parseKeyName(stdInput, &keyClass, &keyPath))
+    if (!(keyClass = parseKeyName(stdInput, &keyPath)))
         return ERROR_INVALID_PARAMETER;
 
     res = RegCreateKeyExW(
@@ -1323,7 +1300,7 @@ BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name, DWORD format)
         lstrcpyW(reg_key_name_buf, reg_key_name);
 
         /* open the specified key */
-        if (!parseKeyName(reg_key_name, &reg_key_class, &branch_name)) {
+        if (!(reg_key_class = parseKeyName(reg_key_name, &branch_name))) {
             output_message(STRING_INCORRECT_REG_CLASS, reg_key_name);
             exit(1);
         }
@@ -1408,7 +1385,7 @@ void delete_registry_key(WCHAR *reg_key_name)
     if (!reg_key_name || !reg_key_name[0])
         return;
 
-    if (!parseKeyName(reg_key_name, &key_class, &key_name)) {
+    if (!(key_class = parseKeyName(reg_key_name, &key_name))) {
         output_message(STRING_INCORRECT_REG_CLASS, reg_key_name);
         exit(1);
     }




More information about the wine-cvs mailing list