[PATCH] reg: Handle a special case for Default values and 'reg query'
Hugh McMaster
hugh.mcmaster at outlook.com
Thu Jul 21 02:36:44 CDT 2016
Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
programs/reg/reg.c | 26 ++++++++++++++++++++------
programs/reg/reg.h | 1 +
programs/reg/reg.rc | 1 +
programs/reg/tests/reg.c | 2 +-
4 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/programs/reg/reg.c b/programs/reg/reg.c
index 0d6bec4..6fcf129 100644
--- a/programs/reg/reg.c
+++ b/programs/reg/reg.c
@@ -583,6 +583,7 @@ static const WCHAR *reg_type_to_wchar(DWORD type)
static void output_value(const WCHAR *value_name, DWORD type, BYTE *data, DWORD data_size)
{
WCHAR fmt[] = {' ',' ',' ',' ','%','1',0};
+ WCHAR defval[32];
WCHAR *reg_data;
WCHAR newlineW[] = {'\n',0};
@@ -590,14 +591,22 @@ static void output_value(const WCHAR *value_name, DWORD type, BYTE *data, DWORD
output_string(fmt, value_name);
else
{
- WCHAR defval[32];
LoadStringW(GetModuleHandleW(NULL), STRING_DEFAULT_VALUE, defval, ARRAY_SIZE(defval));
output_string(fmt, defval);
}
output_string(fmt, reg_type_to_wchar(type));
- reg_data = reg_data_to_wchar(type, data, data_size);
- output_string(fmt, reg_data);
- HeapFree(GetProcessHeap(), 0, reg_data);
+
+ if (data)
+ {
+ reg_data = reg_data_to_wchar(type, data, data_size);
+ output_string(fmt, reg_data);
+ HeapFree(GetProcessHeap(), 0, reg_data);
+ }
+ else
+ {
+ LoadStringW(GetModuleHandleW(NULL), STRING_VALUE_NOT_SET, defval, ARRAY_SIZE(defval));
+ output_string(fmt, defval);
+ }
output_string(newlineW);
}
@@ -661,8 +670,13 @@ static int query_value(HKEY key, WCHAR *value_name, WCHAR *path, BOOL recurse)
{
if (rc == ERROR_FILE_NOT_FOUND)
{
- output_message(STRING_CANNOT_FIND);
- return 1;
+ if (value_name && *value_name)
+ {
+ output_message(STRING_CANNOT_FIND);
+ return 1;
+ }
+ output_string(fmt, path);
+ output_value(NULL, REG_SZ, NULL, 0);
}
return 0;
}
diff --git a/programs/reg/reg.h b/programs/reg/reg.h
index e7bb590..1142278 100644
--- a/programs/reg/reg.h
+++ b/programs/reg/reg.h
@@ -51,3 +51,4 @@
#define STRING_INVALID_OPTION 128
#define STRING_REG_HELP 129
#define STRING_FUNC_HELP 130
+#define STRING_VALUE_NOT_SET 131
diff --git a/programs/reg/reg.rc b/programs/reg/reg.rc
index 8714dae..ae69cb7 100644
--- a/programs/reg/reg.rc
+++ b/programs/reg/reg.rc
@@ -61,4 +61,5 @@ STRINGTABLE
STRING_INVALID_OPTION, "reg: Invalid option [%1]. "
STRING_REG_HELP, "Type \"REG /?\" for help.\n"
STRING_FUNC_HELP, "Type \"REG %1 /?\" for help.\n"
+ STRING_VALUE_NOT_SET, "(value not set)"
}
diff --git a/programs/reg/tests/reg.c b/programs/reg/tests/reg.c
index 7556870..0339e6e 100644
--- a/programs/reg/tests/reg.c
+++ b/programs/reg/tests/reg.c
@@ -547,7 +547,7 @@ static void test_query(void)
ok(err == ERROR_SUCCESS, "got %d, expected 0\n", err);
run_reg_exe("reg query HKCU\\" KEY_BASE " /ve", &r);
- todo_wine ok(r == REG_EXIT_SUCCESS || broken(r == REG_EXIT_FAILURE /* WinXP */),
+ ok(r == REG_EXIT_SUCCESS || broken(r == REG_EXIT_FAILURE /* WinXP */),
"got exit code %d, expected 0\n", r);
err = RegSetValueExA(key, "Test", 0, REG_SZ, (BYTE *)hello, sizeof(hello));
--
2.7.4
More information about the wine-patches
mailing list