Skip to content

Commit

Permalink
kernelbase: Implement CopyFile2().
Browse files Browse the repository at this point in the history
(cherry picked from commit 1e34842)
  • Loading branch information
kartva authored and alasky17 committed Jul 29, 2024
1 parent 4b1ca0a commit 4a22a2a
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 7 deletions.
1 change: 1 addition & 0 deletions dlls/kernel32/kernel32.spec
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
50 changes: 44 additions & 6 deletions dlls/kernelbase/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 );
Expand Down Expand Up @@ -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 */
info.FileAttributes = 0;
Expand All @@ -589,6 +596,37 @@ BOOL WINAPI CopyFileExW( const WCHAR *source, const WCHAR *dest, LPPROGRESS_ROUT
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.@)
Expand Down
2 changes: 1 addition & 1 deletion dlls/kernelbase/kernelbase.spec
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 4a22a2a

Please sign in to comment.