[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