Added patch to fix SHFileOperation with FO_MOVE on Vista+ (should create non-existent subdirectories).

This commit is contained in:
Sebastian Lackner
2015-08-31 08:49:30 +02:00
parent 51d7077f51
commit 9d4b8df3cc
9 changed files with 116 additions and 26 deletions

View File

@@ -0,0 +1,46 @@
From 838dbfc163ed83706e88e309201d84197e6ebee1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 31 Jul 2014 04:52:01 +0200
Subject: shell32: Choose return value for SHFileOperationW depending on
windows version
---
dlls/shell32/shlfileop.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/dlls/shell32/shlfileop.c b/dlls/shell32/shlfileop.c
index cef2246..290102a 100644
--- a/dlls/shell32/shlfileop.c
+++ b/dlls/shell32/shlfileop.c
@@ -1060,7 +1060,7 @@ static HRESULT parse_file_list(FILE_LIST *flList, LPCWSTR szFiles)
/* empty list */
if (!szFiles[0])
- return ERROR_ACCESS_DENIED;
+ return ERROR_ACCESS_DENIED; /* S_OK for Windows 95/98 */
flList->feFiles = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
flList->num_alloc * sizeof(FILE_ENTRY));
@@ -1606,7 +1606,19 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
ZeroMemory(&flTo, sizeof(FILE_LIST));
if ((ret = parse_file_list(&flFrom, lpFileOp->pFrom)))
+ {
+ if (ret != ERROR_ACCESS_DENIED)
+ return ret;
+
+ /* Win 9X */
+ if (GetVersion() & 0x80000000)
+ return S_OK;
+
+ FIXME("The return value of this function call depends on the windows version.\n");
+ FIXME("For old software it might be necessary to set the windows version to 95/98 using winecfg.\n");
+
return ret;
+ }
if (lpFileOp->wFunc != FO_DELETE)
parse_file_list(&flTo, lpFileOp->pTo);
--
2.3.0

View File

@@ -0,0 +1,3 @@
Fixes: [37916] Anno 1602 installer depends on Windows 98 behavior of SHFileOperationW
Depends: shell32-Progress_Dialog
Category: stable