Mike McCormack : kernel32: Implement CopyFileWithProgress.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jan 2 06:45:53 CST 2007


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

Author: Mike McCormack <mike at codeweavers.com>
Date:   Tue Jan  2 11:40:00 2007 +0900

kernel32: Implement CopyFileWithProgress.

---

 dlls/kernel32/kernel32.spec |    4 ++--
 dlls/kernel32/path.c        |   38 +++++++++++++++++++++++++++++++-------
 include/winbase.h           |    3 +++
 3 files changed, 36 insertions(+), 9 deletions(-)

diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index 7502bb8..9eba016 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -795,8 +795,8 @@
 @ stdcall MoveFileExA(str str long)
 @ stdcall MoveFileExW(wstr wstr long)
 @ stdcall MoveFileW(wstr wstr)
-# @ stub MoveFileWithProgressA
-# @ stub MoveFileWithProgressW
+@ stdcall MoveFileWithProgressA(str str ptr ptr long)
+@ stdcall MoveFileWithProgressW(wstr wstr ptr ptr long)
 @ stdcall MulDiv(long long long)
 @ stdcall MultiByteToWideChar(long long str long ptr long)
 # @ stub NlsConvertIntegerToString
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
index 56823da..39fc176 100644
--- a/dlls/kernel32/path.c
+++ b/dlls/kernel32/path.c
@@ -982,9 +982,11 @@ BOOL WINAPI CopyFileExA(LPCSTR sourceFil
 
 
 /**************************************************************************
- *           MoveFileExW   (KERNEL32.@)
+ *           MoveFileWithProgressW   (KERNEL32.@)
  */
-BOOL WINAPI MoveFileExW( LPCWSTR source, LPCWSTR dest, DWORD flag )
+BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest,
+                                   LPPROGRESS_ROUTINE fnProgress,
+                                   LPVOID param, DWORD flag )
 {
     FILE_BASIC_INFORMATION info;
     UNICODE_STRING nt_name;
@@ -994,7 +996,8 @@ BOOL WINAPI MoveFileExW( LPCWSTR source,
     HANDLE source_handle = 0, dest_handle;
     ANSI_STRING source_unix, dest_unix;
 
-    TRACE("(%s,%s,%04x)\n", debugstr_w(source), debugstr_w(dest), flag);
+    TRACE("(%s,%s,%p,%p,%04x)\n",
+          debugstr_w(source), debugstr_w(dest), fnProgress, param, flag );
 
     if (flag & MOVEFILE_DELAY_UNTIL_REBOOT)
         return add_boot_rename_entry( source, dest, flag );
@@ -1087,7 +1090,10 @@ BOOL WINAPI MoveFileExW( LPCWSTR source,
             NtClose( source_handle );
             RtlFreeAnsiString( &source_unix );
             RtlFreeAnsiString( &dest_unix );
-            return (CopyFileW( source, dest, TRUE ) && DeleteFileW( source ));
+            if (!CopyFileExW( source, dest, fnProgress,
+                              param, NULL, COPY_FILE_FAIL_IF_EXISTS ))
+                return FALSE;
+            return DeleteFileW( source );
         }
         FILE_SetDosError();
         /* if we created the destination, remove it */
@@ -1124,9 +1130,11 @@ error:
 }
 
 /**************************************************************************
- *           MoveFileExA   (KERNEL32.@)
+ *           MoveFileWithProgressA   (KERNEL32.@)
  */
-BOOL WINAPI MoveFileExA( LPCSTR source, LPCSTR dest, DWORD flag )
+BOOL WINAPI MoveFileWithProgressA( LPCSTR source, LPCSTR dest,
+                                   LPPROGRESS_ROUTINE fnProgress,
+                                   LPVOID param, DWORD flag )
 {
     WCHAR *sourceW, *destW;
     BOOL ret;
@@ -1139,11 +1147,27 @@ BOOL WINAPI MoveFileExA( LPCSTR source,
     else
         destW = NULL;
 
-    ret = MoveFileExW( sourceW, destW, flag );
+    ret = MoveFileWithProgressW( sourceW, destW, fnProgress, param, flag );
     HeapFree( GetProcessHeap(), 0, destW );
     return ret;
 }
 
+/**************************************************************************
+ *           MoveFileExW   (KERNEL32.@)
+ */
+BOOL WINAPI MoveFileExW( LPCWSTR source, LPCWSTR dest, DWORD flag )
+{
+    return MoveFileWithProgressW( source, dest, NULL, NULL, flag );
+}
+
+/**************************************************************************
+ *           MoveFileExA   (KERNEL32.@)
+ */
+BOOL WINAPI MoveFileExA( LPCSTR source, LPCSTR dest, DWORD flag )
+{
+    return MoveFileWithProgressA( source, dest, NULL, NULL, flag );
+}
+
 
 /**************************************************************************
  *           MoveFileW   (KERNEL32.@)
diff --git a/include/winbase.h b/include/winbase.h
index 7e29103..600094a 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -1831,6 +1831,9 @@ BOOL        WINAPI MoveFileW(LPCWSTR,LPC
 BOOL        WINAPI MoveFileExA(LPCSTR,LPCSTR,DWORD);
 BOOL        WINAPI MoveFileExW(LPCWSTR,LPCWSTR,DWORD);
 #define     MoveFileEx WINELIB_NAME_AW(MoveFileEx)
+BOOL        WINAPI MoveFileWithProgressA(LPCSTR,LPCSTR,LPPROGRESS_ROUTINE,LPVOID,DWORD);
+BOOL        WINAPI MoveFileWithProgressW(LPCWSTR,LPCWSTR,LPPROGRESS_ROUTINE,LPVOID,DWORD);
+#define     MoveFileWithProgress WINELIB_NAME_AW(MoveFileWithProgress)
 INT         WINAPI MulDiv(INT,INT,INT);
 BOOL        WINAPI NotifyChangeEventLog(HANDLE,HANDLE);
 BOOL        WINAPI ObjectCloseAuditAlarmA(LPCSTR,LPVOID,BOOL);




More information about the wine-cvs mailing list