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, ®_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