[PATCH] cmd.exe: Don't prompt for move when non-interactive.
Myah Caron
qsniyg at protonmail.com
Thu Sep 10 09:36:51 CDT 2020
From: Francesco Noferi <lolisamurai at tfwno.gf>
Wine-bug: https://bugs.winehq.org/show_bug.cgi?id=48396
Signed-off-by: Francesco Noferi <lolisamurai at tfwno.gf>
Signed-off-by: Myah Caron <qsniyg at protonmail.com>
---
The idea is based on Francesco's patch, but the implementation and comments
have mostly been copied from WCMD_copy.
programs/cmd/builtins.c | 33 ++++++++++++++++++++++++---------
1 file changed, 24 insertions(+), 9 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 70ccddebc11..3e6ecada6a8 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -3032,15 +3032,28 @@ void WCMD_move (void)
WCHAR copycmd[MAXSTRING];
DWORD len;
- /* /-Y has the highest priority, then /Y and finally the COPYCMD env. variable */
+ /* Default whether automatic overwriting is on. If we are interactive then
+ we prompt by default, otherwise we overwrite by default
+ /-Y has the highest priority, then /Y and finally the COPYCMD env. variable */
if (wcsstr (quals, parmNoY))
force = FALSE;
else if (wcsstr (quals, parmY))
force = TRUE;
else {
static const WCHAR copyCmdW[] = {'C','O','P','Y','C','M','D','\0'};
+ /* By default, we will force the overwrite in batch mode and ask for
+ * confirmation in interactive mode. */
+ force = !interactive;
+ /* If COPYCMD is set, then we force the overwrite with /Y and ask for
+ * confirmation with /-Y. If COPYCMD is neither of those, then we use the
+ * default behavior. */
len = GetEnvironmentVariableW(copyCmdW, copycmd, ARRAY_SIZE(copycmd));
- force = (len && len < ARRAY_SIZE(copycmd) && !lstrcmpiW(copycmd, parmY));
+ if (len && len < ARRAY_SIZE(copycmd)) {
+ if (!lstrcmpiW (copycmd, parmY))
+ force = TRUE;
+ else if (!lstrcmpiW (copycmd, parmNoY))
+ force = FALSE;
+ }
}
/* Prompt if overwriting */
@@ -3051,14 +3064,16 @@ void WCMD_move (void)
question = WCMD_format_string(WCMD_LoadMessage(WCMD_OVERWRITE), dest);
ok = WCMD_ask_confirm(question, FALSE, NULL);
LocalFree(question);
+ } else {
+ ok = TRUE;
+ }
- /* So delete the destination prior to the move */
- if (ok) {
- if (!DeleteFileW(dest)) {
- WCMD_print_error ();
- errorlevel = 1;
- ok = FALSE;
- }
+ /* So delete the destination prior to the move */
+ if (ok) {
+ if (!DeleteFileW(dest)) {
+ WCMD_print_error ();
+ errorlevel = 1;
+ ok = FALSE;
}
}
}
--
2.28.0
More information about the wine-devel
mailing list