regedit: Simplify parseKeyName.
Signed-off-by: Hugh McMaster <hugh.mcmaster@outlook.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
bb52c5983d
commit
0481f31d4c
|
@ -301,50 +301,27 @@ static int REGPROC_unescape_string(WCHAR* str)
|
||||||
return val_idx;
|
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;
|
||||||
unsigned int i, len;
|
|
||||||
|
|
||||||
if (lpKeyName == NULL)
|
if (lpKeyName == NULL)
|
||||||
return FALSE;
|
return 0;
|
||||||
|
|
||||||
for(i = 0; *(lpKeyName+i) != 0; i++)
|
*lpKeyPath = strchrW(lpKeyName, '\\');
|
||||||
|
if (*lpKeyPath) (*lpKeyPath)++;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(reg_class_keys); i++)
|
||||||
{
|
{
|
||||||
if(*(lpKeyName+i) == '\\')
|
int len = lstrlenW(reg_class_namesW[i]);
|
||||||
|
if (!strncmpW(lpKeyName, reg_class_namesW[i], len) &&
|
||||||
|
(lpKeyName[len] == 0 || lpKeyName[len] == '\\'))
|
||||||
{
|
{
|
||||||
lpSlash = lpKeyName+i;
|
return reg_class_keys[i];
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lpSlash)
|
return 0;
|
||||||
{
|
|
||||||
len = lpSlash-lpKeyName;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*hKey == NULL)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
|
|
||||||
if (*lpSlash != '\0')
|
|
||||||
lpSlash++;
|
|
||||||
*lpKeyPath = lpSlash;
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Globals used by the setValue() & co */
|
/* Globals used by the setValue() & co */
|
||||||
|
@ -490,7 +467,7 @@ static LONG openKeyW(WCHAR* stdInput)
|
||||||
return ERROR_INVALID_PARAMETER;
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
/* Get the registry class */
|
/* Get the registry class */
|
||||||
if (!parseKeyName(stdInput, &keyClass, &keyPath))
|
if (!(keyClass = parseKeyName(stdInput, &keyPath)))
|
||||||
return ERROR_INVALID_PARAMETER;
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
res = RegCreateKeyExW(
|
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);
|
lstrcpyW(reg_key_name_buf, reg_key_name);
|
||||||
|
|
||||||
/* open the specified key */
|
/* 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);
|
output_message(STRING_INCORRECT_REG_CLASS, reg_key_name);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -1408,7 +1385,7 @@ void delete_registry_key(WCHAR *reg_key_name)
|
||||||
if (!reg_key_name || !reg_key_name[0])
|
if (!reg_key_name || !reg_key_name[0])
|
||||||
return;
|
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);
|
output_message(STRING_INCORRECT_REG_CLASS, reg_key_name);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue