Commit 1e348427 authored by Kartavya Vashishtha's avatar Kartavya Vashishtha Committed by Alexandre Julliard

kernelbase: Implement CopyFile2().

parent 1b0d8428
......@@ -257,6 +257,7 @@
@ stdcall -import ConvertThreadToFiberEx(ptr long)
@ stdcall ConvertToGlobalHandle(long)
@ stdcall -import CopyContext(ptr long ptr)
@ stdcall -import CopyFile2(wstr wstr ptr)
@ stdcall CopyFileA(str str long)
@ stdcall CopyFileExA (str str ptr ptr ptr long)
@ stdcall -import CopyFileExW(wstr wstr ptr ptr ptr long)
......
......@@ -487,13 +487,15 @@ BOOL WINAPI DECLSPEC_HOTPATCH AreFileApisANSI(void)
return !oem_file_apis;
}
/***********************************************************************
* CopyFileExW (kernelbase.@)
/******************************************************************************
* copy_file
*/
BOOL WINAPI CopyFileExW( const WCHAR *source, const WCHAR *dest, LPPROGRESS_ROUTINE progress,
void *param, BOOL *cancel_ptr, DWORD flags )
static BOOL copy_file( const WCHAR *source, const WCHAR *dest, COPYFILE2_EXTENDED_PARAMETERS *params )
{
DWORD flags = params ? params->dwCopyFlags : 0;
BOOL *cancel_ptr = params ? params->pfCancel : NULL;
PCOPYFILE2_PROGRESS_ROUTINE progress = params ? params->pProgressRoutine : NULL;
static const int buffer_size = 65536;
HANDLE h1, h2;
FILE_BASIC_INFORMATION info;
......@@ -502,6 +504,11 @@ BOOL WINAPI CopyFileExW( const WCHAR *source, const WCHAR *dest, LPPROGRESS_ROUT
BOOL ret = FALSE;
char *buffer;
if (cancel_ptr)
FIXME("pfCancel is not supported\n");
if (progress)
FIXME("PCOPYFILE2_PROGRESS_ROUTINE is not supported\n");
if (!source || !dest)
{
SetLastError( ERROR_INVALID_PARAMETER );
......@@ -577,7 +584,7 @@ BOOL WINAPI CopyFileExW( const WCHAR *source, const WCHAR *dest, LPPROGRESS_ROUT
count -= res;
}
}
ret = TRUE;
ret = TRUE;
done:
/* Maintain the timestamp of source file to destination file and read-only attribute */
info.FileAttributes &= FILE_ATTRIBUTE_READONLY;
......@@ -589,6 +596,37 @@ done:
return ret;
}
/***********************************************************************
* CopyFile2 (kernelbase.@)
*/
HRESULT WINAPI CopyFile2( const WCHAR *source, const WCHAR *dest, COPYFILE2_EXTENDED_PARAMETERS *params )
{
return copy_file(source, dest, params) ? S_OK : HRESULT_FROM_WIN32(GetLastError());
}
/***********************************************************************
* CopyFileExW (kernelbase.@)
*/
BOOL WINAPI CopyFileExW( const WCHAR *source, const WCHAR *dest, LPPROGRESS_ROUTINE progress,
void *param, BOOL *cancel_ptr, DWORD flags )
{
COPYFILE2_EXTENDED_PARAMETERS params;
if (progress)
FIXME("LPPROGRESS_ROUTINE is not supported\n");
if (cancel_ptr)
FIXME("cancel_ptr is not supported\n");
params.dwSize = sizeof(params);
params.dwCopyFlags = flags;
params.pProgressRoutine = NULL;
params.pvCallbackContext = NULL;
params.pfCancel = NULL;
return copy_file( source, dest, &params );
}
/**************************************************************************
* CopyFileW (kernelbase.@)
......
......@@ -168,7 +168,7 @@
@ stdcall ConvertThreadToFiberEx(ptr long)
@ stdcall ConvertToAutoInheritPrivateObjectSecurity(ptr ptr ptr ptr long ptr)
@ stdcall CopyContext(ptr long ptr)
# @ stub CopyFile2
@ stdcall CopyFile2(wstr wstr ptr)
@ stdcall CopyFileExW(wstr wstr ptr ptr ptr long)
@ stdcall CopyFileW(wstr wstr long)
@ stdcall -arch=x86_64 CopyMemoryNonTemporal(ptr ptr long) ntdll.RtlCopyMemoryNonTemporal
......
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