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

kernelbase: Implement CopyFile2().

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