[PATCH] D50269: [compiler-rt][builtins] Don't #include CoreFoundation in os_version_check.c

Erik Pilkington via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 3 14:05:04 PDT 2018


erik.pilkington created this revision.
erik.pilkington added a reviewer: arphaman.
Herald added subscribers: Sanitizers, llvm-commits, dexonsmith, dberris.

This breaks some configurations, so just forward declare everything that we need.

rdar://35943793

Thanks for taking a look!
Erik


Repository:
  rCRT Compiler Runtime

https://reviews.llvm.org/D50269

Files:
  compiler-rt/lib/builtins/os_version_check.c


Index: compiler-rt/lib/builtins/os_version_check.c
===================================================================
--- compiler-rt/lib/builtins/os_version_check.c
+++ 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);
@@ -146,15 +172,15 @@
 
   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, kCFAllocatorNull);
   if (!ProductVersion)
     goto Fail;
   CFTypeRef OpaqueValue = (*CFDictionaryGetValueFunc)(PListRef, ProductVersion);
@@ -165,7 +191,7 @@
 
   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);
 
@@ -182,14 +208,10 @@
   /* Populate the global version variables, if they haven't already. */
   dispatch_once_f(&DispatchOnceCounter, NULL, parseSystemVersionPList);
 
-  if (Major < GlobalMajor)
-    return 1;
-  if (Major > GlobalMajor)
-    return 0;
-  if (Minor < GlobalMinor)
-    return 1;
-  if (Minor > GlobalMinor)
-    return 0;
+  if (Major < GlobalMajor) return 1;
+  if (Major > GlobalMajor) return 0;
+  if (Minor < GlobalMinor) return 1;
+  if (Minor > GlobalMinor) return 0;
   return Subminor <= GlobalSubminor;
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50269.159084.patch
Type: text/x-patch
Size: 3351 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180803/f84c8822/attachment.bin>


More information about the cfe-commits mailing list