Skip to content

Commit 1c6aa4c

Browse files
authored
Merge pull request #2195 from millenomi/nsurl-resourcevalues
Parity: NSURL resource values.
2 parents 9c5cf55 + 7d82f93 commit 1c6aa4c

11 files changed

+1333
-54
lines changed

CoreFoundation/Base.subproj/ForSwiftFoundationOnly.h

+16
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,17 @@ struct _NSCalendarBridge {
292292
void (*_Nonnull setGregorianStartDate)(CFTypeRef obj, CFTypeRef _Nullable date);
293293
};
294294

295+
struct _NSURLBridge {
296+
Boolean (*_Nonnull copyResourcePropertyForKey)(CFTypeRef url, CFStringRef key, CFTypeRef _Nullable *_Nullable propertyValueTypeRefPtr, CFErrorRef *error);
297+
CFDictionaryRef _Nullable (*_Nonnull copyResourcePropertiesForKeys)(CFTypeRef url, CFArrayRef keys, CFErrorRef *error);
298+
Boolean (*_Nonnull setResourcePropertyForKey)(CFTypeRef url, CFStringRef key, CFTypeRef _Nullable propertyValue, CFErrorRef *error);
299+
Boolean (*_Nonnull setResourcePropertiesForKeys)(CFTypeRef url, CFDictionaryRef keyedPropertyValues, CFErrorRef *error);
300+
void (*_Nonnull clearResourcePropertyCacheForKey)(CFTypeRef url, CFStringRef key);
301+
void (*_Nonnull clearResourcePropertyCache)(CFTypeRef url);
302+
void (*_Nonnull setTemporaryResourceValueForKey)(CFTypeRef url, CFStringRef key, CFTypeRef propertyValue);
303+
Boolean (*_Nonnull resourceIsReachable)(CFTypeRef url, CFErrorRef *error);
304+
};
305+
295306
struct _CFSwiftBridge {
296307
struct _NSObjectBridge NSObject;
297308
struct _NSArrayBridge NSArray;
@@ -309,6 +320,7 @@ struct _CFSwiftBridge {
309320
struct _NSNumberBridge NSNumber;
310321
struct _NSDataBridge NSData;
311322
struct _NSCalendarBridge NSCalendar;
323+
struct _NSURLBridge NSURL;
312324
};
313325

314326
CF_EXPORT struct _CFSwiftBridge __CFSwiftBridge;
@@ -400,6 +412,10 @@ CF_CROSS_PLATFORM_EXPORT Boolean _CFBundleSupportsFHSBundles(void);
400412
CF_CROSS_PLATFORM_EXPORT Boolean _CFBundleSupportsFreestandingBundles(void);
401413
CF_CROSS_PLATFORM_EXPORT CFStringRef __CFTimeZoneCopyDataVersionString(void);
402414

415+
CF_CROSS_PLATFORM_EXPORT void *_Nullable _CFURLCopyResourceInfo(CFURLRef url);
416+
CF_CROSS_PLATFORM_EXPORT void *_CFURLCopyResourceInfoInitializingAtomicallyIfNeeded(CFURLRef url, CFTypeRef initialValue);
417+
CF_CROSS_PLATFORM_EXPORT void _CFURLSetResourceInfo(CFURLRef url, CFTypeRef resourceInfo);
418+
403419
// https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
404420
// Version 0.8
405421

CoreFoundation/URL.subproj/CFURL.c

+188
Original file line numberDiff line numberDiff line change
@@ -1629,7 +1629,11 @@ static void __CFURLDeallocate(CFTypeRef cf) {
16291629
if (sanitizedString) CFRelease(sanitizedString);
16301630
if ( url->_extra != NULL ) CFAllocatorDeallocate( alloc, url->_extra );
16311631
void *resourceInfo = _getResourceInfo(url);
1632+
#if DEPLOYMENT_RUNTIME_SWIFT
1633+
if (resourceInfo) _CFSwiftRelease(resourceInfo);
1634+
#else
16321635
if (resourceInfo) CFRelease(resourceInfo);
1636+
#endif
16331637
atomic_store(&((struct __CFURL *)url)->_resourceInfo, (void *)0xdeadbeef); // 20362546: catch anyone using URL after it was released
16341638
}
16351639

@@ -5233,3 +5237,187 @@ CFURLRef CFURLCreateFilePathURL(CFAllocatorRef alloc, CFURLRef url, CFErrorRef *
52335237

52345238
CFURLRef CFURLCreateFileReferenceURL(CFAllocatorRef alloc, CFURLRef url, CFErrorRef *error) { return NULL; }
52355239

5240+
#if DEPLOYMENT_RUNTIME_SWIFT
5241+
5242+
CONST_STRING_DECL(kCFURLKeysOfUnsetValuesKey, "NSURLKeysOfUnsetValuesKey");
5243+
5244+
CF_CROSS_PLATFORM_EXPORT void *_CFURLCopyResourceInfo(CFURLRef url) {
5245+
void *value = _getResourceInfo(url);
5246+
if (value) {
5247+
_CFSwiftRetain(value);
5248+
}
5249+
return value;
5250+
}
5251+
5252+
CF_CROSS_PLATFORM_EXPORT void *_CFURLCopyResourceInfoInitializingAtomicallyIfNeeded(CFURLRef url, CFTypeRef initialValue) {
5253+
_CFSwiftRetain((CFSwiftRef)initialValue);
5254+
void *expected = NULL;
5255+
if (!atomic_compare_exchange_strong(&((struct __CFURL *)url)->_resourceInfo, &expected, (void *)initialValue)) {
5256+
_CFSwiftRelease((CFSwiftRef)initialValue);
5257+
// 'expected' contains the actual value of _resourceInfo.
5258+
_CFSwiftRetain(expected);
5259+
return expected;
5260+
} else {
5261+
_CFSwiftRetain((CFSwiftRef)initialValue); // To satisfy the copy semantics of the function.
5262+
return (CFSwiftRef)initialValue;
5263+
}
5264+
}
5265+
5266+
CF_CROSS_PLATFORM_EXPORT void _CFURLSetResourceInfo(CFURLRef url, CFTypeRef resourceInfo) {
5267+
_CFSwiftRetain((CFSwiftRef)resourceInfo);
5268+
CFSwiftRef previousValue = (CFSwiftRef)atomic_exchange(&(((struct __CFURL *)url)->_resourceInfo), (CFSwiftRef)resourceInfo);
5269+
if (previousValue && previousValue != (CFSwiftRef)resourceInfo) {
5270+
_CFSwiftRelease(previousValue);
5271+
}
5272+
}
5273+
5274+
// The base implementation of these functions exclusively exists in Swift only.
5275+
5276+
Boolean CFURLCopyResourcePropertyForKey(CFURLRef url, CFStringRef key, void *propertyValueTypeRefPtr, CFErrorRef *error) {
5277+
return __CFSwiftBridge.NSURL.copyResourcePropertyForKey(url, key, propertyValueTypeRefPtr, error);
5278+
}
5279+
5280+
CFDictionaryRef CFURLCopyResourcePropertiesForKeys(CFURLRef url, CFArrayRef keys, CFErrorRef *error) {
5281+
return __CFSwiftBridge.NSURL.copyResourcePropertiesForKeys(url, keys, error);
5282+
}
5283+
5284+
Boolean CFURLSetResourcePropertyForKey(CFURLRef url, CFStringRef key, CFTypeRef propertyValue, CFErrorRef *error) {
5285+
return __CFSwiftBridge.NSURL.setResourcePropertyForKey(url, key, propertyValue, error);
5286+
}
5287+
5288+
Boolean CFURLSetResourcePropertiesForKeys(CFURLRef url, CFDictionaryRef keyedPropertyValues, CFErrorRef *error) {
5289+
return __CFSwiftBridge.NSURL.setResourcePropertiesForKeys(url, keyedPropertyValues, error);
5290+
}
5291+
5292+
void CFURLClearResourcePropertyCacheForKey(CFURLRef url, CFStringRef key) {
5293+
__CFSwiftBridge.NSURL.clearResourcePropertyCacheForKey(url, key);
5294+
}
5295+
5296+
void CFURLClearResourcePropertyCache(CFURLRef url) {
5297+
__CFSwiftBridge.NSURL.clearResourcePropertyCache(url);
5298+
}
5299+
5300+
void CFURLSetTemporaryResourcePropertyForKey(CFURLRef url, CFStringRef key, CFTypeRef propertyValue) {
5301+
__CFSwiftBridge.NSURL.setTemporaryResourceValueForKey(url, key, propertyValue);
5302+
}
5303+
5304+
CONST_STRING_DECL(kCFURLNameKey, "NSURLNameKey");
5305+
CONST_STRING_DECL(kCFURLLocalizedNameKey, "NSURLLocalizedNameKey");
5306+
CONST_STRING_DECL(kCFURLIsRegularFileKey, "NSURLIsRegularFileKey");
5307+
CONST_STRING_DECL(kCFURLIsDirectoryKey, "NSURLIsDirectoryKey");
5308+
CONST_STRING_DECL(kCFURLIsSymbolicLinkKey, "NSURLIsSymbolicLinkKey");
5309+
CONST_STRING_DECL(kCFURLIsVolumeKey, "NSURLIsVolumeKey");
5310+
CONST_STRING_DECL(kCFURLIsPackageKey, "NSURLIsPackageKey");
5311+
CONST_STRING_DECL(kCFURLIsApplicationKey, "NSURLIsApplicationKey");
5312+
CONST_STRING_DECL(kCFURLApplicationIsScriptableKey, "NSURLApplicationIsScriptableKey");
5313+
CONST_STRING_DECL(kCFURLIsSystemImmutableKey, "NSURLIsSystemImmutableKey");
5314+
CONST_STRING_DECL(kCFURLIsUserImmutableKey, "NSURLIsUserImmutableKey");
5315+
CONST_STRING_DECL(kCFURLIsHiddenKey, "NSURLIsHiddenKey");
5316+
CONST_STRING_DECL(kCFURLHasHiddenExtensionKey, "NSURLHasHiddenExtensionKey");
5317+
CONST_STRING_DECL(kCFURLCreationDateKey, "NSURLCreationDateKey");
5318+
CONST_STRING_DECL(kCFURLContentAccessDateKey, "NSURLContentAccessDateKey");
5319+
CONST_STRING_DECL(kCFURLContentModificationDateKey, "NSURLContentModificationDateKey");
5320+
CONST_STRING_DECL(kCFURLAttributeModificationDateKey, "NSURLAttributeModificationDateKey");
5321+
CONST_STRING_DECL(kCFURLLinkCountKey, "NSURLLinkCountKey");
5322+
CONST_STRING_DECL(kCFURLParentDirectoryURLKey, "NSURLParentDirectoryURLKey");
5323+
CONST_STRING_DECL(kCFURLVolumeURLKey, "NSURLVolumeURLKey");
5324+
CONST_STRING_DECL(kCFURLTypeIdentifierKey, "NSURLTypeIdentifierKey");
5325+
CONST_STRING_DECL(kCFURLLocalizedTypeDescriptionKey, "NSURLLocalizedTypeDescriptionKey");
5326+
CONST_STRING_DECL(kCFURLLabelNumberKey, "NSURLLabelNumberKey");
5327+
CONST_STRING_DECL(kCFURLLabelColorKey, "NSURLLabelColorKey");
5328+
CONST_STRING_DECL(kCFURLLocalizedLabelKey, "NSURLLocalizedLabelKey");
5329+
CONST_STRING_DECL(kCFURLEffectiveIconKey, "NSURLEffectiveIconKey");
5330+
CONST_STRING_DECL(kCFURLCustomIconKey, "NSURLCustomIconKey");
5331+
CONST_STRING_DECL(kCFURLFileResourceIdentifierKey, "NSURLFileResourceIdentifierKey");
5332+
CONST_STRING_DECL(kCFURLVolumeIdentifierKey, "NSURLVolumeIdentifierKey");
5333+
CONST_STRING_DECL(kCFURLPreferredIOBlockSizeKey, "NSURLPreferredIOBlockSizeKey");
5334+
CONST_STRING_DECL(kCFURLIsReadableKey, "NSURLIsReadableKey");
5335+
CONST_STRING_DECL(kCFURLIsWritableKey, "NSURLIsWritableKey");
5336+
CONST_STRING_DECL(kCFURLIsExecutableKey, "NSURLIsExecutableKey");
5337+
CONST_STRING_DECL(kCFURLFileSecurityKey, "NSURLFileSecurityKey");
5338+
CONST_STRING_DECL(kCFURLIsExcludedFromBackupKey, "NSURLIsExcludedFromBackupKey");
5339+
CONST_STRING_DECL(kCFURLTagNamesKey, "NSURLTagNamesKey");
5340+
CONST_STRING_DECL(kCFURLPathKey, "NSURLPathKey");
5341+
CONST_STRING_DECL(kCFURLCanonicalPathKey, "NSURLCanonicalPathKey");
5342+
CONST_STRING_DECL(kCFURLIsMountTriggerKey, "NSURLIsMountTriggerKey");
5343+
CONST_STRING_DECL(kCFURLGenerationIdentifierKey, "NSURLGenerationIdentifierKey");
5344+
CONST_STRING_DECL(kCFURLDocumentIdentifierKey, "NSURLDocumentIdentifierKey");
5345+
CONST_STRING_DECL(kCFURLAddedToDirectoryDateKey, "NSURLAddedToDirectoryDateKey");
5346+
CONST_STRING_DECL(kCFURLQuarantinePropertiesKey, "NSURLQuarantinePropertiesKey");
5347+
CONST_STRING_DECL(kCFURLFileResourceTypeKey, "NSURLFileResourceTypeKey");
5348+
CONST_STRING_DECL(kCFURLFileResourceTypeNamedPipe, "NSURLFileResourceTypeNamedPipe");
5349+
CONST_STRING_DECL(kCFURLFileResourceTypeCharacterSpecial, "NSURLFileResourceTypeCharacterSpecial");
5350+
CONST_STRING_DECL(kCFURLFileResourceTypeDirectory, "NSURLFileResourceTypeDirectory");
5351+
CONST_STRING_DECL(kCFURLFileResourceTypeBlockSpecial, "NSURLFileResourceTypeBlockSpecial");
5352+
CONST_STRING_DECL(kCFURLFileResourceTypeRegular, "NSURLFileResourceTypeRegular");
5353+
CONST_STRING_DECL(kCFURLFileResourceTypeSymbolicLink, "NSURLFileResourceTypeSymbolicLink");
5354+
CONST_STRING_DECL(kCFURLFileResourceTypeSocket, "NSURLFileResourceTypeSocket");
5355+
CONST_STRING_DECL(kCFURLFileResourceTypeUnknown, "NSURLFileResourceTypeUnknown");
5356+
CONST_STRING_DECL(kCFURLFileSizeKey, "NSURLFileSizeKey");
5357+
CONST_STRING_DECL(kCFURLFileAllocatedSizeKey, "NSURLFileAllocatedSizeKey");
5358+
CONST_STRING_DECL(kCFURLTotalFileSizeKey, "NSURLTotalFileSizeKey");
5359+
CONST_STRING_DECL(kCFURLTotalFileAllocatedSizeKey, "NSURLTotalFileAllocatedSizeKey");
5360+
CONST_STRING_DECL(kCFURLIsAliasFileKey, "NSURLIsAliasFileKey");
5361+
CONST_STRING_DECL(kCFURLFileProtectionKey, "NSURLFileProtectionKey");
5362+
CONST_STRING_DECL(kCFURLFileProtectionNone, "NSURLFileProtectionNone");
5363+
CONST_STRING_DECL(kCFURLFileProtectionComplete, "NSURLFileProtectionComplete");
5364+
CONST_STRING_DECL(kCFURLFileProtectionCompleteUnlessOpen, "NSURLFileProtectionCompleteUnlessOpen");
5365+
CONST_STRING_DECL(kCFURLFileProtectionCompleteUntilFirstUserAuthentication, "NSURLFileProtectionCompleteUntilFirstUserAuthentication");
5366+
CONST_STRING_DECL(kCFURLVolumeLocalizedFormatDescriptionKey, "NSURLVolumeLocalizedFormatDescriptionKey");
5367+
CONST_STRING_DECL(kCFURLVolumeTotalCapacityKey, "NSURLVolumeTotalCapacityKey");
5368+
CONST_STRING_DECL(kCFURLVolumeAvailableCapacityKey, "NSURLVolumeAvailableCapacityKey");
5369+
CONST_STRING_DECL(kCFURLVolumeAvailableCapacityForImportantUsageKey, "NSURLVolumeAvailableCapacityForImportantUsageKey");
5370+
CONST_STRING_DECL(kCFURLVolumeAvailableCapacityForOpportunisticUsageKey, "NSURLVolumeAvailableCapacityForOpportunisticUsageKey");
5371+
CONST_STRING_DECL(kCFURLVolumeResourceCountKey, "NSURLVolumeResourceCountKey");
5372+
CONST_STRING_DECL(kCFURLVolumeSupportsPersistentIDsKey, "NSURLVolumeSupportsPersistentIDsKey");
5373+
CONST_STRING_DECL(kCFURLVolumeSupportsSymbolicLinksKey, "NSURLVolumeSupportsSymbolicLinksKey");
5374+
CONST_STRING_DECL(kCFURLVolumeSupportsHardLinksKey, "NSURLVolumeSupportsHardLinksKey");
5375+
CONST_STRING_DECL(kCFURLVolumeSupportsJournalingKey, "NSURLVolumeSupportsJournalingKey");
5376+
CONST_STRING_DECL(kCFURLVolumeIsJournalingKey, "NSURLVolumeIsJournalingKey");
5377+
CONST_STRING_DECL(kCFURLVolumeSupportsSparseFilesKey, "NSURLVolumeSupportsSparseFilesKey");
5378+
CONST_STRING_DECL(kCFURLVolumeSupportsZeroRunsKey, "NSURLVolumeSupportsZeroRunsKey");
5379+
CONST_STRING_DECL(kCFURLVolumeSupportsCaseSensitiveNamesKey, "NSURLVolumeSupportsCaseSensitiveNamesKey");
5380+
CONST_STRING_DECL(kCFURLVolumeSupportsCasePreservedNamesKey, "NSURLVolumeSupportsCasePreservedNamesKey");
5381+
CONST_STRING_DECL(kCFURLVolumeSupportsRootDirectoryDatesKey, "NSURLVolumeSupportsRootDirectoryDatesKey");
5382+
CONST_STRING_DECL(kCFURLVolumeSupportsVolumeSizesKey, "NSURLVolumeSupportsVolumeSizesKey");
5383+
CONST_STRING_DECL(kCFURLVolumeSupportsRenamingKey, "NSURLVolumeSupportsRenamingKey");
5384+
CONST_STRING_DECL(kCFURLVolumeSupportsAdvisoryFileLockingKey, "NSURLVolumeSupportsAdvisoryFileLockingKey");
5385+
CONST_STRING_DECL(kCFURLVolumeSupportsExtendedSecurityKey, "NSURLVolumeSupportsExtendedSecurityKey");
5386+
CONST_STRING_DECL(kCFURLVolumeIsBrowsableKey, "NSURLVolumeIsBrowsableKey");
5387+
CONST_STRING_DECL(kCFURLVolumeMaximumFileSizeKey, "NSURLVolumeMaximumFileSizeKey");
5388+
CONST_STRING_DECL(kCFURLVolumeIsEjectableKey, "NSURLVolumeIsEjectableKey");
5389+
CONST_STRING_DECL(kCFURLVolumeIsRemovableKey, "NSURLVolumeIsRemovableKey");
5390+
CONST_STRING_DECL(kCFURLVolumeIsInternalKey, "NSURLVolumeIsInternalKey");
5391+
CONST_STRING_DECL(kCFURLVolumeIsAutomountedKey, "NSURLVolumeIsAutomountedKey");
5392+
CONST_STRING_DECL(kCFURLVolumeSupportsBrowsingKey, "NSURLVolumeSupportsBrowsingKey");
5393+
CONST_STRING_DECL(kCFURLVolumeIsLocalKey, "NSURLVolumeIsLocalKey");
5394+
CONST_STRING_DECL(kCFURLVolumeIsReadOnlyKey, "NSURLVolumeIsReadOnlyKey");
5395+
CONST_STRING_DECL(kCFURLVolumeCreationDateKey, "NSURLVolumeCreationDateKey");
5396+
CONST_STRING_DECL(kCFURLVolumeURLForRemountingKey, "NSURLVolumeURLForRemountingKey");
5397+
CONST_STRING_DECL(kCFURLVolumeUUIDStringKey, "NSURLVolumeUUIDStringKey");
5398+
CONST_STRING_DECL(kCFURLVolumeNameKey, "NSURLVolumeNameKey");
5399+
CONST_STRING_DECL(kCFURLVolumeLocalizedNameKey, "NSURLVolumeLocalizedNameKey");
5400+
CONST_STRING_DECL(kCFURLVolumeIsEncryptedKey, "NSURLVolumeIsEncryptedKey");
5401+
CONST_STRING_DECL(kCFURLVolumeIsRootFileSystemKey, "NSURLVolumeIsRootFileSystemKey");
5402+
CONST_STRING_DECL(kCFURLVolumeSupportsCompressionKey, "NSURLVolumeSupportsCompressionKey");
5403+
CONST_STRING_DECL(kCFURLVolumeSupportsFileCloningKey, "NSURLVolumeSupportsFileCloningKey");
5404+
CONST_STRING_DECL(kCFURLVolumeSupportsSwapRenamingKey, "NSURLVolumeSupportsSwapRenamingKey");
5405+
CONST_STRING_DECL(kCFURLVolumeSupportsExclusiveRenamingKey, "NSURLVolumeSupportsExclusiveRenamingKey");
5406+
CONST_STRING_DECL(kCFURLVolumeSupportsImmutableFilesKey, "NSURLVolumeSupportsImmutableFilesKey");
5407+
CONST_STRING_DECL(kCFURLVolumeSupportsAccessPermissionsKey, "NSURLVolumeSupportsAccessPermissionsKey");
5408+
CONST_STRING_DECL(kCFURLIsUbiquitousItemKey, "NSURLIsUbiquitousItemKey");
5409+
CONST_STRING_DECL(kCFURLUbiquitousItemHasUnresolvedConflictsKey, "NSURLUbiquitousItemHasUnresolvedConflictsKey");
5410+
CONST_STRING_DECL(kCFURLUbiquitousItemIsDownloadedKey, "NSURLUbiquitousItemIsDownloadedKey");
5411+
CONST_STRING_DECL(kCFURLUbiquitousItemDownloadingStatusKey, "NSURLUbiquitousItemDownloadingStatusKey");
5412+
CONST_STRING_DECL(kCFURLUbiquitousItemIsDownloadingKey, "NSURLUbiquitousItemIsDownloadingKey");
5413+
CONST_STRING_DECL(kCFURLUbiquitousItemIsUploadedKey, "NSURLUbiquitousItemIsUploadedKey");
5414+
CONST_STRING_DECL(kCFURLUbiquitousItemIsUploadingKey, "NSURLUbiquitousItemIsUploadingKey");
5415+
CONST_STRING_DECL(kCFURLUbiquitousItemPercentDownloadedKey, "NSURLUbiquitousItemPercentDownloadedKey");
5416+
CONST_STRING_DECL(kCFURLUbiquitousItemPercentUploadedKey, "NSURLUbiquitousItemPercentUploadedKey");
5417+
CONST_STRING_DECL(kCFURLUbiquitousItemDownloadingErrorKey, "NSURLUbiquitousItemDownloadingErrorKey");
5418+
CONST_STRING_DECL(kCFURLUbiquitousItemUploadingErrorKey, "NSURLUbiquitousItemUploadingErrorKey");
5419+
CONST_STRING_DECL(kCFURLUbiquitousItemDownloadingStatusNotDownloaded, "NSURLUbiquitousItemDownloadingStatusNotDownloaded");
5420+
CONST_STRING_DECL(kCFURLUbiquitousItemDownloadingStatusDownloaded, "NSURLUbiquitousItemDownloadingStatusDownloaded");
5421+
CONST_STRING_DECL(kCFURLUbiquitousItemDownloadingStatusCurrent, "NSURLUbiquitousItemDownloadingStatusCurrent");
5422+
5423+
#endif

CoreFoundation/URL.subproj/CFURL.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ CF_IMPLICIT_BRIDGING_ENABLED
470470

471471

472472

473-
#if (TARGET_OS_MAC || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE) || CF_BUILDING_CF || NSBUILDINGFOUNDATION
473+
#if (TARGET_OS_MAC || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE) || CF_BUILDING_CF || NSBUILDINGFOUNDATION || DEPLOYMENT_RUNTIME_SWIFT
474474
CF_IMPLICIT_BRIDGING_DISABLED
475475

476476
/* Resource access
@@ -1138,6 +1138,7 @@ CF_EXPORT
11381138
const CFStringRef kCFURLUbiquitousItemDownloadingStatusCurrent API_AVAILABLE(macos(10.9), ios(7.0), watchos(2.0), tvos(9.0));
11391139
/* there is a local version of this item and it is the most up-to-date version known to this device. */
11401140

1141+
#if !DEPLOYMENT_TARGET_SWIFT
11411142

11421143
typedef CF_OPTIONS(CFOptionFlags, CFURLBookmarkCreationOptions) {
11431144
kCFURLBookmarkCreationMinimalBookmarkMask = ( 1UL << 9 ), // creates bookmark data with "less" information, which may be smaller but still be able to resolve in certain ways
@@ -1209,7 +1210,8 @@ Boolean CFURLStartAccessingSecurityScopedResource(CFURLRef url) API_AVAILABLE(ma
12091210
CF_EXPORT
12101211
void CFURLStopAccessingSecurityScopedResource(CFURLRef url) API_AVAILABLE(macos(10.7), ios(8.0), watchos(2.0), tvos(9.0)); // On OSX, available in MacOS X 10.7.3 and later
12111212

1212-
#endif /* TARGET_OS_MAC || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE */
1213+
#endif /* !DEPLOYMENT_TARGET_SWIFT */
1214+
#endif /* TARGET_OS_MAC || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || DEPLOYMENT_TARGET_SWIFT */
12131215

12141216
CF_EXTERN_C_END
12151217
CF_IMPLICIT_BRIDGING_DISABLED

Foundation/Bundle.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ open class Bundle: NSObject {
9090
}
9191

9292
let url = URL(fileURLWithPath: resolvedPath)
93-
_bundle = CFBundleCreate(kCFAllocatorSystemDefault, unsafeBitCast(url, to: CFURL.self))
93+
_bundle = CFBundleCreate(kCFAllocatorSystemDefault, url._cfObject)
9494
if (_bundle == nil) {
9595
return nil
9696
}

Foundation/FileManager+POSIX.swift

+11-4
Original file line numberDiff line numberDiff line change
@@ -408,11 +408,16 @@ extension FileManager {
408408
}
409409

410410
internal func _attributesOfFileSystem(forPath path: String) throws -> [FileAttributeKey : Any] {
411+
return try _attributesOfFileSystemIncludingBlockSize(forPath: path).attributes
412+
}
413+
414+
internal func _attributesOfFileSystemIncludingBlockSize(forPath path: String) throws -> (attributes: [FileAttributeKey : Any], blockSize: UInt64?) {
411415
var result: [FileAttributeKey:Any] = [:]
412-
416+
var finalBlockSize: UInt64?
417+
413418
try _fileSystemRepresentation(withPath: path) { fsRep in
414419
// statvfs(2) doesn't support 64bit inode on Darwin (apfs), fallback to statfs(2)
415-
#if os(macOS) || os(iOS)
420+
#if canImport(Darwin)
416421
var s = statfs()
417422
guard statfs(fsRep, &s) == 0 else {
418423
throw _NSErrorWithErrno(errno, reading: true, path: path)
@@ -424,7 +429,7 @@ extension FileManager {
424429
}
425430
#endif
426431

427-
#if os(macOS) || os(iOS)
432+
#if canImport(Darwin)
428433
let blockSize = UInt64(s.f_bsize)
429434
result[.systemNumber] = NSNumber(value: UInt64(s.f_fsid.val.0))
430435
#else
@@ -435,8 +440,10 @@ extension FileManager {
435440
result[.systemFreeSize] = NSNumber(value: blockSize * UInt64(s.f_bavail))
436441
result[.systemNodes] = NSNumber(value: UInt64(s.f_files))
437442
result[.systemFreeNodes] = NSNumber(value: UInt64(s.f_ffree))
443+
444+
finalBlockSize = blockSize
438445
}
439-
return result
446+
return (attributes: result, blockSize: finalBlockSize)
440447
}
441448

442449
internal func _createSymbolicLink(atPath path: String, withDestinationPath destPath: String) throws {

Foundation/FileManager+Win32.swift

+4
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,10 @@ extension FileManager {
235235
return faAttributes
236236
}
237237
}
238+
239+
internal func _attributesOfFileSystemIncludingBlockSize(forPath path: String) throws -> (attributes: [FileAttributeKey : Any], blockSize: UInt64?) {
240+
return (attributes: try _attributesOfFileSystem(forPath: path), blockSize: nil)
241+
}
238242

239243
internal func _attributesOfFileSystem(forPath path: String) throws -> [FileAttributeKey : Any] {
240244
var result: [FileAttributeKey:Any] = [:]

0 commit comments

Comments
 (0)