[wine-gitlab] [PATCH v3 0/7] MR391: scrrun: Implement MoveFolder().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52128 Signed-off-by: Robert Wilhelm <robert.wilhelm(a)gmx.net> -- v3: scrrun: Support wildcards in MoveFolder(). scrrun: Move source dir into destination dir if destination ends with separator in MoveFolder(). https://gitlab.winehq.org/wine/wine/-/merge_requests/391
From: Robert Wilhelm <robert.wilhelm(a)gmx.net> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52128 Signed-off-by: Robert Wilhelm <robert.wilhelm(a)gmx.net> --- dlls/scrrun/filesystem.c | 7 +++---- dlls/scrrun/tests/filesystem.c | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c index 35b43e2f124..dac3b9fdcf7 100644 --- a/dlls/scrrun/filesystem.c +++ b/dlls/scrrun/filesystem.c @@ -3764,12 +3764,11 @@ static HRESULT WINAPI filesys_MoveFile(IFileSystem3 *iface, BSTR source, BSTR de return MoveFileW(source, destination) ? S_OK : create_error(GetLastError()); } -static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface,BSTR Source, - BSTR Destination) +static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface, BSTR source, BSTR destination) { - FIXME("%p %s %s\n", iface, debugstr_w(Source), debugstr_w(Destination)); + TRACE("%p %s %s\n", iface, debugstr_w(source), debugstr_w(destination)); - return E_NOTIMPL; + return MoveFileW(source, destination) ? S_OK : create_error(GetLastError()); } static inline HRESULT copy_file(const WCHAR *source, DWORD source_len, diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c index 1ba0e81a2d1..4d7692a5d1e 100644 --- a/dlls/scrrun/tests/filesystem.c +++ b/dlls/scrrun/tests/filesystem.c @@ -2600,6 +2600,25 @@ static void test_MoveFile(void) SysFreeString(str); } +static void test_MoveFolder(void) +{ + BSTR src, dst; + WCHAR buffW1[MAX_PATH],buffW2[MAX_PATH]; + HRESULT hr; + + get_temp_path(L"foo", buffW1); + get_temp_path(L"bar", buffW2); + + ok(CreateDirectoryW(buffW1, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW1)); + src = SysAllocString(buffW1); + dst = SysAllocString(buffW2); + hr = IFileSystem3_MoveFolder(fs3, src, dst); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + SysFreeString(src); + SysFreeString(dst); + ok(RemoveDirectoryW(buffW2), "can't remove %s directory\n", wine_dbgstr_w(buffW1)); +} + static void test_DoOpenPipeStream(void) { static const char testdata[] = "test"; @@ -2733,6 +2752,7 @@ START_TEST(filesystem) test_GetExtensionName(); test_GetSpecialFolder(); test_MoveFile(); + test_MoveFolder(); test_DoOpenPipeStream(); IFileSystem3_Release(fs3); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/391
From: Robert Wilhelm <robert.wilhelm(a)gmx.net> Signed-off-by: Robert Wilhelm <robert.wilhelm(a)gmx.net> --- dlls/scrrun/filesystem.c | 3 +++ dlls/scrrun/tests/filesystem.c | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c index dac3b9fdcf7..815ec934ac1 100644 --- a/dlls/scrrun/filesystem.c +++ b/dlls/scrrun/filesystem.c @@ -3768,6 +3768,9 @@ static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface, BSTR source, BSTR { TRACE("%p %s %s\n", iface, debugstr_w(source), debugstr_w(destination)); + if(!source || !destination) + return E_INVALIDARG; + return MoveFileW(source, destination) ? S_OK : create_error(GetLastError()); } diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c index 4d7692a5d1e..31c0ddd1b95 100644 --- a/dlls/scrrun/tests/filesystem.c +++ b/dlls/scrrun/tests/filesystem.c @@ -2602,7 +2602,7 @@ static void test_MoveFile(void) static void test_MoveFolder(void) { - BSTR src, dst; + BSTR src, dst, str; WCHAR buffW1[MAX_PATH],buffW2[MAX_PATH]; HRESULT hr; @@ -2617,6 +2617,13 @@ static void test_MoveFolder(void) SysFreeString(src); SysFreeString(dst); ok(RemoveDirectoryW(buffW2), "can't remove %s directory\n", wine_dbgstr_w(buffW1)); + + str = SysAllocString(L"null.txt"); + hr = IFileSystem3_MoveFolder(fs3, str, NULL); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + hr = IFileSystem3_MoveFolder(fs3, NULL, str); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + SysFreeString(str); } static void test_DoOpenPipeStream(void) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/391
From: Robert Wilhelm <robert.wilhelm(a)gmx.net> Signed-off-by: Robert Wilhelm <robert.wilhelm(a)gmx.net> --- dlls/scrrun/tests/filesystem.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c index 31c0ddd1b95..5c911172d1a 100644 --- a/dlls/scrrun/tests/filesystem.c +++ b/dlls/scrrun/tests/filesystem.c @@ -2624,6 +2624,17 @@ static void test_MoveFolder(void) hr = IFileSystem3_MoveFolder(fs3, NULL, str); ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); SysFreeString(str); + + ok(CreateDirectoryW(buffW1, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW1)); + ok(CreateDirectoryW(buffW2, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW1)); + src = SysAllocString(buffW1); + dst = SysAllocString(buffW2); + hr = IFileSystem3_MoveFolder(fs3, src, dst); /* dst already exists */ + ok(hr == CTL_E_FILEALREADYEXISTS, "Unexpected hr %#lx.\n", hr); + SysFreeString(src); + SysFreeString(dst); + ok(RemoveDirectoryW(buffW1), "can't remove %s directory\n", wine_dbgstr_w(buffW1)); + ok(RemoveDirectoryW(buffW2), "can't remove %s directory\n", wine_dbgstr_w(buffW2)); } static void test_DoOpenPipeStream(void) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/391
From: Robert Wilhelm <robert.wilhelm(a)gmx.net> Signed-off-by: Robert Wilhelm <robert.wilhelm(a)gmx.net> --- dlls/scrrun/filesystem.c | 6 ++++++ dlls/scrrun/tests/filesystem.c | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c index 815ec934ac1..816d8993530 100644 --- a/dlls/scrrun/filesystem.c +++ b/dlls/scrrun/filesystem.c @@ -3766,11 +3766,17 @@ static HRESULT WINAPI filesys_MoveFile(IFileSystem3 *iface, BSTR source, BSTR de static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface, BSTR source, BSTR destination) { + DWORD attrs; + TRACE("%p %s %s\n", iface, debugstr_w(source), debugstr_w(destination)); if(!source || !destination) return E_INVALIDARG; + attrs = GetFileAttributesW(source); + if(attrs == INVALID_FILE_ATTRIBUTES) + return CTL_E_PATHNOTFOUND; + return MoveFileW(source, destination) ? S_OK : create_error(GetLastError()); } diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c index 5c911172d1a..f2bfe52c2ad 100644 --- a/dlls/scrrun/tests/filesystem.c +++ b/dlls/scrrun/tests/filesystem.c @@ -2635,6 +2635,13 @@ static void test_MoveFolder(void) SysFreeString(dst); ok(RemoveDirectoryW(buffW1), "can't remove %s directory\n", wine_dbgstr_w(buffW1)); ok(RemoveDirectoryW(buffW2), "can't remove %s directory\n", wine_dbgstr_w(buffW2)); + + src = SysAllocString(buffW1); + dst = SysAllocString(buffW2); + hr = IFileSystem3_MoveFolder(fs3, src, dst); /* src nonexistant */ + ok(hr == CTL_E_PATHNOTFOUND, "Unexpected hr %#lx.\n", hr); + SysFreeString(src); + SysFreeString(dst); } static void test_DoOpenPipeStream(void) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/391
From: Robert Wilhelm <robert.wilhelm(a)gmx.net> Signed-off-by: Robert Wilhelm <robert.wilhelm(a)gmx.net> --- dlls/scrrun/filesystem.c | 2 +- dlls/scrrun/tests/filesystem.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c index 816d8993530..6ffebc0af12 100644 --- a/dlls/scrrun/filesystem.c +++ b/dlls/scrrun/filesystem.c @@ -3774,7 +3774,7 @@ static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface, BSTR source, BSTR return E_INVALIDARG; attrs = GetFileAttributesW(source); - if(attrs == INVALID_FILE_ATTRIBUTES) + if((attrs == INVALID_FILE_ATTRIBUTES) || !(attrs & FILE_ATTRIBUTE_DIRECTORY)) return CTL_E_PATHNOTFOUND; return MoveFileW(source, destination) ? S_OK : create_error(GetLastError()); diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c index f2bfe52c2ad..4d144937840 100644 --- a/dlls/scrrun/tests/filesystem.c +++ b/dlls/scrrun/tests/filesystem.c @@ -2605,6 +2605,7 @@ static void test_MoveFolder(void) BSTR src, dst, str; WCHAR buffW1[MAX_PATH],buffW2[MAX_PATH]; HRESULT hr; + File *file; get_temp_path(L"foo", buffW1); get_temp_path(L"bar", buffW2); @@ -2642,6 +2643,19 @@ static void test_MoveFolder(void) ok(hr == CTL_E_PATHNOTFOUND, "Unexpected hr %#lx.\n", hr); SysFreeString(src); SysFreeString(dst); + + file = CreateFileW(buffW1, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL, NULL); + ok(file != INVALID_HANDLE_VALUE, "CreateFile failed\n"); + CloseHandle(file); + + src = SysAllocString(buffW1); + dst = SysAllocString(buffW2); + hr = IFileSystem3_MoveFolder(fs3, src, dst); /* src is regular file */ + ok(hr == CTL_E_PATHNOTFOUND, "Unexpected hr %#lx.\n", hr); + SysFreeString(src); + SysFreeString(dst); + DeleteFileW(buffW1); } static void test_DoOpenPipeStream(void) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/391
From: Robert Wilhelm <robert.wilhelm(a)gmx.net> Signed-off-by: Robert Wilhelm <robert.wilhelm(a)gmx.net> --- dlls/scrrun/filesystem.c | 17 +++++++++++++++ dlls/scrrun/tests/filesystem.c | 38 +++++++++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c index 6ffebc0af12..44ead49714e 100644 --- a/dlls/scrrun/filesystem.c +++ b/dlls/scrrun/filesystem.c @@ -29,6 +29,7 @@ #include "olectl.h" #include "dispex.h" #include "ntsecapi.h" +#include "shlwapi.h" #include "scrrun.h" #include "scrrun_private.h" @@ -3767,6 +3768,9 @@ static HRESULT WINAPI filesys_MoveFile(IFileSystem3 *iface, BSTR source, BSTR de static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface, BSTR source, BSTR destination) { DWORD attrs; + int len; + WCHAR src_drive[MAX_PATH],src_dir[MAX_PATH],dst_path[MAX_PATH], + file_name[MAX_PATH],file_ext[MAX_PATH]; TRACE("%p %s %s\n", iface, debugstr_w(source), debugstr_w(destination)); @@ -3777,6 +3781,19 @@ static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface, BSTR source, BSTR if((attrs == INVALID_FILE_ATTRIBUTES) || !(attrs & FILE_ATTRIBUTE_DIRECTORY)) return CTL_E_PATHNOTFOUND; + _wsplitpath(source, src_drive, src_dir, file_name, file_ext); + len = lstrlenW(destination); + + if (destination[len-1] == '\\' || destination[len-1] == '/') { + lstrcpyW(dst_path, destination); + lstrcatW(dst_path, file_name); + if (*file_ext) { + lstrcatW(dst_path, L"."); + lstrcatW(dst_path, file_ext); + } + TRACE("move %s to %s\n", debugstr_w(source), debugstr_w(dst_path)); + return MoveFileW(source, dst_path) ? S_OK : create_error(GetLastError()); + } return MoveFileW(source, destination) ? S_OK : create_error(GetLastError()); } diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c index 4d144937840..3876598518a 100644 --- a/dlls/scrrun/tests/filesystem.c +++ b/dlls/scrrun/tests/filesystem.c @@ -2603,7 +2603,7 @@ static void test_MoveFile(void) static void test_MoveFolder(void) { BSTR src, dst, str; - WCHAR buffW1[MAX_PATH],buffW2[MAX_PATH]; + WCHAR buffW1[MAX_PATH],buffW2[MAX_PATH],pathW[MAX_PATH]; HRESULT hr; File *file; @@ -2656,6 +2656,42 @@ static void test_MoveFolder(void) SysFreeString(src); SysFreeString(dst); DeleteFileW(buffW1); + + GetTempPathW(MAX_PATH, buffW1); + lstrcatW(buffW1,L"foo"); + GetTempPathW(MAX_PATH, buffW2); + lstrcatW(buffW2,L"bar"); + ok(CreateDirectoryW(buffW1, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW1)); + ok(CreateDirectoryW(buffW2, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW2)); + lstrcpyW(pathW,buffW2); + lstrcatW(pathW,L"\\"); + src = SysAllocString(buffW1); + dst = SysAllocString(pathW); + hr = IFileSystem3_MoveFolder(fs3, src, dst); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + SysFreeString(src); + SysFreeString(dst); + lstrcatW(pathW,L"foo"); + ok(RemoveDirectoryW(pathW), "can't remove %s directory\n", wine_dbgstr_w(pathW)); + ok(RemoveDirectoryW(buffW2), "can't remove %s directory\n", wine_dbgstr_w(buffW2)); + + GetTempPathW(MAX_PATH, buffW1); + lstrcatW(buffW1,L"foo"); + GetTempPathW(MAX_PATH, buffW2); + lstrcatW(buffW2,L"bar"); + ok(CreateDirectoryW(buffW1, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW1)); + ok(CreateDirectoryW(buffW2, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW2)); + lstrcpyW(pathW,buffW2); + lstrcatW(pathW,L"/"); + src = SysAllocString(buffW1); + dst = SysAllocString(pathW); + hr = IFileSystem3_MoveFolder(fs3, src, dst); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + SysFreeString(src); + SysFreeString(dst); + lstrcatW(pathW,L"foo"); + ok(RemoveDirectoryW(pathW), "can't remove %s directory\n", wine_dbgstr_w(pathW)); + ok(RemoveDirectoryW(buffW2), "can't remove %s directory\n", wine_dbgstr_w(buffW2)); } static void test_DoOpenPipeStream(void) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/391
From: Robert Wilhelm <robert.wilhelm(a)gmx.net> Signed-off-by: Robert Wilhelm <robert.wilhelm(a)gmx.net> --- dlls/scrrun/Makefile.in | 2 +- dlls/scrrun/filesystem.c | 48 +++++++++++++++++++++++----------- dlls/scrrun/tests/filesystem.c | 27 ++++++++++++++++++- 3 files changed, 60 insertions(+), 17 deletions(-) diff --git a/dlls/scrrun/Makefile.in b/dlls/scrrun/Makefile.in index 12be899162b..21798694587 100644 --- a/dlls/scrrun/Makefile.in +++ b/dlls/scrrun/Makefile.in @@ -1,6 +1,6 @@ MODULE = scrrun.dll IMPORTLIB = scrrun -IMPORTS = uuid oleaut32 version advapi32 +IMPORTS = uuid oleaut32 version advapi32 shlwapi EXTRADLLFLAGS = -Wb,--prefer-native diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c index 44ead49714e..0a592a27271 100644 --- a/dlls/scrrun/filesystem.c +++ b/dlls/scrrun/filesystem.c @@ -3769,32 +3769,50 @@ static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface, BSTR source, BSTR { DWORD attrs; int len; - WCHAR src_drive[MAX_PATH],src_dir[MAX_PATH],dst_path[MAX_PATH], + WCHAR src_path[MAX_PATH],src_drive[MAX_PATH],src_dir[MAX_PATH],dst_path[MAX_PATH], file_name[MAX_PATH],file_ext[MAX_PATH]; + WIN32_FIND_DATAW ffd; + HANDLE f; + BOOL wildcard = FALSE; TRACE("%p %s %s\n", iface, debugstr_w(source), debugstr_w(destination)); if(!source || !destination) return E_INVALIDARG; - attrs = GetFileAttributesW(source); - if((attrs == INVALID_FILE_ATTRIBUTES) || !(attrs & FILE_ATTRIBUTE_DIRECTORY)) - return CTL_E_PATHNOTFOUND; - _wsplitpath(source, src_drive, src_dir, file_name, file_ext); + if (wcschr(file_name,'*') || wcschr(file_name,'?') ||wcschr(file_ext,'*') || wcschr(file_ext,'?')) + wildcard = TRUE; + + if (!wildcard) { + attrs = GetFileAttributesW(source); + if((attrs == INVALID_FILE_ATTRIBUTES) || !(attrs & FILE_ATTRIBUTE_DIRECTORY)) + return CTL_E_PATHNOTFOUND; + } + len = lstrlenW(destination); - if (destination[len-1] == '\\' || destination[len-1] == '/') { - lstrcpyW(dst_path, destination); - lstrcatW(dst_path, file_name); - if (*file_ext) { - lstrcatW(dst_path, L"."); - lstrcatW(dst_path, file_ext); - } - TRACE("move %s to %s\n", debugstr_w(source), debugstr_w(dst_path)); - return MoveFileW(source, dst_path) ? S_OK : create_error(GetLastError()); + if (wildcard || destination[len-1] == '\\' || destination[len-1] == '/') { + f = FindFirstFileW(source, &ffd); + if(f == INVALID_HANDLE_VALUE) + return create_error(GetLastError()); + + do { + lstrcpyW(dst_path, destination); + lstrcpyW(src_path, src_drive); + lstrcatW(src_path, src_dir); + if (!PathAppendW(src_path, ffd.cFileName)) return create_error(GetLastError()); + if (!PathAppendW(dst_path, ffd.cFileName)) return create_error(GetLastError()); + TRACE("move %s to %s\n", debugstr_w(src_path), debugstr_w(dst_path)); + if (!MoveFileW(src_path, dst_path)) + return create_error(GetLastError()); + } while(FindNextFileW(f, &ffd)); + FindClose(f); } - return MoveFileW(source, destination) ? S_OK : create_error(GetLastError()); + else { + return MoveFileW(source, destination) ? S_OK : create_error(GetLastError()); + } + return S_OK; } static inline HRESULT copy_file(const WCHAR *source, DWORD source_len, diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c index 3876598518a..484ec3f7777 100644 --- a/dlls/scrrun/tests/filesystem.c +++ b/dlls/scrrun/tests/filesystem.c @@ -2603,7 +2603,7 @@ static void test_MoveFile(void) static void test_MoveFolder(void) { BSTR src, dst, str; - WCHAR buffW1[MAX_PATH],buffW2[MAX_PATH],pathW[MAX_PATH]; + WCHAR buffW1[MAX_PATH],buffW2[MAX_PATH],pathW[MAX_PATH],srcW[MAX_PATH]; HRESULT hr; File *file; @@ -2692,6 +2692,31 @@ static void test_MoveFolder(void) lstrcatW(pathW,L"foo"); ok(RemoveDirectoryW(pathW), "can't remove %s directory\n", wine_dbgstr_w(pathW)); ok(RemoveDirectoryW(buffW2), "can't remove %s directory\n", wine_dbgstr_w(buffW2)); + + GetTempPathW(MAX_PATH, buffW1); + lstrcatW(buffW1,L"foo1"); + GetTempPathW(MAX_PATH, buffW2); + lstrcatW(buffW2,L"foo2"); + GetTempPathW(MAX_PATH, srcW); + lstrcatW(srcW,L"foo?"); + GetTempPathW(MAX_PATH, pathW); + lstrcatW(pathW,L"bar"); + ok(CreateDirectoryW(buffW1, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW1)); + ok(CreateDirectoryW(buffW2, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW2)); + ok(CreateDirectoryW(pathW, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(pathW)); + src = SysAllocString(srcW); + dst = SysAllocString(pathW); + hr = IFileSystem3_MoveFolder(fs3, src, dst); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + SysFreeString(src); + SysFreeString(dst); + lstrcpyW(buffW1,pathW); + lstrcatW(buffW1,L"\\foo1"); + lstrcpyW(buffW2,pathW); + lstrcatW(buffW2,L"\\foo2"); + ok(RemoveDirectoryW(buffW1), "can't remove %s directory\n", wine_dbgstr_w(buffW1)); + ok(RemoveDirectoryW(buffW2), "can't remove %s directory\n", wine_dbgstr_w(buffW2)); + ok(RemoveDirectoryW(pathW), "can't remove %s directory\n", wine_dbgstr_w(pathW)); } static void test_DoOpenPipeStream(void) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/391
Akihiro Sagawa (@sgwaki) commented about dlls/scrrun/tests/filesystem.c:
hr = IFileSystem3_MoveFolder(fs3, NULL, str); ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); SysFreeString(str); + + ok(CreateDirectoryW(buffW1, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW1)); + ok(CreateDirectoryW(buffW2, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW1));
```suggestion:-0+0 ok(CreateDirectoryW(buffW2, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW2)); ``` -- https://gitlab.winehq.org/wine/wine/-/merge_requests/391#note_3541
Akihiro Sagawa (@sgwaki) commented about dlls/scrrun/tests/filesystem.c:
+ + ok(CreateDirectoryW(buffW1, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW1)); + src = SysAllocString(buffW1); + dst = SysAllocString(buffW2); + hr = IFileSystem3_MoveFolder(fs3, src, dst); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + SysFreeString(src); + SysFreeString(dst); + ok(RemoveDirectoryW(buffW2), "can't remove %s directory\n", wine_dbgstr_w(buffW1)); + + str = SysAllocString(L"null.txt"); + hr = IFileSystem3_MoveFolder(fs3, str, NULL); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + hr = IFileSystem3_MoveFolder(fs3, NULL, str); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + SysFreeString(str); How about to add `IFileSystem3_MoveFolder(fs3, "", str);` and `IFileSystem3_MoveFolder(fs3, str, "");`?
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/391#note_3548
Akihiro Sagawa (@sgwaki) commented about dlls/scrrun/tests/filesystem.c:
+ dst = SysAllocString(buffW2); + hr = IFileSystem3_MoveFolder(fs3, src, dst); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + SysFreeString(src); + SysFreeString(dst); + ok(RemoveDirectoryW(buffW2), "can't remove %s directory\n", wine_dbgstr_w(buffW1)); + + str = SysAllocString(L"null.txt"); + hr = IFileSystem3_MoveFolder(fs3, str, NULL); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + hr = IFileSystem3_MoveFolder(fs3, NULL, str); + ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); + SysFreeString(str); + + ok(CreateDirectoryW(buffW1, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW1)); + ok(CreateDirectoryW(buffW2, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW1));
ok(CreateDirectoryW(buffW2, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW2));
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/391#note_3546
Akihiro Sagawa (@sgwaki) commented about dlls/scrrun/tests/filesystem.c:
+ BSTR src, dst, str; + WCHAR buffW1[MAX_PATH],buffW2[MAX_PATH],pathW[MAX_PATH],srcW[MAX_PATH]; + HRESULT hr; + File *file; + + get_temp_path(L"foo", buffW1); + get_temp_path(L"bar", buffW2); + + ok(CreateDirectoryW(buffW1, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW1)); + src = SysAllocString(buffW1); + dst = SysAllocString(buffW2); + hr = IFileSystem3_MoveFolder(fs3, src, dst); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + SysFreeString(src); + SysFreeString(dst); + ok(RemoveDirectoryW(buffW2), "can't remove %s directory\n", wine_dbgstr_w(buffW1));
ok(RemoveDirectoryW(buffW2), "can't remove %s directory\n", wine_dbgstr_w(buffW2));
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/391#note_3545
Akihiro Sagawa (@sgwaki) commented about dlls/scrrun/filesystem.c:
+ DWORD attrs; + int len; + WCHAR src_path[MAX_PATH],src_drive[MAX_PATH],src_dir[MAX_PATH],dst_path[MAX_PATH], + file_name[MAX_PATH],file_ext[MAX_PATH]; + WIN32_FIND_DATAW ffd; + HANDLE f; + BOOL wildcard = FALSE;
- return E_NOTIMPL; + TRACE("%p %s %s\n", iface, debugstr_w(source), debugstr_w(destination)); + + if(!source || !destination) + return E_INVALIDARG; + + _wsplitpath(source, src_drive, src_dir, file_name, file_ext); + if (wcschr(file_name,'*') || wcschr(file_name,'?') ||wcschr(file_ext,'*') || wcschr(file_ext,'?')) You can use `wcspbrk()` here as seen in dlls/comdlg32/filedlg.c.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/391#note_3547
participants (3)
-
Akihiro Sagawa (@sgwaki) -
Robert Wilhelm -
Robert Wilhelm (@sloper42)