[PATCH 7/7] reg: Ask the user whether they want to overwrite an existing registry value
Hugh McMaster
hugh.mcmaster at outlook.com
Fri Feb 5 02:08:36 CST 2016
Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
programs/reg/reg.c | 32 ++++++++++++++++++++++++++++++--
programs/reg/reg.h | 5 +++++
programs/reg/reg.rc | 5 +++++
3 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/programs/reg/reg.c b/programs/reg/reg.c
index 58c5346..fd731f0 100644
--- a/programs/reg/reg.c
+++ b/programs/reg/reg.c
@@ -142,6 +142,30 @@ static void __cdecl output_array(const WCHAR *fmt, ...)
__ms_va_end(va_args);
}
+/* Adapted from programs/cmd/builtins.c/ask_confirm() */
+static BOOL confirm_action(unsigned int msgid, WCHAR *opt_data)
+{
+ WCHAR Ybuffer[4];
+ WCHAR Nbuffer[4];
+ WCHAR answer[4];
+ DWORD count;
+
+ LoadStringW(GetModuleHandleW(NULL), STRING_YES, Ybuffer, ARRAY_SIZE(Ybuffer));
+ LoadStringW(GetModuleHandleW(NULL), STRING_NO, Nbuffer, ARRAY_SIZE(Nbuffer));
+
+ while (1)
+ {
+ output_message(msgid, opt_data);
+ output_message(STRING_YESNO);
+ ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), answer, ARRAY_SIZE(answer), &count, NULL);
+ answer[0] = toupperW(answer[0]);
+ if (answer[0] == Ybuffer[0])
+ return TRUE;
+ if (answer[0] == Nbuffer[0])
+ return FALSE;
+ }
+}
+
static inline BOOL path_rootname_cmp(const WCHAR *input_path, const WCHAR *rootkey_name)
{
DWORD length = strlenW(rootkey_name);
@@ -314,9 +338,13 @@ static int reg_add(WCHAR *key_name, WCHAR *value_name, BOOL value_empty,
if (!force)
{
- if (RegQueryValueW(subkey,value_name,NULL,NULL)==ERROR_SUCCESS)
+ if (RegQueryValueExW(subkey, value_name, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
- /* FIXME: Prompt for overwrite */
+ if (!confirm_action(STRING_OVERWRITE_VALUE, value_name))
+ {
+ output_message(STRING_CANCELLED);
+ return 0;
+ }
}
}
diff --git a/programs/reg/reg.h b/programs/reg/reg.h
index 717a3cf..0dd3261 100644
--- a/programs/reg/reg.h
+++ b/programs/reg/reg.h
@@ -34,3 +34,8 @@
#define STRING_MISSING_INTEGER 111
#define STRING_MISSING_HEXDATA 112
#define STRING_UNHANDLED_TYPE 113
+#define STRING_YES 114
+#define STRING_NO 115
+#define STRING_YESNO 116
+#define STRING_OVERWRITE_VALUE 117
+#define STRING_CANCELLED 118
diff --git a/programs/reg/reg.rc b/programs/reg/reg.rc
index 44c5e8b..5f52bac 100644
--- a/programs/reg/reg.rc
+++ b/programs/reg/reg.rc
@@ -39,4 +39,9 @@ STRINGTABLE
STRING_MISSING_INTEGER, "reg: The option [/d] must be followed by a valid integer\n"
STRING_MISSING_HEXDATA, "reg: The option [/d] must be followed by a valid hexadecimal value\n"
STRING_UNHANDLED_TYPE, "reg: Unhandled registry data type [/t 0x%1!x!, /d %2]\n"
+ STRING_YES, "#msgctxt#Yes key#Y"
+ STRING_NO, "#msgctxt#No key#N"
+ STRING_YESNO, " (Yes|No)"
+ STRING_OVERWRITE_VALUE, "The registry value '%1' already exists. Do you want to overwrite it?"
+ STRING_CANCELLED, "The registry operation was cancelled.\n"
}
--
1.9.1
More information about the wine-patches
mailing list