Commit c4bba67a authored by Rolf Kalbermatter's avatar Rolf Kalbermatter Committed by Alexandre Julliard

Fix a return value in SHFileOperation and add some extra tests to

internal helper functions necessary to deal with shortcomings of kernel32 functions for the time being.
parent 2999165c
......@@ -258,7 +258,11 @@ static DWORD SHNotifyCreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
implementation does create directories with wildcard characters
without objection!! Once this is fixed, this here can go away. */
SetLastError(ERROR_INVALID_NAME);
#ifdef W98_FO_FUNCTION /* W98 */
return ERROR_FILE_NOT_FOUND;
#else
return ERROR_INVALID_NAME;
#endif
}
if (CreateDirectoryW(path, sec))
......@@ -413,6 +417,19 @@ static DWORD SHNotifyMoveFileW(LPCWSTR src, LPCWSTR dest, BOOL bRename)
TRACE("(%s %s %s)\n", debugstr_w(src), debugstr_w(dest), bRename ? "renameIfExists" : "");
if (StrPBrkW(dest, wWildcardChars))
{
/* FIXME: This test is currently necessary since our MoveFile
implementation does create files with wildcard characters
without objection!! Once this is fixed, this here can go away. */
SetLastError(ERROR_INVALID_NAME);
#ifdef W98_FO_FUNCTION /* W98 */
return ERROR_FILE_NOT_FOUND;
#else
return ERROR_INVALID_NAME;
#endif
}
ret = MoveFileW(src, dest);
if (!ret)
{
......@@ -946,16 +963,11 @@ DWORD WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
if (FO_RENAME == FuncSwitch)
{
/* temporary only for FO_RENAME */
/* ??? b_Mask = (NULL != strrbrk(pFrom,"*?")); */
if (b_MultiTo || b_MultiFrom || (b_Mask && !b_ToInvalidTail))
{
/* no work, only RC=0 */
/* ??? nFileOp.fAnyOperationsAborted = TRUE; */
/*#define W98_FO_RENEME */
#ifdef W98_FO_RENEME
goto shfileop_normal;
#ifndef W98_FO_FUNCTION
retCode = ERROR_GEN_FAILURE; /* W2K ERROR_GEN_FAILURE, W98 returns no error */
#endif
retCode = 0x1; /* 1 value unknown, W98 returns no error */
goto shfileop_error;
}
}
......
......@@ -21,6 +21,7 @@
#include <stdarg.h>
#include <stdio.h>
#define WINE_NOWINSOCK
#include "windef.h"
#include "winbase.h"
#include "wtypes.h"
......@@ -153,6 +154,7 @@ void test_rename()
SHFILEOPSTRUCTA shfo, shfo2;
CHAR from[MAX_PATH];
CHAR to[MAX_PATH];
DWORD retval;
shfo.hwnd = NULL;
shfo.wFunc = FO_RENAME;
......@@ -175,7 +177,8 @@ void test_rename()
set_curr_dir_path(from, "test1.txt\0test2.txt\0test4.txt\0");
set_curr_dir_path(to, "test6.txt\0test7.txt\0test8.txt\0");
ok(SHFileOperationA(&shfo), "Can't rename many files");
retval = SHFileOperationA(&shfo); /* W98 returns 0, W2K and newer returns ERROR_GEN_FAILURE, both do nothing */
ok(!retval || retval == ERROR_GEN_FAILURE, "Can't rename many files, retval = %lx", retval);
ok(file_exists(".\\test1.txt"), "The file is not renamed - many files are specified ");
memcpy(&shfo2, &shfo, sizeof(SHFILEOPSTRUCTA));
......@@ -183,14 +186,15 @@ void test_rename()
set_curr_dir_path(from, "test1.txt\0test2.txt\0test4.txt\0");
set_curr_dir_path(to, "test6.txt\0test7.txt\0test8.txt\0");
ok(SHFileOperationA(&shfo2), "Can't rename many files");
retval = SHFileOperationA(&shfo2); /* W98 returns 0, W2K and newer returns ERROR_GEN_FAILURE, both do nothing */
ok(!retval || retval == ERROR_GEN_FAILURE, "Can't rename many files, retval = %lx", retval);
ok(file_exists(".\\test1.txt"), "The file is not renamed - many files are specified ");
set_curr_dir_path(from, "test1.txt\0");
set_curr_dir_path(to, "test6.txt\0");
ok(!SHFileOperationA(&shfo), "Rename file");
ok(!file_exists(".\\test1.txt"), "The file is renamed");
ok(file_exists(".\\test6.txt"), "The file is renamed ");
ok(file_exists(".\\test6.txt"), "The file is renamed");
set_curr_dir_path(from, "test6.txt\0");
set_curr_dir_path(to, "test1.txt\0");
ok(!SHFileOperationA(&shfo), "Rename file back");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment