Reviewed by Kevin.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 3 Jun 2005 03:12:20 +0000 (03:12 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 3 Jun 2005 03:12:20 +0000 (03:12 +0000)
- remove dependency on NSFileManager and NSCalendarDate private extras from WebFou

        * History.subproj/WebHistory.m:
        (-[WebHistoryPrivate findIndex:forDay:]):
        (-[WebHistoryPrivate arrayRepresentation]):
        (-[WebHistoryPrivate _loadHistoryGuts:URL:error:]):
        * Misc.subproj/WebFileDatabase.m:
        (-[WebFileDatabase _truncateToSizeLimit:]):
        (-[WebFileDatabase removeAllObjects]):
        (-[WebFileDatabase performSetObject:forKey:]):
        (-[WebFileDatabase performRemoveObjectForKey:]):
        (-[WebFileDatabase open]):
        * Misc.subproj/WebKitNSStringExtras.m:
        (-[NSString _webkit_fixedCarbonPOSIXPath]):
        * Misc.subproj/WebNSCalendarDateExtras.h: Added.
        * Misc.subproj/WebNSCalendarDateExtras.m: Added.
        (-[NSCalendarDate _webkit_compareDay:]):
        * Misc.subproj/WebNSDataExtras.h:
        * Misc.subproj/WebNSDictionaryExtras.h:
        * Misc.subproj/WebNSFileManagerExtras.h: Added.
        * Misc.subproj/WebNSFileManagerExtras.m: Added.
        (-[NSFileManager _webkit_fileExistsAtPath:isDirectory:traverseLink:]):
        (-[NSFileManager _webkit_createIntermediateDirectoriesForPath:attributes:]):
        (-[NSFileManager _webkit_createDirectoryAtPathWithIntermediateDirectories:attributes:]):
        (-[NSFileManager _webkit_createFileAtPathWithIntermediateDirectories:contents:attributes:directoryAttributes:]):
        (-[NSFileManager _webkit_removeFileOnlyAtPath:]):
        (-[NSFileManager _webkit_backgroundRemoveFileAtPath:]):
        (-[NSFileManager _webkit_backgroundRemoveLeftoverFiles:]):
        (-[NSFileManager _webkit_carbonPathForPath:]):
        (-[NSFileManager _webkit_startupVolumeName]):
        (-[NSFileManager _webkit_pathWithUniqueFilenameForPath:]):
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        * WebKit.pbproj/project.pbxproj:
        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]):
        * WebView.subproj/WebImageView.m:
        (-[WebImageView namesOfPromisedFilesDroppedAtDestination:]):

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

14 files changed:
WebKit/ChangeLog
WebKit/History.subproj/WebHistory.m
WebKit/Misc.subproj/WebFileDatabase.m
WebKit/Misc.subproj/WebKitNSStringExtras.m
WebKit/Misc.subproj/WebNSCalendarDateExtras.h [new file with mode: 0644]
WebKit/Misc.subproj/WebNSCalendarDateExtras.m [new file with mode: 0644]
WebKit/Misc.subproj/WebNSDataExtras.h
WebKit/Misc.subproj/WebNSDictionaryExtras.h
WebKit/Misc.subproj/WebNSFileManagerExtras.h [new file with mode: 0644]
WebKit/Misc.subproj/WebNSFileManagerExtras.m [new file with mode: 0644]
WebKit/Plugins.subproj/WebBaseNetscapePluginStream.m
WebKit/WebKit.pbproj/project.pbxproj
WebKit/WebView.subproj/WebHTMLView.m
WebKit/WebView.subproj/WebImageView.m

