]> git.saurik.com Git - apple/xnu.git/blobdiff - EXTERNAL_HEADERS/corecrypto/cc_macros.h
xnu-7195.101.1.tar.gz
[apple/xnu.git] / EXTERNAL_HEADERS / corecrypto / cc_macros.h
index 4d0b0be385c940de71c2bf94c2f0592d7f4feaf6..b1d3fe1fdf3871aa7fe498cf4c2638f1ed09b624 100644 (file)
@@ -1,11 +1,12 @@
-/*
- *  cc_macros.h
- *  corecrypto
- *
- *  Created on 01/11/2012
- *
- *  Copyright (c) 2012,2015 Apple Inc. All rights reserved.
+/* Copyright (c) (2012,2015,2016,2017,2019) Apple Inc. All rights reserved.
  *
+ * corecrypto is licensed under Apple Inc.’s Internal Use License Agreement (which
+ * is contained in the License.txt file distributed with corecrypto) and only to 
+ * people who accept that license. IMPORTANT:  Any license rights granted to you by 
+ * Apple Inc. (if any) are limited to internal use within your organization only on 
+ * devices and computers you own or control, for the sole purpose of verifying the 
+ * security characteristics and correct functioning of the Apple Software.  You may 
+ * not, directly or indirectly, redistribute the Apple Software or any portions thereof.
  */
 
 #ifndef _CORECRYPTO_CC_MACROS_H_
 #define __CC_DEBUG_ASSERT_PRODUCTION_CODE !CORECRYPTO_DEBUG
 #endif
 
-#ifndef __CC_DEBUG_ASSERT_MESSAGE
-#define __CC_DEBUG_ASSERT_MESSAGE(name, assertion, label, message, file, line, value) \
-cc_printf( "CCAssertMacros: %s, %s file: %s, line: %d\n", assertion, (message!=0) ? message : "", file, line);
+#if CORECRYPTO_DEBUG_ENABLE_CC_REQUIRE_PRINTS
+
+#if !CC_KERNEL
+    #include <string.h> // for strstr
+#endif // !CC_KERNEL
+
+CC_UNUSED static char *cc_strstr(const char *file) {
+#if CC_KERNEL
+    (void) file;
+#else
+    const char cc_char []="corecrypto";
+    char *p=strstr(file, cc_char);
+    if (p) return (p+strlen(cc_char)+1);
 #endif
+    return NULL;
+}
+
+#define __CC_DEBUG_REQUIRE_MESSAGE(name, assertion, label, message, file, line, value) \
+{char *___t = cc_strstr(file); cc_printf( "require: %s, %s%s:%d\n", assertion, (message!=0) ? message : "", ___t==NULL?file:___t, line);}
+
+#endif // CORECRYPTO_DEBUG_ENABLE_CC_REQUIRE_PRINTS
 
 #ifndef cc_require
-#if __CC_DEBUG_ASSERT_PRODUCTION_CODE
+#if (__CC_DEBUG_ASSERT_PRODUCTION_CODE) || (!CORECRYPTO_DEBUG_ENABLE_CC_REQUIRE_PRINTS)
+  #if defined(_WIN32) && defined (__clang__)
+    #define cc_require(assertion, exceptionLabel) \
+       do { \
+           if (!(assertion) ) { \
+              goto exceptionLabel; \
+           } \
+        } while ( 0 )
+  #else
     #define cc_require(assertion, exceptionLabel) \
         do { \
             if ( __builtin_expect(!(assertion), 0) ) { \
                 goto exceptionLabel; \
             } \
         } while ( 0 )
+ #endif
 #else
     #define cc_require(assertion, exceptionLabel) \
         do { \
             if ( __builtin_expect(!(assertion), 0) ) { \
-                __CC_DEBUG_ASSERT_MESSAGE(__CC_DEBUG_ASSERT_COMPONENT_NAME_STRING, \
+                __CC_DEBUG_REQUIRE_MESSAGE(__CC_DEBUG_ASSERT_COMPONENT_NAME_STRING, \
                     #assertion, #exceptionLabel, 0, __FILE__, __LINE__,  0); \
                 goto exceptionLabel; \
             } \
@@ -47,7 +74,20 @@ cc_printf( "CCAssertMacros: %s, %s file: %s, line: %d\n", assertion, (message!=0
 #endif
 
 #ifndef cc_require_action
-#if __CC_DEBUG_ASSERT_PRODUCTION_CODE
+#if __CC_DEBUG_ASSERT_PRODUCTION_CODE || (!CORECRYPTO_DEBUG_ENABLE_CC_REQUIRE_PRINTS)
+  #if defined(_WIN32) && defined(__clang__)
+    #define cc_require_action(assertion, exceptionLabel, action)                \
+        do                                                                      \
+        {                                                                       \
+            if (!(assertion))                                                   \
+            {                                                                   \
+                {                                                               \
+                    action;                                                     \
+                }                                                               \
+                goto exceptionLabel;                                            \
+            }                                                                   \
+        } while ( 0 )
+  #else
     #define cc_require_action(assertion, exceptionLabel, action)                \
         do                                                                      \
         {                                                                       \
@@ -59,13 +99,14 @@ cc_printf( "CCAssertMacros: %s, %s file: %s, line: %d\n", assertion, (message!=0
                 goto exceptionLabel;                                            \
             }                                                                   \
         } while ( 0 )
+  #endif
 #else
     #define cc_require_action(assertion, exceptionLabel, action)                \
         do                                                                      \
         {                                                                       \
             if ( __builtin_expect(!(assertion), 0) )                            \
             {                                                                   \
-                __CC_DEBUG_ASSERT_MESSAGE(                                      \
+                __CC_DEBUG_REQUIRE_MESSAGE(                                      \
                     __CC_DEBUG_ASSERT_COMPONENT_NAME_STRING,                    \
                     #assertion, #exceptionLabel, 0,   __FILE__, __LINE__, 0);   \
                 {                                                               \
@@ -77,4 +118,33 @@ cc_printf( "CCAssertMacros: %s, %s file: %s, line: %d\n", assertion, (message!=0
 #endif
 #endif
 
+#ifndef cc_require_or_return
+#if (__CC_DEBUG_ASSERT_PRODUCTION_CODE) || (!CORECRYPTO_DEBUG_ENABLE_CC_REQUIRE_PRINTS)
+  #if defined(_WIN32) && defined (__clang__)
+    #define cc_require_or_return(assertion, value)                                  \
+       do {                                                                         \
+           if (!(assertion) ) {                                                     \
+              return value;                                                         \
+           }                                                                        \
+        } while ( 0 )
+  #else
+    #define cc_require_or_return(assertion, value)                                  \
+        do {                                                                        \
+            if ( __builtin_expect(!(assertion), 0) ) {                              \
+                return value;                                                       \
+            }                                                                       \
+        } while ( 0 )
+ #endif
+#else
+    #define cc_require_or_return(assertion, value)                                  \
+        do {                                                                        \
+            if ( __builtin_expect(!(assertion), 0) ) {                              \
+                __CC_DEBUG_REQUIRE_MESSAGE(__CC_DEBUG_ASSERT_COMPONENT_NAME_STRING, \
+                    #assertion, #exceptionLabel, 0, __FILE__, __LINE__,  0);        \
+                return value;                                                       \
+            }                                                                       \
+        } while ( 0 )
+#endif
+#endif
+
 #endif /* _CORECRYPTO_CC_MACROS_H_ */