Charles Davis : kernel32: Make CopyFile() call CopyFileEx() instead of the other way around.

Alexandre Julliard julliard at winehq.org
Fri Jan 18 12:07:36 CST 2013


Module: wine
Branch: master
Commit: e21c805fbeefae5224ea8faf8e9ce4b94cabaeb1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e21c805fbeefae5224ea8faf8e9ce4b94cabaeb1

Author: Charles Davis <cdavis5x at gmail.com>
Date:   Thu Jan 17 13:28:43 2013 -0700

kernel32: Make CopyFile() call CopyFileEx() instead of the other way around.

---

 dlls/kernel32/path.c |   72 +++++++++++++++++++++++---------------------------
 1 files changed, 33 insertions(+), 39 deletions(-)

diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
index a326058..e42b05b 100644
--- a/dlls/kernel32/path.c
+++ b/dlls/kernel32/path.c
@@ -907,6 +907,36 @@ static BOOL is_same_file(HANDLE h1, HANDLE h2)
  */
 BOOL WINAPI CopyFileW( LPCWSTR source, LPCWSTR dest, BOOL fail_if_exists )
 {
+    return CopyFileExW( source, dest, NULL, NULL, NULL,
+                        fail_if_exists ? COPY_FILE_FAIL_IF_EXISTS : 0 );
+}
+
+
+/**************************************************************************
+ *           CopyFileA   (KERNEL32.@)
+ */
+BOOL WINAPI CopyFileA( LPCSTR source, LPCSTR dest, BOOL fail_if_exists)
+{
+    WCHAR *sourceW, *destW;
+    BOOL ret;
+
+    if (!(sourceW = FILE_name_AtoW( source, FALSE ))) return FALSE;
+    if (!(destW = FILE_name_AtoW( dest, TRUE ))) return FALSE;
+
+    ret = CopyFileW( sourceW, destW, fail_if_exists );
+
+    HeapFree( GetProcessHeap(), 0, destW );
+    return ret;
+}
+
+
+/**************************************************************************
+ *           CopyFileExW   (KERNEL32.@)
+ */
+BOOL WINAPI CopyFileExW(LPCWSTR source, LPCWSTR dest,
+                        LPPROGRESS_ROUTINE progress, LPVOID param,
+                        LPBOOL cancel_ptr, DWORD flags)
+{
     static const int buffer_size = 65536;
     HANDLE h1, h2;
     BY_HANDLE_FILE_INFORMATION info;
@@ -925,7 +955,7 @@ BOOL WINAPI CopyFileW( LPCWSTR source, LPCWSTR dest, BOOL fail_if_exists )
         return FALSE;
     }
 
-    TRACE("%s -> %s, %d\n", debugstr_w(source), debugstr_w(dest), fail_if_exists);
+    TRACE("%s -> %s, %x\n", debugstr_w(source), debugstr_w(dest), flags);
 
     if ((h1 = CreateFileW(source, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
                      NULL, OPEN_EXISTING, 0, 0)) == INVALID_HANDLE_VALUE)
@@ -943,7 +973,7 @@ BOOL WINAPI CopyFileW( LPCWSTR source, LPCWSTR dest, BOOL fail_if_exists )
         return FALSE;
     }
 
-    if (!fail_if_exists)
+    if (!(flags & COPY_FILE_FAIL_IF_EXISTS))
     {
         BOOL same_file = FALSE;
         h2 = CreateFileW( dest, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
@@ -963,7 +993,7 @@ BOOL WINAPI CopyFileW( LPCWSTR source, LPCWSTR dest, BOOL fail_if_exists )
     }
 
     if ((h2 = CreateFileW( dest, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
-                             fail_if_exists ? CREATE_NEW : CREATE_ALWAYS,
+                             (flags & COPY_FILE_FAIL_IF_EXISTS) ? CREATE_NEW : CREATE_ALWAYS,
                              info.dwFileAttributes, h1 )) == INVALID_HANDLE_VALUE)
     {
         WARN("Unable to open dest %s\n", debugstr_w(dest));
@@ -995,42 +1025,6 @@ done:
 
 
 /**************************************************************************
- *           CopyFileA   (KERNEL32.@)
- */
-BOOL WINAPI CopyFileA( LPCSTR source, LPCSTR dest, BOOL fail_if_exists)
-{
-    WCHAR *sourceW, *destW;
-    BOOL ret;
-
-    if (!(sourceW = FILE_name_AtoW( source, FALSE ))) return FALSE;
-    if (!(destW = FILE_name_AtoW( dest, TRUE ))) return FALSE;
-
-    ret = CopyFileW( sourceW, destW, fail_if_exists );
-
-    HeapFree( GetProcessHeap(), 0, destW );
-    return ret;
-}
-
-
-/**************************************************************************
- *           CopyFileExW   (KERNEL32.@)
- *
- * This implementation ignores most of the extra parameters passed-in into
- * the "ex" version of the method and calls the CopyFile method.
- * It will have to be fixed eventually.
- */
-BOOL WINAPI CopyFileExW(LPCWSTR sourceFilename, LPCWSTR destFilename,
-                        LPPROGRESS_ROUTINE progressRoutine, LPVOID appData,
-                        LPBOOL cancelFlagPointer, DWORD copyFlags)
-{
-    /*
-     * Interpret the only flag that CopyFile can interpret.
-     */
-    return CopyFileW(sourceFilename, destFilename, (copyFlags & COPY_FILE_FAIL_IF_EXISTS) != 0);
-}
-
-
-/**************************************************************************
  *           CopyFileExA   (KERNEL32.@)
  */
 BOOL WINAPI CopyFileExA(LPCSTR sourceFilename, LPCSTR destFilename,




More information about the wine-cvs mailing list