@@ -1629,7 +1629,11 @@ static void __CFURLDeallocate(CFTypeRef cf) {
1629
1629
if (sanitizedString ) CFRelease (sanitizedString );
1630
1630
if ( url -> _extra != NULL ) CFAllocatorDeallocate ( alloc , url -> _extra );
1631
1631
void * resourceInfo = _getResourceInfo (url );
1632
+ #if DEPLOYMENT_RUNTIME_SWIFT
1633
+ if (resourceInfo ) _CFSwiftRelease (resourceInfo );
1634
+ #else
1632
1635
if (resourceInfo ) CFRelease (resourceInfo );
1636
+ #endif
1633
1637
atomic_store (& ((struct __CFURL * )url )-> _resourceInfo , (void * )0xdeadbeef ); // 20362546: catch anyone using URL after it was released
1634
1638
}
1635
1639
@@ -5233,3 +5237,187 @@ CFURLRef CFURLCreateFilePathURL(CFAllocatorRef alloc, CFURLRef url, CFErrorRef *
5233
5237
5234
5238
CFURLRef CFURLCreateFileReferenceURL (CFAllocatorRef alloc , CFURLRef url , CFErrorRef * error ) { return NULL ; }
5235
5239
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
0 commit comments