framework = "CoreFoundation" crate = "objc2-core-foundation" required-crates = [] custom-lib-rs = true macos = "10.0" maccatalyst = "13.0" ios = "2.0" tvos = "9.0" watchos = "2.0" visionos = "1.0" gnustep = true ## Generic types typedef.CFArrayRef.generics = ["T"] typedef.CFBagRef.generics = ["T"] typedef.CFBinaryHeapRef.generics = ["T"] typedef.CFDictionaryRef.generics = ["K", "V"] typedef.CFSetRef.generics = ["T"] typedef.CFMutableArrayRef.generics = ["T"] typedef.CFMutableBagRef.generics = ["T"] typedef.CFMutableDictionaryRef.generics = ["K", "V"] typedef.CFMutableSetRef.generics = ["T"] # Not CFTreeRef # Uses variadics fn.CFStringCreateWithFormatAndArguments.skipped = true fn.CFStringCreateStringWithValidatedFormatAndArguments.skipped = true fn.CFStringAppendFormatAndArguments.skipped = true # Name clash with containing module enum.__CFByteOrder.skipped = true # Needs FSRef from CoreServices, but CoreServices depends on CoreFoundation # so we don't generate these to avoid a cyclic dependency. fn.CFURLCreateFromFSRef.skipped = true fn.CFURLGetFSRef.skipped = true # Needs acl_t, which is not exposed by libc fn.CFFileSecurityCopyAccessControlList.skipped = true fn.CFFileSecuritySetAccessControlList.skipped = true # Different definition depending on pointer width typedef.CGFloat.skipped = true # Custom definitions for slightly better docs now struct.CGPoint.skipped = true struct.CGSize.skipped = true struct.CGRect.skipped = true # Custom definition because it's special typedef.CFTypeRef.skipped = true # Implementation details fn.__CFRangeMake.skipped = true fn.__CFStringMakeConstantString.skipped = true # Differs based on architecture typedef.CFBundleRefNum.skipped = true typedef.CFTypeID.skipped = true typedef.CFOptionFlags.skipped = true typedef.CFHashCode.skipped = true typedef.CFIndex.skipped = true # Custom-defined since they require manual handling. # Use `CFRetained` to access these. fn.CFAutorelease.skipped = true fn.CFRetain.skipped = true fn.CFRelease.skipped = true fn.CFMakeCollectable.skipped = true # Simply returns the argument on macOS 10.12 or later # Dependent on target endianness fn.CFSwapInt16.skipped = true fn.CFSwapInt32.skipped = true fn.CFSwapInt64.skipped = true fn.CFByteOrderGetCurrent.skipped = true fn.CFSwapInt16BigToHost.skipped = true fn.CFSwapInt32BigToHost.skipped = true fn.CFSwapInt64BigToHost.skipped = true fn.CFSwapInt16HostToBig.skipped = true fn.CFSwapInt32HostToBig.skipped = true fn.CFSwapInt64HostToBig.skipped = true fn.CFSwapInt16LittleToHost.skipped = true fn.CFSwapInt32LittleToHost.skipped = true fn.CFSwapInt64LittleToHost.skipped = true fn.CFSwapInt16HostToLittle.skipped = true fn.CFSwapInt32HostToLittle.skipped = true fn.CFSwapInt64HostToLittle.skipped = true fn.CFConvertFloat32HostToSwapped.skipped = true fn.CFConvertFloat32SwappedToHost.skipped = true fn.CFConvertFloat64HostToSwapped.skipped = true fn.CFConvertFloat64SwappedToHost.skipped = true fn.CFConvertFloatHostToSwapped.skipped = true fn.CFConvertFloatSwappedToHost.skipped = true fn.CFConvertDoubleHostToSwapped.skipped = true fn.CFConvertDoubleSwappedToHost.skipped = true # Custom-defined inline functions fn.CFRangeMake.skipped = true fn.CFUserNotificationCheckBoxChecked.skipped = true fn.CFUserNotificationSecureTextField.skipped = true fn.CFUserNotificationPopUpSelection.skipped = true # Conflicts with the Get variants. fn.CFReadStreamCopyError.renamed = "copy_error" fn.CFWriteStreamCopyError.renamed = "copy_error" # Customized. fn.CFDictionaryContainsKey.renamed = "contains_ptr_key" fn.CFDictionaryContainsValue.renamed = "contains_ptr_value" fn.CFURLCreateWithString.renamed = "__from_string" fn.CFURLGetString.renamed = "__string" ## ## Safety ## # CFArray fn.CFArrayCreateMutableCopy.unsafe = true # UB if capacity not large enough fn.CFArrayGetCount.unsafe = false fn.CFArrayGetValueAtIndex.unsafe = true # UB if index out of bounds fn.CFArrayRemoveValueAtIndex.unsafe = true # UB if index out of bounds fn.CFArrayRemoveAllValues.unsafe = false fn.CFArrayExchangeValuesAtIndices.unsafe = true # UB if index out of bounds fn.CFArrayAppendArray.unsafe = true # UB if range out of bounds # CFAttributedString fn.CFAttributedStringCreate.unsafe = true # CFDictionary can contain anything fn.CFAttributedStringCreateWithSubstring.unsafe = true # range must be in bounds fn.CFAttributedStringCreateCopy.unsafe = false fn.CFAttributedStringGetString.unsafe = false fn.CFAttributedStringGetLength.unsafe = false fn.CFAttributedStringCreateMutableCopy.unsafe = false fn.CFAttributedStringCreateMutable.unsafe = false fn.CFAttributedStringReplaceString.unsafe = true # range must be in bounds fn.CFAttributedStringGetMutableString.unsafe = false fn.CFAttributedStringSetAttributes.unsafe = true # range must be in bounds fn.CFAttributedStringSetAttribute.unsafe = true # range must be in bounds fn.CFAttributedStringRemoveAttribute.unsafe = true # range must be in bounds fn.CFAttributedStringReplaceAttributedString.unsafe = true # range must be in bounds fn.CFAttributedStringBeginEditing.unsafe = false fn.CFAttributedStringEndEditing.unsafe = false # CFBase fn.CFAllocatorSetDefault.unsafe = false fn.CFAllocatorGetDefault.unsafe = false fn.CFAllocatorAllocateBytes.unsafe = false fn.CFAllocatorAllocate.unsafe = false fn.CFAllocatorGetPreferredSizeForSize.unsafe = false fn.CFGetTypeID.unsafe = false fn.CFCopyTypeIDDescription.unsafe = false fn.CFGetRetainCount.unsafe = false fn.CFEqual.unsafe = false fn.CFHash.unsafe = false fn.CFCopyDescription.unsafe = false fn.CFGetAllocator.unsafe = false # CFBundle fn.CFBundleGetMainBundle.unsafe = false fn.CFBundleGetBundleWithIdentifier.unsafe = false fn.CFBundleGetAllBundles.unsafe = true # Not thread-safe fn.CFBundleCreate.unsafe = false fn.CFBundleCreateBundlesFromDirectory.unsafe = false fn.CFBundleCopyBundleURL.unsafe = false fn.CFBundleGetValueForInfoDictionaryKey.unsafe = false fn.CFBundleGetInfoDictionary.unsafe = false fn.CFBundleGetLocalInfoDictionary.unsafe = false fn.CFBundleGetIdentifier.unsafe = false fn.CFBundleGetVersionNumber.unsafe = false fn.CFBundleGetDevelopmentRegion.unsafe = false fn.CFBundleCopySupportFilesDirectoryURL.unsafe = false fn.CFBundleCopyResourcesDirectoryURL.unsafe = false fn.CFBundleCopyPrivateFrameworksURL.unsafe = false fn.CFBundleCopySharedFrameworksURL.unsafe = false fn.CFBundleCopySharedSupportURL.unsafe = false fn.CFBundleCopyBuiltInPlugInsURL.unsafe = false fn.CFBundleCopyInfoDictionaryInDirectory.unsafe = false fn.CFBundleCopyResourceURL.unsafe = false fn.CFBundleCopyResourceURLsOfType.unsafe = false fn.CFBundleCopyLocalizedString.unsafe = false fn.CFBundleCopyResourceURLInDirectory.unsafe = false fn.CFBundleCopyResourceURLsOfTypeInDirectory.unsafe = false fn.CFBundleCopyBundleLocalizations.unsafe = false fn.CFBundleCopyPreferredLocalizationsFromArray.unsafe = true # CFArray can contain anything fn.CFBundleCopyLocalizationsForPreferences.unsafe = true # CFArray can contain anything fn.CFBundleCopyResourceURLForLocalization.unsafe = false fn.CFBundleCopyResourceURLsOfTypeForLocalization.unsafe = false fn.CFBundleCopyInfoDictionaryForURL.unsafe = false fn.CFBundleCopyLocalizationsForURL.unsafe = false fn.CFBundleCopyExecutableArchitecturesForURL.unsafe = false fn.CFBundleCopyExecutableURL.unsafe = false fn.CFBundleCopyExecutableArchitectures.unsafe = false fn.CFBundleIsExecutableLoaded.unsafe = false fn.CFBundleLoadExecutable.unsafe = true # See below fn.CFBundleUnloadExecutable.unsafe = true # Seems wildly unsafe? fn.CFBundleGetFunctionPointerForName.unsafe = false fn.CFBundleGetDataPointerForName.unsafe = false fn.CFBundleCopyAuxiliaryExecutableURL.unsafe = false fn.CFBundleIsExecutableLoadable.unsafe = false fn.CFBundleIsExecutableLoadableForURL.unsafe = false fn.CFBundleIsArchitectureLoadable.unsafe = false fn.CFBundleGetPlugIn.unsafe = false # CFCalendar fn.CFCalendarCopyCurrent.unsafe = false # Returns a new instance, so still safe to modify fn.CFCalendarCreateWithIdentifier.unsafe = false fn.CFCalendarGetIdentifier.unsafe = false fn.CFCalendarCopyLocale.unsafe = false fn.CFCalendarSetLocale.unsafe = true fn.CFCalendarCopyTimeZone.unsafe = false fn.CFCalendarSetTimeZone.unsafe = false fn.CFCalendarGetFirstWeekday.unsafe = false fn.CFCalendarSetFirstWeekday.unsafe = false fn.CFCalendarGetMinimumDaysInFirstWeek.unsafe = false fn.CFCalendarSetMinimumDaysInFirstWeek.unsafe = false fn.CFCalendarGetMinimumRangeOfUnit.unsafe = false fn.CFCalendarGetMaximumRangeOfUnit.unsafe = false fn.CFCalendarGetRangeOfUnit.unsafe = false fn.CFCalendarGetOrdinalityOfUnit.unsafe = false # CFData fn.CFDataCreateCopy.unsafe = false fn.CFDataCreateMutable.unsafe = false fn.CFDataGetLength.unsafe = false fn.CFDataGetBytePtr.unsafe = false fn.CFDataGetMutableBytePtr.unsafe = false fn.CFDataSetLength.unsafe = false fn.CFDataIncreaseLength.unsafe = false fn.CFDataDeleteBytes.unsafe = false # CFDate fn.CFAbsoluteTimeGetCurrent.unsafe = false fn.CFDateCreate.unsafe = false fn.CFDateGetAbsoluteTime.unsafe = false fn.CFDateGetTimeIntervalSinceDate.unsafe = false # CFDictionary fn.CFDictionaryCreateCopy.unsafe = false fn.CFDictionaryCreateMutableCopy.unsafe = true # UB if capacity not large enough fn.CFDictionaryGetCount.unsafe = false fn.CFDictionaryRemoveAllValues.unsafe = false # CFError fn.CFErrorCreate.unsafe = true # CFDictionary can contain anything fn.CFErrorGetDomain.unsafe = false fn.CFErrorGetCode.unsafe = false fn.CFErrorCopyUserInfo.unsafe = false fn.CFErrorCopyDescription.unsafe = false fn.CFErrorCopyFailureReason.unsafe = false fn.CFErrorCopyRecoverySuggestion.unsafe = false # CFFileDescriptor fn.CFFileDescriptorCreate.unsafe = true # Callout / context must be sendable fn.CFFileDescriptorGetNativeDescriptor.unsafe = false fn.CFFileDescriptorEnableCallBacks.unsafe = false fn.CFFileDescriptorDisableCallBacks.unsafe = false fn.CFFileDescriptorInvalidate.unsafe = false fn.CFFileDescriptorIsValid.unsafe = false fn.CFFileDescriptorCreateRunLoopSource.unsafe = false # CFFileSecurity fn.CFFileSecurityCreate.unsafe = false fn.CFFileSecurityCreateCopy.unsafe = false fn.CFFileSecuritySetOwnerUUID.unsafe = false fn.CFFileSecuritySetGroupUUID.unsafe = false fn.CFFileSecuritySetOwner.unsafe = false fn.CFFileSecuritySetGroup.unsafe = false fn.CFFileSecuritySetMode.unsafe = false fn.CFFileSecurityClearProperties.unsafe = false # CFLocale fn.CFLocaleGetSystem.unsafe = false fn.CFLocaleCopyCurrent.unsafe = false fn.CFLocaleCopyAvailableLocaleIdentifiers.unsafe = false fn.CFLocaleCopyISOLanguageCodes.unsafe = false fn.CFLocaleCopyISOCountryCodes.unsafe = false fn.CFLocaleCopyISOCurrencyCodes.unsafe = false fn.CFLocaleCopyCommonISOCurrencyCodes.unsafe = false fn.CFLocaleCopyPreferredLanguages.unsafe = false fn.CFLocaleCreateCanonicalLanguageIdentifierFromString.unsafe = false fn.CFLocaleCreateCanonicalLocaleIdentifierFromString.unsafe = false fn.CFLocaleCreateCanonicalLocaleIdentifierFromScriptManagerCodes.unsafe = false fn.CFLocaleCreateLocaleIdentifierFromWindowsLocaleCode.unsafe = false fn.CFLocaleGetWindowsLocaleCodeFromLocaleIdentifier.unsafe = false fn.CFLocaleGetLanguageCharacterDirection.unsafe = false fn.CFLocaleGetLanguageLineDirection.unsafe = false fn.CFLocaleCreateComponentsFromLocaleIdentifier.unsafe = false fn.CFLocaleCreateLocaleIdentifierFromComponents.unsafe = true # CFDictionary can contain anything fn.CFLocaleCreate.unsafe = false fn.CFLocaleCreateCopy.unsafe = false fn.CFLocaleGetIdentifier.unsafe = false fn.CFLocaleGetValue.unsafe = false fn.CFLocaleCopyDisplayNameForPropertyValue.unsafe = false # CFMachPort fn.CFMachPortGetPort.unsafe = false fn.CFMachPortInvalidate.unsafe = false fn.CFMachPortIsValid.unsafe = false fn.CFMachPortGetInvalidationCallBack.unsafe = false fn.CFMachPortSetInvalidationCallBack.unsafe = true # Callback must be sendable fn.CFMachPortCreateRunLoopSource.unsafe = false # CFMessagePort fn.CFMessagePortCreateRemote.unsafe = false fn.CFMessagePortIsRemote.unsafe = false fn.CFMessagePortGetName.unsafe = false fn.CFMessagePortSetName.unsafe = false fn.CFMessagePortInvalidate.unsafe = false fn.CFMessagePortIsValid.unsafe = false fn.CFMessagePortGetInvalidationCallBack.unsafe = false fn.CFMessagePortSetInvalidationCallBack.unsafe = true # Callback must be sendable fn.CFMessagePortCreateRunLoopSource.unsafe = false # CFNotificationCenter fn.CFNotificationCenterGetLocalCenter.unsafe = false fn.CFNotificationCenterGetDistributedCenter.unsafe = false fn.CFNotificationCenterGetDarwinNotifyCenter.unsafe = false # CFNumber fn.CFBooleanGetValue.unsafe = false fn.CFNumberGetType.unsafe = false fn.CFNumberGetByteSize.unsafe = false fn.CFNumberIsFloatType.unsafe = false # CFPlugIn fn.CFPlugInCreate.unsafe = false fn.CFPlugInGetBundle.unsafe = false fn.CFPlugInSetLoadOnDemand.unsafe = false fn.CFPlugInIsLoadOnDemand.unsafe = false fn.CFPlugInFindFactoriesForPlugInType.unsafe = false fn.CFPlugInFindFactoriesForPlugInTypeInPlugIn.unsafe = false fn.CFPlugInInstanceCreate.unsafe = false fn.CFPlugInRegisterFactoryFunction.unsafe = false fn.CFPlugInRegisterFactoryFunctionByName.unsafe = false fn.CFPlugInUnregisterFactory.unsafe = false fn.CFPlugInRegisterPlugInType.unsafe = false fn.CFPlugInUnregisterPlugInType.unsafe = false fn.CFPlugInAddInstanceForFactory.unsafe = false fn.CFPlugInRemoveInstanceForFactory.unsafe = false fn.CFPlugInInstanceGetFactoryName.unsafe = false fn.CFPlugInInstanceGetInstanceData.unsafe = false fn.CFPlugInInstanceCreateWithInstanceDataSize.unsafe = true # Callbacks, must be sendable? # CFPreferences fn.CFPreferencesCopyAppValue.unsafe = false fn.CFPreferencesSetAppValue.unsafe = true # CFPropertyList can be anything fn.CFPreferencesAddSuitePreferencesToApp.unsafe = false fn.CFPreferencesRemoveSuitePreferencesFromApp.unsafe = false fn.CFPreferencesAppSynchronize.unsafe = false fn.CFPreferencesCopyValue.unsafe = false fn.CFPreferencesCopyMultiple.unsafe = false fn.CFPreferencesSetValue.unsafe = true # CFPropertyList can be anything fn.CFPreferencesSetMultiple.unsafe = true # CFArray can contain anything fn.CFPreferencesCopyKeyList.unsafe = false fn.CFPreferencesAppValueIsForced.unsafe = false # CFPropertyList fn.CFPropertyListCreateXMLData.unsafe = true # CFPropertyList can be anything fn.CFPropertyListCreateDeepCopy.unsafe = true # CFPropertyList can be anything fn.CFPropertyListIsValid.unsafe = true # CFPropertyList can be anything # CFRunLoop fn.CFRunLoopGetCurrent.unsafe = false fn.CFRunLoopGetMain.unsafe = false fn.CFRunLoopCopyCurrentMode.unsafe = false fn.CFRunLoopCopyAllModes.unsafe = false fn.CFRunLoopAddCommonMode.unsafe = false fn.CFRunLoopGetNextTimerFireDate.unsafe = false fn.CFRunLoopRun.unsafe = false # Can be run recursively fn.CFRunLoopRunInMode.unsafe = false fn.CFRunLoopIsWaiting.unsafe = false fn.CFRunLoopWakeUp.unsafe = false fn.CFRunLoopStop.unsafe = false fn.CFRunLoopPerformBlock.unsafe = true # Block must be sendable fn.CFRunLoopContainsSource.unsafe = false fn.CFRunLoopAddSource.unsafe = false fn.CFRunLoopRemoveSource.unsafe = false fn.CFRunLoopContainsObserver.unsafe = false fn.CFRunLoopAddObserver.unsafe = false fn.CFRunLoopRemoveObserver.unsafe = false fn.CFRunLoopContainsTimer.unsafe = false fn.CFRunLoopAddTimer.unsafe = false fn.CFRunLoopRemoveTimer.unsafe = false fn.CFRunLoopSourceCreate.unsafe = true # Context must be sendable fn.CFRunLoopSourceGetOrder.unsafe = false fn.CFRunLoopSourceInvalidate.unsafe = false fn.CFRunLoopSourceIsValid.unsafe = false fn.CFRunLoopSourceSignal.unsafe = false fn.CFRunLoopObserverCreate.unsafe = true # Callout / context must be sendable fn.CFRunLoopObserverCreateWithHandler.unsafe = true # Handler must be sendable fn.CFRunLoopObserverGetActivities.unsafe = false fn.CFRunLoopObserverDoesRepeat.unsafe = false fn.CFRunLoopObserverGetOrder.unsafe = false fn.CFRunLoopObserverInvalidate.unsafe = false fn.CFRunLoopObserverIsValid.unsafe = false fn.CFRunLoopTimerCreate.unsafe = true # Callout / context must be sendable fn.CFRunLoopTimerCreateWithHandler.unsafe = true # Handler must be sendable fn.CFRunLoopTimerGetNextFireDate.unsafe = false fn.CFRunLoopTimerSetNextFireDate.unsafe = false fn.CFRunLoopTimerGetInterval.unsafe = false fn.CFRunLoopTimerDoesRepeat.unsafe = false fn.CFRunLoopTimerGetOrder.unsafe = false fn.CFRunLoopTimerInvalidate.unsafe = false fn.CFRunLoopTimerIsValid.unsafe = false fn.CFRunLoopTimerGetTolerance.unsafe = false fn.CFRunLoopTimerSetTolerance.unsafe = true # Not thread safe? # CFSet fn.CFSetCreateCopy.unsafe = false fn.CFSetCreateMutableCopy.unsafe = true # UB if capacity not large enough fn.CFSetGetCount.unsafe = false fn.CFSetRemoveAllValues.unsafe = false # CFSocket fn.CFSocketCreate.unsafe = true # Callout/context must be sendable fn.CFSocketCreateWithNative.unsafe = true # Callout/context must be sendable fn.CFSocketCreateWithSocketSignature.unsafe = true # Callout/context must be sendable fn.CFSocketSetAddress.unsafe = false fn.CFSocketConnectToAddress.unsafe = false fn.CFSocketInvalidate.unsafe = false fn.CFSocketIsValid.unsafe = false fn.CFSocketCopyAddress.unsafe = false fn.CFSocketCopyPeerAddress.unsafe = false fn.CFSocketGetNative.unsafe = false fn.CFSocketCreateRunLoopSource.unsafe = false fn.CFSocketGetSocketFlags.unsafe = false fn.CFSocketSetSocketFlags.unsafe = false fn.CFSocketDisableCallBacks.unsafe = false fn.CFSocketEnableCallBacks.unsafe = false fn.CFSocketSendData.unsafe = false fn.CFSocketSetDefaultNameRegistryPortNumber.unsafe = false fn.CFSocketGetDefaultNameRegistryPortNumber.unsafe = false # CFStream fn.CFWriteStreamCreateWithAllocatedBuffers.unsafe = false fn.CFReadStreamCreateWithFile.unsafe = false fn.CFWriteStreamCreateWithFile.unsafe = false fn.CFReadStreamGetStatus.unsafe = false fn.CFWriteStreamGetStatus.unsafe = false fn.CFReadStreamCopyError.unsafe = false fn.CFWriteStreamCopyError.unsafe = false fn.CFReadStreamOpen.unsafe = false fn.CFWriteStreamOpen.unsafe = false fn.CFReadStreamClose.unsafe = false fn.CFWriteStreamClose.unsafe = false fn.CFReadStreamHasBytesAvailable.unsafe = false fn.CFWriteStreamCanAcceptBytes.unsafe = false fn.CFReadStreamCopyProperty.unsafe = false fn.CFWriteStreamCopyProperty.unsafe = false fn.CFReadStreamSetProperty.unsafe = true # CFType can be anything fn.CFWriteStreamSetProperty.unsafe = true # CFType can be anything fn.CFReadStreamScheduleWithRunLoop.unsafe = false fn.CFWriteStreamScheduleWithRunLoop.unsafe = false fn.CFReadStreamUnscheduleFromRunLoop.unsafe = false fn.CFWriteStreamUnscheduleFromRunLoop.unsafe = false fn.CFReadStreamGetError.unsafe = false fn.CFWriteStreamGetError.unsafe = false # CFString fn.CFStringCreateWithSubstring.unsafe = true # Unsure if range out of bounds is UB fn.CFStringCreateCopy.unsafe = false fn.CFStringCreateMutable.unsafe = false fn.CFStringCreateMutableCopy.unsafe = false fn.CFStringGetLength.unsafe = false fn.CFStringGetCharacterAtIndex.unsafe = true # Maybe UB if out of bounds? fn.CFStringGetPascalStringPtr.unsafe = false fn.CFStringGetCStringPtr.unsafe = false fn.CFStringGetCharactersPtr.unsafe = false fn.CFStringCreateFromExternalRepresentation.unsafe = false fn.CFStringCreateExternalRepresentation.unsafe = false fn.CFStringGetSmallestEncoding.unsafe = false fn.CFStringGetFastestEncoding.unsafe = false fn.CFStringGetSystemEncoding.unsafe = false fn.CFStringGetMaximumSizeForEncoding.unsafe = false fn.CFStringGetMaximumSizeOfFileSystemRepresentation.unsafe = false fn.CFStringCompareWithOptionsAndLocale.unsafe = true # Unsure if range out of bounds is UB fn.CFStringCompareWithOptions.unsafe = true # Unsure if range out of bounds is UB fn.CFStringCompare.unsafe = false fn.CFStringCreateArrayWithFindResults.unsafe = true # Unsure if range out of bounds is UB fn.CFStringFind.unsafe = false fn.CFStringHasPrefix.unsafe = false fn.CFStringHasSuffix.unsafe = false fn.CFStringGetRangeOfComposedCharactersAtIndex.unsafe = true # UB if out of bounds fn.CFStringIsHyphenationAvailableForLocale.unsafe = false fn.CFStringCreateByCombiningStrings.unsafe = true # CFArray can contain anything fn.CFStringCreateArrayBySeparatingStrings.unsafe = false fn.CFStringGetIntValue.unsafe = false fn.CFStringGetDoubleValue.unsafe = false fn.CFStringAppend.unsafe = false fn.CFStringInsert.unsafe = true # Maybe UB if out of bounds? fn.CFStringDelete.unsafe = true # Unsure if range out of bounds is UB fn.CFStringReplace.unsafe = true # Unsure if range out of bounds is UB fn.CFStringReplaceAll.unsafe = false fn.CFStringFindAndReplace.unsafe = true # Unsure if range out of bounds is UB fn.CFStringPad.unsafe = true # Maybe UB if out of bounds? fn.CFStringTrim.unsafe = false fn.CFStringTrimWhitespace.unsafe = false fn.CFStringLowercase.unsafe = false fn.CFStringUppercase.unsafe = false fn.CFStringCapitalize.unsafe = false fn.CFStringNormalize.unsafe = true # Maybe UB if CFStringNormalizationForm is not valid? fn.CFStringFold.unsafe = false fn.CFStringIsEncodingAvailable.unsafe = false fn.CFStringGetListOfAvailableEncodings.unsafe = false fn.CFStringGetNameOfEncoding.unsafe = false fn.CFStringConvertEncodingToNSStringEncoding.unsafe = false fn.CFStringConvertNSStringEncodingToEncoding.unsafe = false fn.CFStringConvertEncodingToWindowsCodepage.unsafe = false fn.CFStringConvertWindowsCodepageToEncoding.unsafe = false fn.CFStringConvertIANACharSetNameToEncoding.unsafe = false fn.CFStringConvertEncodingToIANACharSetName.unsafe = false fn.CFStringGetMostCompatibleMacStringEncoding.unsafe = false fn.CFShow.unsafe = false fn.CFShowStr.unsafe = false # CFTimeZone fn.CFTimeZoneCopySystem.unsafe = false fn.CFTimeZoneCopyDefault.unsafe = false fn.CFTimeZoneSetDefault.unsafe = false fn.CFTimeZoneCopyKnownNames.unsafe = false fn.CFTimeZoneCopyAbbreviationDictionary.unsafe = false fn.CFTimeZoneSetAbbreviationDictionary.unsafe = true # CFDictionary can be anything fn.CFTimeZoneCreate.unsafe = true # Unsure fn.CFTimeZoneCreateWithTimeIntervalFromGMT.unsafe = false fn.CFTimeZoneCreateWithName.unsafe = false fn.CFTimeZoneGetName.unsafe = false fn.CFTimeZoneGetData.unsafe = false fn.CFTimeZoneGetSecondsFromGMT.unsafe = false fn.CFTimeZoneCopyAbbreviation.unsafe = false fn.CFTimeZoneIsDaylightSavingTime.unsafe = false fn.CFTimeZoneGetDaylightSavingTimeOffset.unsafe = false fn.CFTimeZoneGetNextDaylightSavingTimeTransition.unsafe = false fn.CFTimeZoneCopyLocalizedName.unsafe = false # CFURL fn.CFURLCreateData.unsafe = false fn.CFURLCreateWithString.unsafe = false fn.CFURLCreateWithFileSystemPath.unsafe = false fn.CFURLCreateWithFileSystemPathRelativeToBase.unsafe = false fn.CFURLCopyAbsoluteURL.unsafe = false fn.CFURLGetString.unsafe = false fn.CFURLGetBaseURL.unsafe = false fn.CFURLCanBeDecomposed.unsafe = false fn.CFURLCopyScheme.unsafe = false fn.CFURLCopyNetLocation.unsafe = false fn.CFURLCopyPath.unsafe = false fn.CFURLCopyFileSystemPath.unsafe = false fn.CFURLHasDirectoryPath.unsafe = false fn.CFURLCopyResourceSpecifier.unsafe = false fn.CFURLCopyHostName.unsafe = false fn.CFURLGetPortNumber.unsafe = false fn.CFURLCopyUserName.unsafe = false fn.CFURLCopyPassword.unsafe = false fn.CFURLCopyParameterString.unsafe = false fn.CFURLCopyQueryString.unsafe = false fn.CFURLCopyFragment.unsafe = false fn.CFURLCopyLastPathComponent.unsafe = false fn.CFURLCopyPathExtension.unsafe = false fn.CFURLCreateCopyAppendingPathComponent.unsafe = false fn.CFURLCreateCopyDeletingLastPathComponent.unsafe = false fn.CFURLCreateCopyAppendingPathExtension.unsafe = false fn.CFURLCreateCopyDeletingPathExtension.unsafe = false fn.CFURLCreateStringByReplacingPercentEscapes.unsafe = false fn.CFURLIsFileReferenceURL.unsafe = false fn.CFURLClearResourcePropertyCacheForKey.unsafe = false fn.CFURLClearResourcePropertyCache.unsafe = false fn.CFURLSetTemporaryResourcePropertyForKey.unsafe = false # CFUserNotification fn.CFUserNotificationGetResponseValue.unsafe = true # Unsure about key/idx fn.CFUserNotificationGetResponseDictionary.unsafe = false fn.CFUserNotificationUpdate.unsafe = true # Takes CFDictionary which can be anything fn.CFUserNotificationCancel.unsafe = false fn.CFUserNotificationCreateRunLoopSource.unsafe = true # Callback must be sendable fn.CFUserNotificationDisplayNotice.unsafe = false # CFUtilities fn.CFCopyHomeDirectoryURL.unsafe = false # CFUUID fn.CFUUIDCreate.unsafe = false fn.CFUUIDCreateWithBytes.unsafe = false fn.CFUUIDCreateFromString.unsafe = false fn.CFUUIDCreateString.unsafe = false fn.CFUUIDGetConstantUUIDWithBytes.unsafe = false fn.CFUUIDGetUUIDBytes.unsafe = false fn.CFUUIDCreateFromUUIDBytes.unsafe = false