Overwrite existing files with moveFile.
authorachristensen@apple.com <achristensen@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 20 Apr 2015 23:26:44 +0000 (23:26 +0000)
committerachristensen@apple.com <achristensen@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 20 Apr 2015 23:26:44 +0000 (23:26 +0000)
https://bugs.webkit.org/show_bug.cgi?id=143968

Reviewed by Brady Eidson and Anders Carlsson.

* platform/mac/FileSystemMac.mm:
(-[WebFileManagerDelegate fileManager:shouldProceedAfterError:movingItemAtURL:toURL:]):
(WebCore::moveFile):
r182932 introduced moveFile instead of renameFile.  In order to preserve behavior, it should overwrite existing files.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@183035 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/mac/FileSystemMac.mm

index ad319e6..342709e 100644 (file)
@@ -1,3 +1,15 @@
+2015-04-20  Alex Christensen  <achristensen@webkit.org>
+
+        Overwrite existing files with moveFile.
+        https://bugs.webkit.org/show_bug.cgi?id=143968
+
+        Reviewed by Brady Eidson and Anders Carlsson.
+
+        * platform/mac/FileSystemMac.mm:
+        (-[WebFileManagerDelegate fileManager:shouldProceedAfterError:movingItemAtURL:toURL:]):
+        (WebCore::moveFile):
+        r182932 introduced moveFile instead of renameFile.  In order to preserve behavior, it should overwrite existing files.
+
 2015-04-20  Joseph Pecoraro  <pecoraro@apple.com>
 
         Unreviewed Windows build fix after r183031.
index 373c3fb..8e9a5d7 100644 (file)
 
 #import "WebCoreNSURLExtras.h"
 #import "WebCoreSystemInterface.h"
+#import <Foundation/FoundationErrors.h>
+#import <Foundation/NSFileManager.h>
 #import <wtf/RetainPtr.h>
 #import <wtf/text/CString.h>
 #import <wtf/text/WTFString.h>
 
+@interface WebFileManagerDelegate : NSObject <NSFileManagerDelegate>
+@end
+
+@implementation WebFileManagerDelegate
+
+- (BOOL)fileManager:(NSFileManager *)fileManager shouldProceedAfterError:(NSError *)error movingItemAtURL:(NSURL *)srcURL toURL:(NSURL *)dstURL
+{
+    UNUSED_PARAM(fileManager);
+    UNUSED_PARAM(srcURL);
+    UNUSED_PARAM(dstURL);    
+    return error.code == NSFileWriteFileExistsError;
+}
+
+@end
+
 namespace WebCore {
 
 String homeDirectoryPath()
@@ -69,7 +86,12 @@ String openTemporaryFile(const String& prefix, PlatformFileHandle& platformFileH
 
 bool moveFile(const String& oldPath, const String& newPath)
 {
-    return [[NSFileManager defaultManager] moveItemAtURL:[NSURL fileURLWithPath:oldPath] toURL:[NSURL fileURLWithPath:newPath] error:nil];
+    // Overwrite existing files.
+    auto manager = adoptNS([[NSFileManager alloc] init]);
+    auto delegate = adoptNS([[WebFileManagerDelegate alloc] init]);
+    [manager setDelegate:delegate.get()];
+    
+    return [manager moveItemAtURL:[NSURL fileURLWithPath:oldPath] toURL:[NSURL fileURLWithPath:newPath] error:nil];
 }
 
 #if !PLATFORM(IOS)