Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com --- programs/reg/tests/query.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-)
diff --git a/programs/reg/tests/query.c b/programs/reg/tests/query.c index c475d288fd8..3c87f76742e 100644 --- a/programs/reg/tests/query.c +++ b/programs/reg/tests/query.c @@ -167,6 +167,10 @@ static void test_query(void) run_reg_exe("reg query -H", &r); ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
+ /* Key not present */ + run_reg_exe("reg query HKCU\" KEY_BASE, &r); + ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r); + /* Create a test key */ add_key(HKEY_CURRENT_USER, KEY_BASE, &key); add_value(key, "Test1", REG_SZ, "Hello, World", 13); @@ -245,6 +249,7 @@ static void test_query(void) add_value(key, NULL, REG_SZ, "Empty", 6); add_value(subkey, NULL, REG_SZ, "Empty", 6); close_key(subkey); + close_key(key);
run_reg_exe("reg query HKCU\" KEY_BASE "\subkey /ve", &r); ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); @@ -253,17 +258,7 @@ static void test_query(void) ok(r == REG_EXIT_SUCCESS || r == REG_EXIT_FAILURE /* WinXP */, "got exit code %d, expected 0\n", r);
- /* Clean-up, then query */ - delete_key(key, "subkey"); - close_key(key); - - run_reg_exe("reg query HKCU\" KEY_BASE "\subkey", &r); - ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r); - - delete_key(HKEY_CURRENT_USER, KEY_BASE); - - run_reg_exe("reg query HKCU\" KEY_BASE, &r); - ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r); + delete_tree(HKEY_CURRENT_USER, KEY_BASE); }
START_TEST(query)
Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com --- programs/reg/tests/query.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/programs/reg/tests/query.c b/programs/reg/tests/query.c index 3c87f76742e..7c8a1795b34 100644 --- a/programs/reg/tests/query.c +++ b/programs/reg/tests/query.c @@ -149,7 +149,7 @@ static void test_query(void) " Wine REG_SZ Second instance\r\n\r\n";
DWORD r, dword = 0x123; - HKEY key, subkey; + HKEY hkey, subkey; BYTE buf[512];
delete_tree(HKEY_CURRENT_USER, KEY_BASE); @@ -172,9 +172,9 @@ static void test_query(void) ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
/* Create a test key */ - add_key(HKEY_CURRENT_USER, KEY_BASE, &key); - add_value(key, "Test1", REG_SZ, "Hello, World", 13); - add_value(key, "Test2", REG_DWORD, &dword, sizeof(dword)); + add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey); + add_value(hkey, "Test1", REG_SZ, "Hello, World", 13); + add_value(hkey, "Test2", REG_DWORD, &dword, sizeof(dword));
run_reg_exe("reg query HKCU\" KEY_BASE " /v", &r); ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r); @@ -206,10 +206,10 @@ static void test_query(void) run_reg_exe("reg query HKCU\" KEY_BASE " /v Test2", &r); ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
- add_value(key, "Wine", REG_SZ, "First instance", 15); + add_value(hkey, "Wine", REG_SZ, "First instance", 15);
/* Create a test subkey */ - add_key(key, "subkey", &subkey); + add_key(hkey, "subkey", &subkey);
read_reg_output("reg query HKCU\" KEY_BASE, buf, sizeof(buf), &r); ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); @@ -246,10 +246,10 @@ static void test_query(void) "got exit code %d, expected 0\n", r); compare_query(buf, test7, TRUE, 0);
- add_value(key, NULL, REG_SZ, "Empty", 6); + add_value(hkey, NULL, REG_SZ, "Empty", 6); add_value(subkey, NULL, REG_SZ, "Empty", 6); close_key(subkey); - close_key(key); + close_key(hkey);
run_reg_exe("reg query HKCU\" KEY_BASE "\subkey /ve", &r); ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com --- programs/reg/tests/query.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
diff --git a/programs/reg/tests/query.c b/programs/reg/tests/query.c index 7c8a1795b34..5c97554648e 100644 --- a/programs/reg/tests/query.c +++ b/programs/reg/tests/query.c @@ -148,6 +148,18 @@ static void test_query(void) "HKEY_CURRENT_USER\" KEY_BASE "\subkey\r\n" " Wine REG_SZ Second instance\r\n\r\n";
+ const char *test8a = "\r\n" + "HKEY_CURRENT_USER\" KEY_BASE "\subkey1\r\n" + "HKEY_CURRENT_USER\" KEY_BASE "\subkey2\r\n" + "HKEY_CURRENT_USER\" KEY_BASE "\subkey3\r\n" + "HKEY_CURRENT_USER\" KEY_BASE "\subkey4\r\n"; + + const char *test8b = "\r\n" + "HKEY_CURRENT_USER\" KEY_BASE "\subkey1\r\n\r\n" + "HKEY_CURRENT_USER\" KEY_BASE "\subkey2\r\n\r\n" + "HKEY_CURRENT_USER\" KEY_BASE "\subkey3\r\n\r\n" + "HKEY_CURRENT_USER\" KEY_BASE "\subkey4\r\n\r\n"; + DWORD r, dword = 0x123; HKEY hkey, subkey; BYTE buf[512]; @@ -259,6 +271,24 @@ static void test_query(void) "got exit code %d, expected 0\n", r);
delete_tree(HKEY_CURRENT_USER, KEY_BASE); + + /* Subkeys only */ + add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey); + add_key(hkey, "subkey1", NULL); + add_key(hkey, "subkey2", NULL); + add_key(hkey, "subkey3", NULL); + add_key(hkey, "subkey4", NULL); + close_key(hkey); + + read_reg_output("reg query HKCU\" KEY_BASE, buf, sizeof(buf), &r); + ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); + compare_query(buf, test8a, FALSE, TODO_REG_COMPARE); + + read_reg_output("reg query HKCU\" KEY_BASE " /s", buf, sizeof(buf), &r); + ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); + compare_query(buf, test8b, FALSE, TODO_REG_COMPARE); + + delete_tree(HKEY_CURRENT_USER, KEY_BASE); }
START_TEST(query)
Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com --- programs/reg/reg.c | 3 +-- programs/reg/reg.rc | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/programs/reg/reg.c b/programs/reg/reg.c index 9dd491a517e..7ed45b73ad8 100644 --- a/programs/reg/reg.c +++ b/programs/reg/reg.c @@ -240,8 +240,7 @@ BOOL parse_registry_key(const WCHAR *key, HKEY *root, WCHAR **path) *root = path_get_rootkey(key); if (!*root) { - if (*path) *(*path - 1) = 0; - output_message(STRING_INVALID_SYSTEM_KEY, key); + output_message(STRING_INVALID_SYSTEM_KEY); return FALSE; }
diff --git a/programs/reg/reg.rc b/programs/reg/reg.rc index 85e3675464c..021734db0a7 100644 --- a/programs/reg/reg.rc +++ b/programs/reg/reg.rc @@ -168,7 +168,7 @@ STRINGTABLE \ /y\n\ \ Overwrite <file> without prompting for confirmation.\n\n"
- STRING_INVALID_SYSTEM_KEY, "reg: Invalid system key [%1]\n" + STRING_INVALID_SYSTEM_KEY, "reg: Invalid system key\n" STRING_OVERWRITE_FILE, "The file '%1' already exists. Do you want to overwrite it?" STRING_KEY_NONEXIST, "reg: Unable to find the specified registry key\n" STRING_KEY_IMPORT_FAILED, "reg: Unable to import the registry key '%1'\n"
Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com --- programs/reg/reg.c | 16 +++++++++++++--- programs/reg/tests/add.c | 8 ++++---- 2 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/programs/reg/reg.c b/programs/reg/reg.c index 7ed45b73ad8..69107d54b92 100644 --- a/programs/reg/reg.c +++ b/programs/reg/reg.c @@ -234,9 +234,6 @@ BOOL parse_registry_key(const WCHAR *key, HKEY *root, WCHAR **path) if (!sane_path(key)) return FALSE;
- *path = wcschr(key, '\'); - if (*path) (*path)++; - *root = path_get_rootkey(key); if (!*root) { @@ -244,6 +241,19 @@ BOOL parse_registry_key(const WCHAR *key, HKEY *root, WCHAR **path) return FALSE; }
+ *path = wcschr(key, '\'); + + if (!*path) + return TRUE; + + (*path)++; + + if (!**path) + { + output_message(STRING_INVALID_SYSTEM_KEY); + return FALSE; + } + return TRUE; }
diff --git a/programs/reg/tests/add.c b/programs/reg/tests/add.c index 36b5f821350..6973eefd892 100644 --- a/programs/reg/tests/add.c +++ b/programs/reg/tests/add.c @@ -311,12 +311,12 @@ static void test_key_formats(void)
/* Test validity of trailing backslash after system key */ run_reg_exe("reg add HKCU\ /v Value1 /t REG_SZ /d foo /f", &r); - todo_wine ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r); - todo_wine verify_reg_nonexist(HKEY_CURRENT_USER, "Value1"); + ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r); + verify_reg_nonexist(HKEY_CURRENT_USER, "Value1");
run_reg_exe("reg add HKEY_CURRENT_USER\ /v Value2 /t REG_SZ /d bar /f", &r); - todo_wine ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r); - todo_wine verify_reg_nonexist(HKEY_CURRENT_USER, "Value2"); + ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r); + verify_reg_nonexist(HKEY_CURRENT_USER, "Value2"); }
static void test_add(void)