index ebbca9425f24b507ab7bc328ef3446fbcf073eb1..043d8a47e1c7b358ae6d3e04f7c2bdb882a3b086 100644 (file)
@@ -1,3 +1,45 @@
+2005-06-02  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Kevin.
+
+       - remove dependency on NSFileManager and NSCalendarDate private extras from WebFou
+       
+        * History.subproj/WebHistory.m:
+        (-[WebHistoryPrivate findIndex:forDay:]):
+        (-[WebHistoryPrivate arrayRepresentation]):
+        (-[WebHistoryPrivate _loadHistoryGuts:URL:error:]):
+        * Misc.subproj/WebFileDatabase.m:
+        (-[WebFileDatabase _truncateToSizeLimit:]):
+        (-[WebFileDatabase removeAllObjects]):
+        (-[WebFileDatabase performSetObject:forKey:]):
+        (-[WebFileDatabase performRemoveObjectForKey:]):
+        (-[WebFileDatabase open]):
+        * Misc.subproj/WebKitNSStringExtras.m:
+        (-[NSString _webkit_fixedCarbonPOSIXPath]):
+        * Misc.subproj/WebNSCalendarDateExtras.h: Added.
+        * Misc.subproj/WebNSCalendarDateExtras.m: Added.
+        (-[NSCalendarDate _webkit_compareDay:]):
+        * Misc.subproj/WebNSDataExtras.h:
+        * Misc.subproj/WebNSDictionaryExtras.h:
+        * Misc.subproj/WebNSFileManagerExtras.h: Added.
+        * Misc.subproj/WebNSFileManagerExtras.m: Added.
+        (-[NSFileManager _webkit_fileExistsAtPath:isDirectory:traverseLink:]):
+        (-[NSFileManager _webkit_createIntermediateDirectoriesForPath:attributes:]):
+        (-[NSFileManager _webkit_createDirectoryAtPathWithIntermediateDirectories:attributes:]):
+        (-[NSFileManager _webkit_createFileAtPathWithIntermediateDirectories:contents:attributes:directoryAttributes:]):
+        (-[NSFileManager _webkit_removeFileOnlyAtPath:]):
+        (-[NSFileManager _webkit_backgroundRemoveFileAtPath:]):
+        (-[NSFileManager _webkit_backgroundRemoveLeftoverFiles:]):
+        (-[NSFileManager _webkit_carbonPathForPath:]):
+        (-[NSFileManager _webkit_startupVolumeName]):
+        (-[NSFileManager _webkit_pathWithUniqueFilenameForPath:]):
+        * Plugins.subproj/WebBaseNetscapePluginStream.m:
+        * WebKit.pbproj/project.pbxproj:
+        * WebView.subproj/WebHTMLView.m:
+        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]):
+        * WebView.subproj/WebImageView.m:
+        (-[WebImageView namesOfPromisedFilesDroppedAtDestination:]):
+
 2005-06-02  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Adele.
index 28566e5bcb38a95ca74500a7cf1a80ccc306af88..1973b05e2b4b02689fbea4e2a350b655d2d370e0 100644 (file)
 #import <WebKit/WebHistoryItem.h>
 #import <WebKit/WebHistoryItemPrivate.h>
 #import <WebKit/WebKitLogging.h>
+#import <WebKit/WebNSCalendarDateExtras.h>
 #import <WebKit/WebNSURLExtras.h>
 #import <Foundation/NSError.h>
 #import <WebKit/WebAssertions.h>
 #import <WebCore/WebCoreHistory.h>
 
-#import <Foundation/NSCalendarDate_NSURLExtras.h>
-
 
 NSString *WebHistoryItemsAddedNotification = @"WebHistoryItemsAddedNotification";
 NSString *WebHistoryItemsRemovedNotification = @"WebHistoryItemsRemovedNotification";
