[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