[Bug 48397] New: 'cmd.exe /c move file1 file2' doesn't overwrite existing destination file in non-interactive mode

WineHQ Bugzilla wine-bugs at winehq.org
Tue Dec 31 11:02:21 CST 2019


https://bugs.winehq.org/show_bug.cgi?id=48397

            Bug ID: 48397
           Summary: 'cmd.exe /c move file1 file2' doesn't overwrite
                    existing destination file in non-interactive mode
           Product: Wine
           Version: 5.0-rc3
          Hardware: x86-64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: cmd
          Assignee: wine-bugs at winehq.org
          Reporter: focht at gmx.net
      Distribution: ---

Hello folks,

already mentioned in bug 48396 but split out here as separate issue.

--- snip ---
$ echo "1" > test1
$ echo "2" > test2

# work around bug 48396
$ export COPYCMD=/Y

$ wine cmd /c move test1 test2
File already exists.

$ cat test2
2
--- snip ---

Wine source:

https://source.winehq.org/git/wine.git/blob/HEAD:/programs/cmd/builtins.c#l2953

--- snip ---
2959 void WCMD_move (void)
2960 {
2961   BOOL             status;
2962   WIN32_FIND_DATAW fd;
2963   HANDLE          hff;
2964   WCHAR            input[MAX_PATH];
2965   WCHAR            output[MAX_PATH];
2966   WCHAR            drive[10];
2967   WCHAR            dir[MAX_PATH];
2968   WCHAR            fname[MAX_PATH];
2969   WCHAR            ext[MAX_PATH];
...
3023     /* If destination exists, prompt unless /Y supplied */
3024     if (GetFileAttributesW(dest) != INVALID_FILE_ATTRIBUTES) {
3025       BOOL force = FALSE;
3026       WCHAR copycmd[MAXSTRING];
3027       DWORD len;
3028 
3029       /* /-Y has the highest priority, then /Y and finally the COPYCMD
env. variable */
3030       if (wcsstr (quals, parmNoY))
3031         force = FALSE;
3032       else if (wcsstr (quals, parmY))
3033         force = TRUE;
3034       else {
3035         static const WCHAR copyCmdW[] =
{'C','O','P','Y','C','M','D','\0'};
3036         len = GetEnvironmentVariableW(copyCmdW, copycmd,
ARRAY_SIZE(copycmd));
3037         force = (len && len < ARRAY_SIZE(copycmd) && !lstrcmpiW(copycmd,
parmY));
3038       }
3039 
3040       /* Prompt if overwriting */
3041       if (!force) {
3042         WCHAR* question;
3043 
3044         /* Ask for confirmation */
3045         question = WCMD_format_string(WCMD_LoadMessage(WCMD_OVERWRITE),
dest);
3046         ok = WCMD_ask_confirm(question, FALSE, NULL);
3047         LocalFree(question);
3048 
3049         /* So delete the destination prior to the move */
3050         if (ok) {
3051           if (!DeleteFileW(dest)) {
3052             WCMD_print_error ();
3053             errorlevel = 1;
3054             ok = FALSE;
3055           }
3056         }
3057       }
3058     }
...
--- snip ---

$ wine --version
wine-5.0-rc3

Regards

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.


More information about the wine-bugs mailing list