diff options
Diffstat (limited to 'contrib/compiler-rt/lib/builtins/os_version_check.c')
| -rw-r--r-- | contrib/compiler-rt/lib/builtins/os_version_check.c | 41 | 
1 files changed, 33 insertions, 8 deletions
diff --git a/contrib/compiler-rt/lib/builtins/os_version_check.c b/contrib/compiler-rt/lib/builtins/os_version_check.c index 772e33333c0f..e0d40edc7e38 100644 --- a/contrib/compiler-rt/lib/builtins/os_version_check.c +++ b/contrib/compiler-rt/lib/builtins/os_version_check.c @@ -15,7 +15,6 @@  #ifdef __APPLE__ -#include <CoreFoundation/CoreFoundation.h>  #include <TargetConditionals.h>  #include <dispatch/dispatch.h>  #include <dlfcn.h> @@ -28,6 +27,33 @@  static int32_t GlobalMajor, GlobalMinor, GlobalSubminor;  static dispatch_once_t DispatchOnceCounter; +/* We can't include <CoreFoundation/CoreFoundation.h> directly from here, so + * just forward declare everything that we need from it. */ + +typedef const void *CFDataRef, *CFAllocatorRef, *CFPropertyListRef, +                   *CFStringRef, *CFDictionaryRef, *CFTypeRef, *CFErrorRef; + +#if __LLP64__ +typedef unsigned long long CFTypeID; +typedef unsigned long long CFOptionFlags; +typedef signed long long CFIndex; +#else +typedef unsigned long CFTypeID; +typedef unsigned long CFOptionFlags; +typedef signed long CFIndex; +#endif + +typedef unsigned char UInt8; +typedef _Bool Boolean; +typedef CFIndex CFPropertyListFormat; +typedef uint32_t CFStringEncoding; + +/* kCFStringEncodingASCII analog. */ +#define CF_STRING_ENCODING_ASCII 0x0600 +/* kCFStringEncodingUTF8 analog. */ +#define CF_STRING_ENCODING_UTF8 0x08000100 +#define CF_PROPERTY_LIST_IMMUTABLE 0 +  typedef CFDataRef (*CFDataCreateWithBytesNoCopyFuncTy)(CFAllocatorRef,                                                         const UInt8 *, CFIndex,                                                         CFAllocatorRef); @@ -55,8 +81,7 @@ static void parseSystemVersionPList(void *Unused) {    const void *NullAllocator = dlsym(RTLD_DEFAULT, "kCFAllocatorNull");    if (!NullAllocator)      return; -  const CFAllocatorRef kCFAllocatorNull = -      *(const CFAllocatorRef *)NullAllocator; +  const CFAllocatorRef AllocatorNull = *(const CFAllocatorRef *)NullAllocator;    CFDataCreateWithBytesNoCopyFuncTy CFDataCreateWithBytesNoCopyFunc =        (CFDataCreateWithBytesNoCopyFuncTy)dlsym(RTLD_DEFAULT,                                                 "CFDataCreateWithBytesNoCopy"); @@ -140,21 +165,21 @@ static void parseSystemVersionPList(void *Unused) {    /* Get the file buffer into CF's format. We pass in a null allocator here *     * because we free PListBuf ourselves */    FileContentsRef = (*CFDataCreateWithBytesNoCopyFunc)( -      NULL, PListBuf, (CFIndex)NumRead, kCFAllocatorNull); +      NULL, PListBuf, (CFIndex)NumRead, AllocatorNull);    if (!FileContentsRef)      goto Fail;    if (CFPropertyListCreateWithDataFunc)      PListRef = (*CFPropertyListCreateWithDataFunc)( -        NULL, FileContentsRef, kCFPropertyListImmutable, NULL, NULL); +        NULL, FileContentsRef, CF_PROPERTY_LIST_IMMUTABLE, NULL, NULL);    else      PListRef = (*CFPropertyListCreateFromXMLDataFunc)( -        NULL, FileContentsRef, kCFPropertyListImmutable, NULL); +        NULL, FileContentsRef, CF_PROPERTY_LIST_IMMUTABLE, NULL);    if (!PListRef)      goto Fail;    CFStringRef ProductVersion = (*CFStringCreateWithCStringNoCopyFunc)( -      NULL, "ProductVersion", kCFStringEncodingASCII, kCFAllocatorNull); +      NULL, "ProductVersion", CF_STRING_ENCODING_ASCII, AllocatorNull);    if (!ProductVersion)      goto Fail;    CFTypeRef OpaqueValue = (*CFDictionaryGetValueFunc)(PListRef, ProductVersion); @@ -165,7 +190,7 @@ static void parseSystemVersionPList(void *Unused) {    char VersionStr[32];    if (!(*CFStringGetCStringFunc)((CFStringRef)OpaqueValue, VersionStr, -                                 sizeof(VersionStr), kCFStringEncodingUTF8)) +                                 sizeof(VersionStr), CF_STRING_ENCODING_UTF8))      goto Fail;    sscanf(VersionStr, "%d.%d.%d", &GlobalMajor, &GlobalMinor, &GlobalSubminor);  | 