@@ -84,7 +83,7 @@ NSString *DatesArrayKey = @"WebHistoryDates";
     //FIXME: just does linear search through days; inefficient if many days
     count = [_datesWithEntries count];
     for (*index = 0; *index < count; ++*index) {
-        NSComparisonResult result = [date _web_compareDay: [_datesWithEntries objectAtIndex: *index]];
+        NSComparisonResult result = [date _webkit_compareDay: [_datesWithEntries objectAtIndex: *index]];
         if (result == NSOrderedSame) {
             return YES;
         }
@@ -346,7 +345,7 @@ NSString *DatesArrayKey = @"WebHistoryDates";
         NSArray *entries;
 
         // skip remaining days if they are older than the age limit
-        if ([[_datesWithEntries objectAtIndex:dateIndex] _web_compareDay:ageLimitDate] != NSOrderedDescending) {
+        if ([[_datesWithEntries objectAtIndex:dateIndex] _webkit_compareDay:ageLimitDate] != NSOrderedDescending) {
             break;
         }
 
@@ -430,7 +429,7 @@ NSString *DatesArrayKey = @"WebHistoryDates";
 
         // test against date limit
         if (!ageLimitPassed) {
-            if ([[entry _lastVisitedDate] _web_compareDay:ageLimitDate] != NSOrderedDescending) {
+            if ([[entry _lastVisitedDate] _webkit_compareDay:ageLimitDate] != NSOrderedDescending) {
                 continue;
             } else {
                 ageLimitPassed = YES;
index 9288563838d9ac64ae12eebd78b221b3c26c30d9..c91ac63476cc2695a4390f03ef6d38c0357fc277 100644 (file)
@@ -6,8 +6,7 @@
 #import <WebKit/WebFileDatabase.h>
 #import <WebKit/WebKitLogging.h>
 #import <WebKit/WebLRUFileList.h>
-
-#import <Foundation/NSFileManager_NSURLExtras.h>
+#import <WebKit/WebNSFileManagerExtras.h>
 
 #import <fcntl.h>
 #import <fts.h>
@@ -235,7 +234,7 @@ static void UniqueFilePathForKey(id key, char *buffer)
                 break;
             }
             NSString *filePath = [[NSString alloc] initWithFormat:@"%@/%s", path, uniqueKey];
-            [defaultManager _web_removeFileOnlyAtPath:filePath];
+            [defaultManager _webkit_removeFileOnlyAtPath:filePath];
             [filePath release];
             WebLRUFileListRemoveOldestFileFromList(lru);
         }
@@ -379,7 +378,7 @@ static void databaseInit()
     [removeCache removeAllObjects];
     [ops removeAllObjects];
     [self close];
-    [[NSFileManager defaultManager] _web_backgroundRemoveFileAtPath:path];
+    [[NSFileManager defaultManager] _webkit_backgroundRemoveFileAtPath:path];
     [self open];
     [mutex unlock];
 
@@ -493,7 +492,7 @@ static void databaseInit()
     WebLRUFileListSetFileData(lru, uniqueKey, [data length], CFAbsoluteTimeGetCurrent());
     [self _truncateToSizeLimit:[self sizeLimit]];
 
-    result = [defaultManager _web_createFileAtPathWithIntermediateDirectories:filePath contents:data attributes:attributes directoryAttributes:directoryAttributes];
+    result = [defaultManager _webkit_createFileAtPathWithIntermediateDirectories:filePath contents:data attributes:attributes directoryAttributes:directoryAttributes];
 
     if (!result) {
         WebLRUFileListRemoveFileWithPath(lru, uniqueKey);
@@ -514,7 +513,7 @@ static void databaseInit()
 
     UniqueFilePathForKey(key, uniqueKey);
     filePath = [[NSString alloc] initWithFormat:@"%@/%s", path, uniqueKey];
-    [[NSFileManager defaultManager] _web_removeFileOnlyAtPath:filePath];
+    [[NSFileManager defaultManager] _webkit_removeFileOnlyAtPath:filePath];
     WebLRUFileListRemoveFileWithPath(lru, uniqueKey);
     [filePath release];
 }
@@ -543,11 +542,11 @@ static void databaseInit()
                 NULL
             ];
             
-           isOpen = [manager _web_createDirectoryAtPathWithIntermediateDirectories:path attributes:attributes];
+           isOpen = [manager _webkit_createDirectoryAtPathWithIntermediateDirectories:path attributes:attributes];
        }
 
         // remove any leftover turds
-        [manager _web_backgroundRemoveLeftoverFiles:path];
+        [manager _webkit_backgroundRemoveLeftoverFiles:path];
         
         if (isOpen) {
             [NSThread detachNewThreadSelector:@selector(_createLRUList:) toTarget:self withObject:nil];
index a0fde733b00d963df6619129de5f38b8c6a55495..94859b2e4e1be68ba8800a619eff3367f26da5de 100644 (file)
@@ -8,7 +8,7 @@
 #import <WebKit/WebNSObjectExtras.h>
 #import <WebKit/WebTextRenderer.h>
 #import <WebKit/WebTextRendererFactory.h>
-#import <Foundation/NSFileManager_NSURLExtras.h>
+#import <WebKit/WebNSFileManagerExtras.h>
 
 #import <unicode/uchar.h>
 
@@ -298,7 +298,7 @@ static BOOL canUseFastRenderer(const UniChar *buffer, unsigned length)
         return self;
     }
 
-    if ([[fileManager _web_startupVolumeName] isEqualToString:volumeName]) {
+    if ([[fileManager _webkit_startupVolumeName] isEqualToString:volumeName]) {
         // Startup volume name is included in path, remove it.
         [pathComponents removeObjectAtIndex:1];
     } else if ([[fileManager directoryContentsAtPath:@"/Volumes"] containsObject:volumeName]) {
diff --git a/WebKit/Misc.subproj/WebNSCalendarDateExtras.h b/WebKit/Misc.subproj/WebNSCalendarDateExtras.h
new file mode 100644 (file)
index 0000000..23f18ee
--- /dev/null
@@ -0,0 +1,11 @@
+/*
+    WebNSCalendarDateExtras.h
+    Private (SPI) header
+    Copyright 2003, Apple, Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+@interface NSCalendarDate (WebNSCalendarDateExtras)
+- (NSComparisonResult)_webkit_compareDay: (NSCalendarDate *)anotherDate;
+@end
diff --git a/WebKit/Misc.subproj/WebNSCalendarDateExtras.m b/WebKit/Misc.subproj/WebNSCalendarDateExtras.m
new file mode 100644 (file)
index 0000000..c8ad8f7
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+    WebNSCalendarDateExtras.m
+    Private (SPI) header
+    Copyright 2005, Apple, Inc. All rights reserved.
+ */
+
+#import <WebKit/WebNSCalendarDateExtras.h>
+
+#import <WebKit/WebAssertions.h>
+
+@implementation NSCalendarDate (WebNSCalendarDateExtras)
+
+- (NSComparisonResult) _webkit_compareDay: (NSCalendarDate *)anotherDate
+{
+    int year, yearOther, month, monthOther, day, dayOther;
+    
+    if (self == anotherDate) {
+        return NSOrderedSame;
+    }
+
+    year = [self yearOfCommonEra];
+    yearOther = [anotherDate yearOfCommonEra];
+    if (year < yearOther) {
+        return NSOrderedAscending;
+    }
+    if (year > yearOther) {
+        return NSOrderedDescending;
+    }
+
+    month = [self monthOfYear];
+    monthOther = [anotherDate monthOfYear];
+    if (month < monthOther) {
+        return NSOrderedAscending;
+    }
+    if (month > monthOther) {
+        return NSOrderedDescending;
+    }
+
+    day = [self dayOfMonth];
+    dayOther = [anotherDate dayOfMonth];
+    if (day < dayOther) {
+        return NSOrderedAscending;
+    }
+    if (day > dayOther) {
+        return NSOrderedDescending;
+    }
+
+    return NSOrderedSame;
+}
+
+@end
+
index 776372304a65a4bee2343528e92579b9e00aee75..0dce1488d90e0c80ff591d7a288c39eca83acc58 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    WebNSURLExtras.h
+    WebNSDataExtras.h
     Private (SPI) header
     Copyright 2003, Apple, Inc. All rights reserved.
  */
@@ -8,7 +8,7 @@
 
 #define WEB_GUESS_MIME_TYPE_PEEK_LENGTH 1024
 
-@interface NSData (WebNSURLExtras)
+@interface NSData (WebNSDateExtras)
 
 -(BOOL)_web_isCaseInsensitiveEqualToCString:(const char *)string;
 -(NSMutableDictionary *)_webkit_parseRFC822HeaderFields;
index 24ce137b6ad168042fec86c801f65229f131c345..2baf2e667e3fbdd203dfd41d7923fbf9c81c1832 100644 (file)
@@ -1,7 +1,7 @@
 /*
-    WebNSURLExtras.h
+    WebNSDictionaryExtras.h
     Private (SPI) header
-    Copyright 2003, Apple, Inc. All rights reserved.
+    Copyright 2005, Apple, Inc. All rights reserved.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/WebKit/Misc.subproj/WebNSFileManagerExtras.h b/WebKit/Misc.subproj/WebNSFileManagerExtras.h
new file mode 100644 (file)
index 0000000..af2643a
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+    WebNSFileManagerExtras.h
+    Private (SPI) header
+    Copyright 2005, Apple, Inc. All rights reserved.
+ */
+
+#import <Foundation/Foundation.h>
+
+#define WEB_UREAD     (00400)   /* Read by owner */
+#define WEB_UWRITE    (00200)   /* Write by owner */
+#define WEB_UEXEC     (00100)   /* Execute/Search by owner */
+
+@interface NSFileManager (WebNSFileManagerExtras)
+
+- (BOOL)_webkit_createDirectoryAtPathWithIntermediateDirectories:(NSString *)path attributes:(NSDictionary *)attributes;
+- (BOOL)_webkit_createFileAtPathWithIntermediateDirectories:(NSString *)path contents:(NSData *)contents attributes:(NSDictionary *)attributes directoryAttributes:(NSDictionary *)directoryAttributes;
+- (void)_webkit_backgroundRemoveFileAtPath:(NSString *)path;
+- (void)_webkit_backgroundRemoveLeftoverFiles:(NSString *)path;
+- (BOOL)_webkit_removeFileOnlyAtPath:(NSString *)path;
+- (NSString *)_webkit_startupVolumeName;
+- (NSString *)_webkit_pathWithUniqueFilenameForPath:(NSString *)path;
+
+@end
+
diff --git a/WebKit/Misc.subproj/WebNSFileManagerExtras.m b/WebKit/Misc.subproj/WebNSFileManagerExtras.m
new file mode 100644 (file)
index 0000000..9ffe8e1
--- /dev/null
@@ -0,0 +1,316 @@
+/*
+    WebNSFileManagerExtras.m
+    Private (SPI) header
+    Copyright 2003, Apple, Inc. All rights reserved.
+ */
+
+#import <WebKit/WebNSFileManagerExtras.h>
+
+#import <WebKit/WebAssertions.h>
+#import <WebKit/WebKitNSStringExtras.h>
+
+#import <sys/mount.h>
+
+@implementation NSFileManager (WebNSFileManagerExtras)
+
+- (BOOL)_webkit_fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory traverseLink:(BOOL)flag
+{
+    BOOL result;
+    NSDictionary *attributes;
+
+    result = NO;
+    if (isDirectory) {
+        *isDirectory = NO;
+    }
+
+    attributes = [self fileAttributesAtPath:path traverseLink:flag];
+
+    if (attributes) {
+        result = YES;
+        if ([[attributes objectForKey:NSFileType] isEqualToString:NSFileTypeDirectory]) {
+            if (isDirectory) {
+                *isDirectory = YES;
+            }
+        }
+    }
+
+    return result;
+}
+
+- (BOOL)_webkit_createIntermediateDirectoriesForPath:(NSString *)path attributes:(NSDictionary *)attributes
+{
+    BOOL result;
+    NSArray *pathComponents;
+    BOOL isDir;
+    unsigned count;
+    unsigned i;
+    NSString *checkPath;
+    NSMutableString *subpath;
+            
+    if (!path || [path length] == 0 || ![path isAbsolutePath]) {
+        return NO;
+    }
+
+    result = NO;  
+
+    // check to see if the path to the file already exists        
+    if ([self _webkit_fileExistsAtPath:[path stringByDeletingLastPathComponent] isDirectory:&isDir traverseLink:YES]) {
+        if (isDir) {
+            result = YES;
+        }
+        else {
+            result = NO;
+        }
+    }
+    else {
+        // create the path to the file
+        result = YES;  
+
+        // assume that most of the path exists, look backwards until we find an existing subpath
+        checkPath = path;
+        while (![checkPath isEqualToString:@"/"]) {
+            checkPath = [checkPath stringByDeletingLastPathComponent];
+            if ([self _webkit_fileExistsAtPath:checkPath isDirectory:&isDir traverseLink:YES]) {
+                if (isDir) {
+                    break;
+                }
+                else {
+                    // found a leaf node, can't continue
+                    result = NO;
+                    break;
+                }
+            }
+        }
+
+        if (result) {
+            // now build up the path to the point where we found existing paths
+            subpath = [[NSMutableString alloc] initWithCapacity:[path length]];
+            pathComponents = [path componentsSeparatedByString:@"/"];    
+            count = [pathComponents count];
+            i = 0;
+            while (i < count - 1 && ![subpath isEqualToString:checkPath]) {
+                if (i > 0) {
+                    [subpath appendString:@"/"];
+                }
+                [subpath appendString:[pathComponents objectAtIndex:i]];  
+                i++;  
+            }
+            
+            // now create the parts of the path that did not yet exist
+            while (i < count - 1) {
+                if ([(NSString *)[pathComponents objectAtIndex:i] length] == 0) {
+                    continue;
+                }
+                if (i > 0) {
+                    [subpath appendString:@"/"];
+                }
+                [subpath appendString:[pathComponents objectAtIndex:i]];
+                
+                // does this directory exist?
+                if ([self _webkit_fileExistsAtPath:subpath isDirectory:&isDir traverseLink:YES]) {
+                    if (!isDir) {
+                        // ran into a leaf node of some sort
+                        result = NO;
+                        break;
+                    }
+                }
+                else {
+                    // subpath does not exist - create it
+                    if (![self createDirectoryAtPath:subpath attributes:attributes]) {
+                        // failed to create subpath
+                        result = NO;
+                        break;
+                    }
+                }
+                i++; 
+            }
+            
+            [subpath release];
+        }
+        
+    }    
+                            
+    return result;
+}
+
+- (BOOL)_webkit_createDirectoryAtPathWithIntermediateDirectories:(NSString *)path attributes:(NSDictionary *)attributes
+{
+    // Be really optimistic - assume that in the common case, the directory exists.
+    BOOL isDirectory;
+    if ([self fileExistsAtPath:path isDirectory:&isDirectory] && isDirectory) {
+       return YES;
+    }
+
+    // Assume the next most common case is that the parent directory already exists
+    if ([self createDirectoryAtPath:path attributes:attributes]) {
+       return YES;
+    }
+
+    // Do it the hard way 
+    return [self _webkit_createIntermediateDirectoriesForPath:path attributes:attributes] && [self createDirectoryAtPath:path attributes:attributes];
+}
+
+- (BOOL)_webkit_createFileAtPathWithIntermediateDirectories:(NSString *)path contents:(NSData *)contents attributes:(NSDictionary *)attributes directoryAttributes:(NSDictionary *)directoryAttributes
+{
+    // Be optimistic - try just creating the file first, assuming intermediate directories exist. 
+    if ([self createFileAtPath:path contents:contents attributes:attributes]) {
+       return YES;
+    }
+
+    return ([self _webkit_createIntermediateDirectoriesForPath:path attributes:directoryAttributes] && [self createFileAtPath:path contents:contents attributes:attributes]);
+}
+
+- (BOOL)_webkit_removeFileOnlyAtPath:(NSString *)path
+{
+    struct statfs buf;
+    BOOL result = unlink([path fileSystemRepresentation]) == 0;
+
+    // For mysterious reasons, MNT_DOVOLFS is the flag for "supports resource fork"
+    if ((statfs([path fileSystemRepresentation], &buf) == 0) && !(buf.f_flags & MNT_DOVOLFS)) {
+       NSString *lastPathComponent = [path lastPathComponent];
+       if ([lastPathComponent length] != 0 && ![lastPathComponent isEqualToString:@"/"]) {
+           NSString *resourcePath = [[path stringByDeletingLastPathComponent] stringByAppendingString:[@"._" stringByAppendingString:lastPathComponent]];
+           if (unlink([resourcePath fileSystemRepresentation]) != 0) {
+               result = NO;
+           }
+       }
+    }
+
+    return result;
+}
+
+- (void)_webkit_backgroundRemoveFileAtPath:(NSString *)path
+{
+    NSFileManager *manager;
+    NSString *moveToSubpath;
+    NSString *moveToPath;
+    int i;
+    
+    manager = [NSFileManager defaultManager];
+    
+    i = 0;
+    moveToSubpath = [path stringByDeletingLastPathComponent];
+    do {
+        moveToPath = [NSString stringWithFormat:@"%@/.tmp%d", moveToSubpath, i];
+        i++;
+    } while ([manager fileExistsAtPath:moveToPath]);
+
+    if ([manager movePath:path toPath:moveToPath handler:nil]) {
+        [NSThread detachNewThreadSelector:@selector(_performRemoveFileAtPath:) toTarget:self withObject:moveToPath];
+    }
+
+}
+
+- (void)_webkit_backgroundRemoveLeftoverFiles:(NSString *)path
+{
+    NSFileManager *manager;
+    NSString *leftoverSubpath;
+    NSString *leftoverPath;
+    int i;
+    
+    manager = [NSFileManager defaultManager];
+    leftoverSubpath = [path stringByDeletingLastPathComponent];
+    
+    i = 0;
+    while (1) {
+        leftoverPath = [NSString stringWithFormat:@"%@/.tmp%d", leftoverSubpath, i];
+        if (![manager fileExistsAtPath:leftoverPath]) {
+            break;
+        }
+        [NSThread detachNewThreadSelector:@selector(_performRemoveFileAtPath:) toTarget:self withObject:leftoverPath];
+        i++;
+    }
+}
+
+- (NSString *)_webkit_carbonPathForPath:(NSString *)posixPath
+{
+    OSStatus error;
+    FSRef ref, rootRef, parentRef;
+    FSCatalogInfo info;
+    NSMutableArray *carbonPathPieces;
+    HFSUniStr255 nameString;
+
+    // Make an FSRef.
+    error = FSPathMakeRef((const UInt8 *)[posixPath fileSystemRepresentation], &ref, NULL);
+    if (error != noErr) {
+        return nil;
+    }
+
+    // Get volume refNum.
+    error = FSGetCatalogInfo(&ref, kFSCatInfoVolume, &info, NULL, NULL, NULL);
+    if (error != noErr) {
+        return nil;
+    }
+
+    // Get root directory FSRef.
+    error = FSGetVolumeInfo(info.volume, 0, NULL, kFSVolInfoNone, NULL, NULL, &rootRef);
+    if (error != noErr) {
+        return nil;
+    }
+
+    // Get the pieces of the path.
+    carbonPathPieces = [NSMutableArray array];
+    for (;;) {
+        error = FSGetCatalogInfo(&ref, kFSCatInfoNone, NULL, &nameString, NULL, &parentRef);
+        if (error != noErr) {
+            return nil;
+        }
+        [carbonPathPieces insertObject:[NSString stringWithCharacters:nameString.unicode length:nameString.length] atIndex:0];
+        if (FSCompareFSRefs(&ref, &rootRef) == noErr) {
+            break;
+        }
+        ref = parentRef;
+    }
+
+    // Volume names need trailing : character.
+    if ([carbonPathPieces count] == 1) {
+        [carbonPathPieces addObject:@""];
+    }
+
+    return [carbonPathPieces componentsJoinedByString:@":"];
+}
+
+- (NSString *)_webkit_startupVolumeName
+{
+    NSString *path = [self _webkit_carbonPathForPath:@"/"];
+    return [path substringToIndex:[path length]-1];
+}
+
+- (NSString *)_webkit_pathWithUniqueFilenameForPath:(NSString *)path
+{
+    // "Fix" the filename of the path.
+    NSString *filename = [[path lastPathComponent] _webkit_filenameByFixingIllegalCharacters];
+    path = [[path stringByDeletingLastPathComponent] stringByAppendingPathComponent:filename];
+
+    NSFileManager *fileManager = [NSFileManager defaultManager];
+    if ([fileManager fileExistsAtPath:path]) {
+        // Don't overwrite existing file by appending "-n", "-n.ext" or "-n.ext.ext" to the filename.
+        NSString *extensions = nil;
+        NSString *pathWithoutExtensions;
+        NSString *lastPathComponent = [path lastPathComponent];
+        NSRange periodRange = [lastPathComponent rangeOfString:@"."];
+        
+        if (periodRange.location == NSNotFound) {
+            pathWithoutExtensions = path;
+        } else {
+            extensions = [lastPathComponent substringFromIndex:periodRange.location + 1];
+            lastPathComponent = [lastPathComponent substringToIndex:periodRange.location];
+            pathWithoutExtensions = [[path stringByDeletingLastPathComponent] stringByAppendingPathComponent:lastPathComponent];
+        }
+
+        NSString *pathWithAppendedNumber;
+        unsigned i;
+
+        for (i = 1; 1; i++) {
+            pathWithAppendedNumber = [NSString stringWithFormat:@"%@-%d", pathWithoutExtensions, i];
+            path = [extensions length] ? [pathWithAppendedNumber stringByAppendingPathExtension:extensions] : pathWithAppendedNumber;
+            if (![fileManager fileExistsAtPath:path]) {
+                break;
+            }
+        }
+    }
+
+    return path;
+}
+
+@end
index 0791367de3709f4b3d3e54e044cdf12dfc92cc56..aa9f301ab4c3ce34d5a83d3790f12dd106c04a71 100644 (file)
@@ -14,7 +14,6 @@
 
 #import <Foundation/NSURLResponse.h>
 #import <Foundation/NSURLResponsePrivate.h>
-#import <Foundation/NSFileManager_NSURLExtras.h>
 
 static const char *CarbonPathFromPOSIXPath(const char *posixPath);
 
index dd818774dc88f5fa81ff4255ea89c6584ed4d154..5a49501f622bdae381a0e5126ba5e1db8438ce51 100644 (file)
 //254
                254DC334016E1D3F0ECA149E = {
                        children = (
-                               65488D9F084FBCCB00831AD0,
-                               65488DA0084FBCCB00831AD0,
                                3944607A020F50ED0ECA1767,
                                3944607B020F50ED0ECA1767,
                                F528E3E9031E91AD01CA2ACA,
                                BEE18F9A0472B73200CA289C,
                                9345DDB20365FFD0008635CE,
                                9345DDB30365FFD0008635CE,
+                               65EEDE51084FFB920002DB25,
+                               65EEDE52084FFB920002DB25,
                                BECD14290565830A005BB09C,
                                BECD142A0565830A005BB09C,
+                               65488D9F084FBCCB00831AD0,
+                               65488DA0084FBCCB00831AD0,
                                BE887BFF056D3A6E009BB3E7,
                                BE887C00056D3A6E009BB3E7,
+                               65EEDE55084FFC9E0002DB25,
+                               65EEDE56084FFC9E0002DB25,
                                8398847A03426FB000BC5F5E,
                                8398847B03426FB000BC5F5E,
                                93D1FE13067EB10B009CE68A,
                        refType = 4;
                        sourceTree = "<group>";
                };
+               65EEDE51084FFB920002DB25 = {
+                       fileEncoding = 30;
+                       isa = PBXFileReference;
+                       lastKnownFileType = sourcecode.c.h;
+                       path = WebNSCalendarDateExtras.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               65EEDE52084FFB920002DB25 = {
+                       fileEncoding = 30;
+                       isa = PBXFileReference;
+                       lastKnownFileType = sourcecode.c.objc;
+                       path = WebNSCalendarDateExtras.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               65EEDE53084FFB920002DB25 = {
+                       fileRef = 65EEDE51084FFB920002DB25;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               65EEDE54084FFB920002DB25 = {
+                       fileRef = 65EEDE52084FFB920002DB25;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               65EEDE55084FFC9E0002DB25 = {
+                       fileEncoding = 30;
+                       isa = PBXFileReference;
+                       lastKnownFileType = sourcecode.c.h;
+                       path = WebNSFileManagerExtras.h;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               65EEDE56084FFC9E0002DB25 = {
+                       fileEncoding = 30;
+                       isa = PBXFileReference;
+                       lastKnownFileType = sourcecode.c.objc;
+                       path = WebNSFileManagerExtras.m;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               65EEDE57084FFC9E0002DB25 = {
+                       fileRef = 65EEDE55084FFC9E0002DB25;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
+               65EEDE58084FFC9E0002DB25 = {
+                       fileRef = 65EEDE56084FFC9E0002DB25;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
 //650
 //651
 //652
                                939810B00824BF01008DF038,
                                939810B10824BF01008DF038,
                                65488DA1084FBCCB00831AD0,
+                               65EEDE53084FFB920002DB25,
+                               65EEDE57084FFC9E0002DB25,
                        );
                        isa = PBXHeadersBuildPhase;
                        runOnlyForDeploymentPostprocessing = 0;
                                939811250824BF01008DF038,
                                939811260824BF01008DF038,
                                65488DA2084FBCCB00831AD0,
+                               65EEDE54084FFB920002DB25,
+                               65EEDE58084FFC9E0002DB25,
                        );
                        isa = PBXSourcesBuildPhase;
                        runOnlyForDeploymentPostprocessing = 0;
index 930afbf38d621c5cf692bca7710edb929565e58b..97dc58e0a5a9cd6bbcee6e88576c9144274e5024 100644 (file)
@@ -27,6 +27,7 @@
 #import <WebKit/WebKitNSStringExtras.h>
 #import <WebKit/WebNetscapePluginEmbeddedView.h>
 #import <WebKit/WebNSEventExtras.h>
+#import <WebKit/WebNSFileManagerExtras.h>
 #import <WebKit/WebNSImageExtras.h>
 #import <WebKit/WebNSObjectExtras.h>
 #import <WebKit/WebNSPasteboardExtras.h>
@@ -48,7 +49,6 @@
 #import <AppKit/NSGraphicsContextPrivate.h>
 #import <AppKit/NSResponder_Private.h>
 
-#import <Foundation/NSFileManager_NSURLExtras.h>
 #import <Foundation/NSURLFileTypeMappings.h>
 
 #import <CoreGraphics/CGContextGState.h>
@@ -2761,7 +2761,7 @@ static WebHTMLView *lastHitView = nil;
     
     // FIXME: Report an error if we fail to create a file.
     NSString *path = [[dropDestination path] stringByAppendingPathComponent:[wrapper preferredFilename]];
-    path = [[NSFileManager defaultManager] _web_pathWithUniqueFilenameForPath:path];
+    path = [[NSFileManager defaultManager] _webkit_pathWithUniqueFilenameForPath:path];
     if (![wrapper writeToFile:path atomically:NO updateFilenames:YES]) {
         ERROR("Failed to create image file via -[NSFileWrapper writeToFile:atomically:updateFilenames:]");
     }
index ff97c7f7f1fe8b6e859db5a35eb4f5f56c8a4da7..640c3731af1e8d56fd4d21d54edbcbd477beeb5e 100644 (file)
@@ -12,6 +12,7 @@
 #import <WebKit/WebImageRenderer.h>
 #import <WebKit/WebImageRendererFactory.h>
 #import <WebKit/WebImageRepresentation.h>
+#import <WebKit/WebNSFileManagerExtras.h>
 #import <WebKit/WebNSObjectExtras.h>
 #import <WebKit/WebNSPasteboardExtras.h>
 #import <WebKit/WebNSViewExtras.h>
@@ -20,8 +21,6 @@
 
 #import <WebCore/WebCoreImageRenderer.h>
 
-#import <Foundation/NSFileManager_NSURLExtras.h>
-
 @implementation WebImageView
 
 + (void)initialize
 {
     // FIXME: Report an error if we fail to create a file.
     NSString *path = [[dropDestination path] stringByAppendingPathComponent:[rep filename]];
-    path = [[NSFileManager defaultManager] _web_pathWithUniqueFilenameForPath:path];
+    path = [[NSFileManager defaultManager] _webkit_pathWithUniqueFilenameForPath:path];
     [[rep data] writeToFile:path atomically:NO];
     return [NSArray arrayWithObject:[path lastPathComponent]];
 }