Project import generated by Copybara. NOKEYCHECK=True GitOrigin-RevId: 1ce9d651a8ee180ac250dfa11f66549eb2e44f48
diff --git a/opencflite.patches/opencflite-50.patch b/opencflite.patches/opencflite-50.patch new file mode 100644 index 0000000..10013ff --- /dev/null +++ b/opencflite.patches/opencflite-50.patch
@@ -0,0 +1,63 @@ +diff -aruN a/CFBase.c b/CFBase.c +--- a/CFBase.c 2009-02-19 16:25:06.000000000 -0800 ++++ b/CFBase.c 2010-10-01 14:31:38.286830645 -0700 +@@ -1062,4 +1062,20 @@ + #endif + #endif + +- ++#if defined(__arm__) ++__asm__ ( ++".text\n" ++" .align 2\n" ++#if DEPLOYMENT_TARGET_MACOSX ++".private_extern ___HALT\n" ++"___HALT:\n" ++#elif DEPLOYMENT_TARGET_LINUX ++".globl __HALT\n" ++"__HALT:\n" ++#else ++".globl ___HALT\n" ++"___HALT:\n" ++#endif ++" bkpt\n" ++); ++#endif /* defined(__arm__) */ +diff -aruN a/CFBase.h b/CFBase.h +--- a/CFBase.h 2009-02-19 16:25:06.000000000 -0800 ++++ b/CFBase.h 2010-10-01 14:30:23.799644073 -0700 +@@ -50,6 +50,10 @@ + #define __LITTLE_ENDIAN__ 1 + #endif + ++#if (defined(__ARMEL__) && !defined(__LITTLE_ENDIAN__)) ++ #define __LITTLE_ENDIAN__ 1 ++#endif ++ + #if !defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) + #error Do not know the endianess of this architecture + #endif +diff -aruN a/CFInternal.h b/CFInternal.h +--- a/CFInternal.h 2009-02-19 16:25:06.000000000 -0800 ++++ b/CFInternal.h 2010-10-01 14:05:48.926799829 -0700 +@@ -121,6 +121,8 @@ + #else + #error Compiler not supported + #endif ++#elif defined(__arm__) ++ #define HALT asm __volatile__("bkpt") + #endif + + #if defined(DEBUG) +diff -aruN a/include/AvailabilityMacros.h b/include/AvailabilityMacros.h +--- a/include/AvailabilityMacros.h 2009-02-04 10:42:19.000000000 -0800 ++++ b/include/AvailabilityMacros.h 2010-10-01 14:07:14.999780293 -0700 +@@ -84,7 +84,7 @@ + #ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ + #define MAC_OS_X_VERSION_MIN_REQUIRED __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ + #else +- #if __ppc64__ || __i386__ || __x86_64__ ++ #if __ppc64__ || __i386__ || __x86_64__ || __arm__ + #define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_4 + #else + #define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_1
diff --git a/opencflite.patches/opencflite-51.patch b/opencflite.patches/opencflite-51.patch new file mode 100644 index 0000000..77d173c --- /dev/null +++ b/opencflite.patches/opencflite-51.patch
@@ -0,0 +1,23 @@ +diff -aruN a/configure b/configure +--- a/configure 2009-03-10 23:44:34.000000000 -0700 ++++ b/configure 2010-10-20 13:12:19.000000000 -0700 +@@ -18528,6 +18528,8 @@ + fi + + UUID_saved_libs="${LIBS}" ++ UUID_saved_ldflags="${LDFLAGS}" ++ LDFLAGS="${UUID_LDFLAGS} ${LDFLAGS}" + LIBS="" + + +@@ -18603,8 +18605,10 @@ + + + UUID_LIBS="${UUID_LDFLAGS} ${LIBS}" ++ LDFLAGS="${UUID_saved_ldflags}" + LIBS="${UUID_saved_libs}" + unset UUID_saved_libs ++ unset UUID_saved_ldflags + + elif test "x${UUID_CONFIG}" != "x"; then + UUID_CPPFLAGS="`${UUID_CONFIG} --cflags`"
diff --git a/opencflite.patches/opencflite-52.patch b/opencflite.patches/opencflite-52.patch new file mode 100644 index 0000000..560f4a4 --- /dev/null +++ b/opencflite.patches/opencflite-52.patch
@@ -0,0 +1,1664 @@ +diff -aruN a/include/AssertMacros.h b/include/AssertMacros.h +--- a/include/AssertMacros.h 2009-02-03 21:28:26.000000000 -0800 ++++ b/include/AssertMacros.h 2009-04-13 10:08:23.000000000 -0700 +@@ -1,26 +1,51 @@ + /* +- File: AssertMacros.h +- +- Contains: This file defines structured error handling and assertion macros for +- programming in C. Originally used in QuickDraw GX and later enhanced. +- These macros are used throughout Apple's software. +- +- See "Living In an Exceptional World" by Sean Parent +- (develop, The Apple Technical Journal, Issue 11, August/September 1992) +- <http://developer.apple.com/dev/techsupport/develop/issue11toc.shtml> +- for the methodology behind these error handling and assertion macros. +- +- Copyright: © 2002 by Apple Computer, Inc., all rights reserved. +- +- Bugs?: For bug reports, consult the following page on +- the World Wide Web: ++ * Copyright (c) 2002-2008 by Apple Inc.. All rights reserved. ++ * ++ * @APPLE_LICENSE_HEADER_START@ ++ * ++ * This file contains Original Code and/or Modifications of Original Code ++ * as defined in and that are subject to the Apple Public Source License ++ * Version 2.0 (the 'License'). You may not use this file except in ++ * compliance with the License. Please obtain a copy of the License at ++ * http://www.opensource.apple.com/apsl/ and read it before using this ++ * file. ++ * ++ * The Original Code and all software distributed under the License are ++ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER ++ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ++ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. ++ * Please see the License for the specific language governing rights and ++ * limitations under the License. ++ * ++ * @APPLE_LICENSE_HEADER_END@ ++ */ ++ ++ ++/* ++ File: AssertMacros.h + +- http://developer.apple.com/bugreporter/ ++ Contains: This file defines structured error handling and assertion macros for ++ programming in C. Originally used in QuickDraw GX and later enhanced. ++ These macros are used throughout Apple's software. ++ ++ New code may not want to begin adopting these macros and instead use ++ existing language functionality. ++ ++ See "Living In an Exceptional World" by Sean Parent ++ (develop, The Apple Technical Journal, Issue 11, August/September 1992) ++ <http://developer.apple.com/dev/techsupport/develop/issue11toc.shtml> or ++ <http://www.mactech.com/articles/develop/issue_11/Parent_final.html> ++ for the methodology behind these error handling and assertion macros. ++ ++ Bugs?: For bug reports, consult the following page on ++ the World Wide Web: ++ ++ http://developer.apple.com/bugreporter/ + */ + #ifndef __ASSERTMACROS__ + #define __ASSERTMACROS__ + +- + /* + * Macro overview: + * +@@ -60,6 +85,27 @@ + * By default, all messages write to stderr. If you would like to write a custom + * error message formater, defined DEBUG_ASSERT_MESSAGE to your function name. + * ++ * Each individual macro will only be defined if it is not already defined, so ++ * you can redefine their behavior singly by providing your own definition before ++ * this file is included. ++ * ++ * If you define __ASSERTMACROS__ before this file is included, then nothing in ++ * this file will take effect. ++ * ++ * Prior to Mac OS X 10.6 the macro names used in this file conflicted with some ++ * user code, including libraries in boost and the proposed C++ standards efforts, ++ * and there was no way for a client of this header to resolve this conflict. Because ++ * of this, most of the macros have been changed so that they are prefixed with ++ * __ and contain at least one capital letter, which should alleviate the current ++ * and future conflicts. However, to allow current sources to continue to compile, ++ * compatibility macros are defined at the end with the old names. A tops script ++ * at the end of this file will convert all of the old macro names used in a directory ++ * to the new names. Clients are recommended to migrate over to these new macros as ++ * they update their sources because a future release of Mac OS X will remove the ++ * old macro definitions ( without the double-underscore prefix ). Clients who ++ * want to compile without the old macro definitions can define the macro ++ * __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES to 0 before this file is ++ * included. + */ + + +@@ -165,9 +211,9 @@ + */ + #ifndef DEBUG_ASSERT_MESSAGE + #ifdef KERNEL +- #include <syslog.h> ++ #include <libkern/libkern.h> + #define DEBUG_ASSERT_MESSAGE(name, assertion, label, message, file, line, value) \ +- syslog(LOG_ERR, "AssertMacros: %s, %s file: %s, line: %d\n", assertion, (message!=0) ? message : "", file, line); ++ printf( "AssertMacros: %s, %s file: %s, line: %d\n", assertion, (message!=0) ? message : "", file, line); + #else + #include <stdio.h> + #define DEBUG_ASSERT_MESSAGE(name, assertion, label, message, file, line, value) \ +@@ -180,7 +226,7 @@ + + + /* +- * debug_string(message) ++ * __Debug_String(message) + * + * Summary: + * Production builds: does nothing and produces no code. +@@ -193,26 +239,27 @@ + * The C string to display. + * + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define debug_string(message) +-#else +- #define debug_string(message) \ +- do \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- "", \ +- 0, \ +- message, \ +- __FILE__, \ +- __LINE__, \ +- 0); \ +- } while ( 0 ) ++#ifndef __Debug_String ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Debug_String(message) ++ #else ++ #define __Debug_String(message) \ ++ do \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ "", \ ++ 0, \ ++ message, \ ++ __FILE__, \ ++ __LINE__, \ ++ 0); \ ++ } while ( 0 ) ++ #endif + #endif + +- + /* +- * check(assertion) ++ * __Check(assertion) + * + * Summary: + * Production builds: does nothing and produces no code. +@@ -225,32 +272,29 @@ + * assertion: + * The assertion expression. + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define check(assertion) +-#else +- #define check(assertion) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #assertion, \ +- 0, \ +- 0, \ +- __FILE__, \ +- __LINE__, \ +- 0); \ +- } \ +- } while ( 0 ) ++#ifndef __Check ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Check(assertion) ++ #else ++ #define __Check(assertion) \ ++ do \ ++ { \ ++ if ( __builtin_expect(!(assertion), 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #assertion, 0, 0, __FILE__, __LINE__, 0 ); \ ++ } \ ++ } while ( 0 ) ++ #endif + #endif + +-#define ncheck(assertion) \ +- check(!(assertion)) +- ++#ifndef __nCheck ++ #define __nCheck(assertion) __Check(!(assertion)) ++#endif + + /* +- * check_string(assertion, message) ++ * __Check_String(assertion, message) + * + * Summary: + * Production builds: does nothing and produces no code. +@@ -266,32 +310,29 @@ + * message: + * The C string to display. + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define check_string(assertion, message) +-#else +- #define check_string(assertion, message) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #assertion, \ +- 0, \ +- message, \ +- __FILE__, \ +- __LINE__, \ +- 0); \ +- } \ +- } while ( 0 ) ++#ifndef __Check_String ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Check_String(assertion, message) ++ #else ++ #define __Check_String(assertion, message) \ ++ do \ ++ { \ ++ if ( __builtin_expect(!(assertion), 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #assertion, 0, message, __FILE__, __LINE__, 0 ); \ ++ } \ ++ } while ( 0 ) ++ #endif + #endif + +-#define ncheck_string(assertion, message) \ +- check_string(!(assertion), message) +- ++#ifndef __nCheck_String ++ #define __nCheck_String(assertion, message) __Check_String(!(assertion), message) ++#endif + + /* +- * check_noerr(errorCode) ++ * __Check_noErr(errorCode) + * + * Summary: + * Production builds: does nothing and produces no code. +@@ -304,30 +345,26 @@ + * errorCode: + * The errorCode expression to compare with 0. + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define check_noerr(errorCode) +-#else +- #define check_noerr(errorCode) \ +- do \ +- { \ +- int evalOnceErrorCode = (errorCode); \ +- if ( 0 != evalOnceErrorCode ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #errorCode " == 0 ", \ +- 0, \ +- 0, \ +- __FILE__, \ +- __LINE__, \ +- evalOnceErrorCode); \ +- } \ +- } while ( 0 ) ++#ifndef __Check_noErr ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Check_noErr(errorCode) ++ #else ++ #define __Check_noErr(errorCode) \ ++ do \ ++ { \ ++ long evalOnceErrorCode = (errorCode); \ ++ if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #errorCode " == 0 ", 0, 0, __FILE__, __LINE__, evalOnceErrorCode ); \ ++ } \ ++ } while ( 0 ) ++ #endif + #endif + +- + /* +- * check_noerr_string(errorCode, message) ++ * __Check_noErr_String(errorCode, message) + * + * Summary: + * Production builds: check_noerr_string() does nothing and produces +@@ -344,30 +381,26 @@ + * message: + * The C string to display. + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define check_noerr_string(errorCode, message) +-#else +- #define check_noerr_string(errorCode, message) \ +- do \ +- { \ +- int evalOnceErrorCode = (errorCode); \ +- if ( 0 != evalOnceErrorCode ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #errorCode " == 0 ", \ +- 0, \ +- message, \ +- __FILE__, \ +- __LINE__, \ +- evalOnceErrorCode); \ +- } \ +- } while ( 0 ) ++#ifndef __Check_noErr_String ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Check_noErr_String(errorCode, message) ++ #else ++ #define __Check_noErr_String(errorCode, message) \ ++ do \ ++ { \ ++ long evalOnceErrorCode = (errorCode); \ ++ if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #errorCode " == 0 ", 0, message, __FILE__, __LINE__, evalOnceErrorCode ); \ ++ } \ ++ } while ( 0 ) ++ #endif + #endif + +- + /* +- * verify(assertion) ++ * __Verify(assertion) + * + * Summary: + * Production builds: evaluate the assertion expression, but ignore +@@ -381,38 +414,35 @@ + * assertion: + * The assertion expression. + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define verify(assertion) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- } \ +- } while ( 0 ) +-#else +- #define verify(assertion) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #assertion, \ +- 0, \ +- 0, \ +- __FILE__, \ +- __LINE__, \ +- 0); \ +- } \ +- } while ( 0 ) ++#ifndef __Verify ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Verify(assertion) \ ++ do \ ++ { \ ++ if ( !(assertion) ) \ ++ { \ ++ } \ ++ } while ( 0 ) ++ #else ++ #define __Verify(assertion) \ ++ do \ ++ { \ ++ if ( __builtin_expect(!(assertion), 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #assertion, 0, 0, __FILE__, __LINE__, 0 ); \ ++ } \ ++ } while ( 0 ) ++ #endif + #endif + +-#define nverify(assertion) \ +- verify(!(assertion)) +- ++#ifndef __nVerify ++ #define __nVerify(assertion) __Verify(!(assertion)) ++#endif + + /* +- * verify_string(assertion, message) ++ * __Verify_String(assertion, message) + * + * Summary: + * Production builds: evaluate the assertion expression, but ignore +@@ -429,38 +459,35 @@ + * message: + * The C string to display. + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define verify_string(assertion, message) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- } \ +- } while ( 0 ) +-#else +- #define verify_string(assertion, message) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #assertion, \ +- 0, \ +- message, \ +- __FILE__, \ +- __LINE__, \ +- 0); \ +- } \ +- } while ( 0 ) ++#ifndef __Verify_String ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Verify_String(assertion, message) \ ++ do \ ++ { \ ++ if ( !(assertion) ) \ ++ { \ ++ } \ ++ } while ( 0 ) ++ #else ++ #define __Verify_String(assertion, message) \ ++ do \ ++ { \ ++ if ( __builtin_expect(!(assertion), 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #assertion, 0, message, __FILE__, __LINE__, 0 ); \ ++ } \ ++ } while ( 0 ) ++ #endif + #endif + +-#define nverify_string(assertion, message) \ +- verify_string(!(assertion), message) +- ++#ifndef __nVerify_String ++ #define __nVerify_String(assertion, message) __Verify_String(!(assertion), message) ++#endif + + /* +- * verify_noerr(errorCode) ++ * __Verify_noErr(errorCode) + * + * Summary: + * Production builds: evaluate the errorCode expression, but ignore +@@ -474,36 +501,32 @@ + * errorCode: + * The expression to compare to 0. + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define verify_noerr(errorCode) \ +- do \ +- { \ +- if ( 0 != (errorCode) ) \ +- { \ +- } \ +- } while ( 0 ) +-#else +- #define verify_noerr(errorCode) \ +- do \ +- { \ +- int evalOnceErrorCode = (errorCode); \ +- if ( 0 != evalOnceErrorCode ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #errorCode " == 0 ", \ +- 0, \ +- 0, \ +- __FILE__, \ +- __LINE__, \ +- evalOnceErrorCode); \ +- } \ +- } while ( 0 ) ++#ifndef __Verify_noErr ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Verify_noErr(errorCode) \ ++ do \ ++ { \ ++ if ( 0 != (errorCode) ) \ ++ { \ ++ } \ ++ } while ( 0 ) ++ #else ++ #define __Verify_noErr(errorCode) \ ++ do \ ++ { \ ++ long evalOnceErrorCode = (errorCode); \ ++ if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #errorCode " == 0 ", 0, 0, __FILE__, __LINE__, evalOnceErrorCode ); \ ++ } \ ++ } while ( 0 ) ++ #endif + #endif + +- + /* +- * verify_noerr_string(errorCode, message) ++ * __Verify_noErr_String(errorCode, message) + * + * Summary: + * Production builds: evaluate the errorCode expression, but ignore +@@ -520,36 +543,71 @@ + * message: + * The C string to display. + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define verify_noerr_string(errorCode, message) \ +- do \ +- { \ +- if ( 0 != (errorCode) ) \ +- { \ +- } \ +- } while ( 0 ) +-#else +- #define verify_noerr_string(errorCode, message) \ +- do \ +- { \ +- int evalOnceErrorCode = (errorCode); \ +- if ( 0 != evalOnceErrorCode ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #errorCode " == 0 ", \ +- 0, \ +- message, \ +- __FILE__, \ +- __LINE__, \ +- evalOnceErrorCode); \ +- } \ +- } while ( 0 ) ++#ifndef __Verify_noErr_String ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Verify_noErr_String(errorCode, message) \ ++ do \ ++ { \ ++ if ( 0 != (errorCode) ) \ ++ { \ ++ } \ ++ } while ( 0 ) ++ #else ++ #define __Verify_noErr_String(errorCode, message) \ ++ do \ ++ { \ ++ long evalOnceErrorCode = (errorCode); \ ++ if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #errorCode " == 0 ", 0, message, __FILE__, __LINE__, evalOnceErrorCode ); \ ++ } \ ++ } while ( 0 ) ++ #endif + #endif + ++/* ++ * __Verify_noErr_Action(errorCode, action) ++ * ++ * Summary: ++ * Production builds: if the errorCode expression does not equal 0 (noErr), ++ * execute the action statement or compound statement (block). ++ * ++ * Non-production builds: if the errorCode expression does not equal 0 (noErr), ++ * call DEBUG_ASSERT_MESSAGE and then execute the action statement or compound ++ * statement (block). ++ * ++ * Parameters: ++ * ++ * errorCode: ++ * The expression to compare to 0. ++ * ++ * action: ++ * The statement or compound statement (block). ++ */ ++#ifndef __Verify_noErr_Action ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Verify_noErr_Action(errorCode, action) \ ++ if ( 0 != (errorCode) ) { \ ++ action; \ ++ } \ ++ else do {} while (0) ++ #else ++ #define __Verify_noErr_Action(errorCode, action) \ ++ long evalOnceErrorCode = (errorCode); \ ++ if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #errorCode " == 0 ", 0, 0, __FILE__, __LINE__, 0 ); \ ++ action; \ ++ } \ ++ else do {} while (0) ++ #endif ++#endif + + /* +- * verify_action(assertion, action) ++ * __Verify_Action(assertion, action) + * + * Summary: + * Production builds: if the assertion expression evaluates to false, +@@ -567,37 +625,27 @@ + * action: + * The statement or compound statement (block). + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define verify_action(assertion, action) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- action; \ +- } \ +- } while ( 0 ) +-#else +- #define verify_action(assertion, action) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #assertion, \ +- 0, \ +- 0, \ +- __FILE__, \ +- __LINE__, \ +- 0); \ +- { action; } \ +- } \ +- } while ( 0 ) ++#ifndef __Verify_Action ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Verify_Action(assertion, action) \ ++ if ( __builtin_expect(!(assertion), 0) ) { \ ++ action; \ ++ } \ ++ else do {} while (0) ++ #else ++ #define __Verify_Action(assertion, action) \ ++ if ( __builtin_expect(!(assertion), 0) ) { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #assertion, 0, 0, __FILE__, __LINE__, 0 ); \ ++ action; \ ++ } \ ++ else do {} while (0) ++ #endif + #endif + +- + /* +- * require(assertion, exceptionLabel) ++ * __Require(assertion, exceptionLabel) + * + * Summary: + * Production builds: if the assertion expression evaluates to false, +@@ -614,40 +662,36 @@ + * exceptionLabel: + * The label. + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define require(assertion, exceptionLabel) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) +-#else +- #define require(assertion, exceptionLabel) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #assertion, \ +- #exceptionLabel, \ +- 0, \ +- __FILE__, \ +- __LINE__, \ +- 0); \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) ++#ifndef __Require ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Require(assertion, exceptionLabel) \ ++ do \ ++ { \ ++ if ( __builtin_expect(!(assertion), 0) ) \ ++ { \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #else ++ #define __Require(assertion, exceptionLabel) \ ++ do \ ++ { \ ++ if ( __builtin_expect(!(assertion), 0) ) { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #assertion, #exceptionLabel, 0, __FILE__, __LINE__, 0); \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #endif + #endif + +-#define nrequire(assertion, exceptionLabel) \ +- require(!(assertion), exceptionLabel) +- ++#ifndef __nRequire ++ #define __nRequire(assertion, exceptionLabel) __Require(!(assertion), exceptionLabel) ++#endif + + /* +- * require_action(assertion, exceptionLabel, action) ++ * __Require_Action(assertion, exceptionLabel, action) + * + * Summary: + * Production builds: if the assertion expression evaluates to false, +@@ -669,46 +713,44 @@ + * action: + * The statement or compound statement (block). + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define require_action(assertion, exceptionLabel, action) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- { \ +- action; \ +- } \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) +-#else +- #define require_action(assertion, exceptionLabel, action) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #assertion, \ +- #exceptionLabel, \ +- 0, \ +- __FILE__, \ +- __LINE__, \ +- 0); \ +- { \ +- action; \ +- } \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) ++#ifndef __Require_Action ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Require_Action(assertion, exceptionLabel, action) \ ++ do \ ++ { \ ++ if ( __builtin_expect(!(assertion), 0) ) \ ++ { \ ++ { \ ++ action; \ ++ } \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #else ++ #define __Require_Action(assertion, exceptionLabel, action) \ ++ do \ ++ { \ ++ if ( __builtin_expect(!(assertion), 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #assertion, #exceptionLabel, 0, __FILE__, __LINE__, 0); \ ++ { \ ++ action; \ ++ } \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #endif ++#endif ++ ++#ifndef __nRequire_Action ++ #define __nRequire_Action(assertion, exceptionLabel, action) \ ++ __Require_Action(!(assertion), exceptionLabel, action) + #endif + +-#define nrequire_action(assertion, exceptionLabel, action) \ +- require_action(!(assertion), exceptionLabel, action) +- +- + /* +- * require_quiet(assertion, exceptionLabel) ++ * __Require_Quiet(assertion, exceptionLabel) + * + * Summary: + * If the assertion expression evaluates to false, goto exceptionLabel. +@@ -721,21 +763,23 @@ + * exceptionLabel: + * The label. + */ +-#define require_quiet(assertion, exceptionLabel) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) +- +-#define nrequire_quiet(assertion, exceptionLabel) \ +- require_quiet(!(assertion), exceptionLabel) ++#ifndef __Require_Quiet ++ #define __Require_Quiet(assertion, exceptionLabel) \ ++ do \ ++ { \ ++ if ( __builtin_expect(!(assertion), 0) ) \ ++ { \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++#endif + ++#ifndef __nRequire_Quiet ++ #define __nRequire_Quiet(assertion, exceptionLabel) __Require_Quiet(!(assertion), exceptionLabel) ++#endif + + /* +- * require_action_quiet(assertion, exceptionLabel, action) ++ * __Require_Action_Quiet(assertion, exceptionLabel, action) + * + * Summary: + * If the assertion expression evaluates to false, execute the action +@@ -752,24 +796,27 @@ + * action: + * The statement or compound statement (block). + */ +-#define require_action_quiet(assertion, exceptionLabel, action) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- { \ +- action; \ +- } \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) +- +-#define nrequire_action_quiet(assertion, exceptionLabel, action) \ +- require_action_quiet(!(assertion), exceptionLabel, action) +- ++#ifndef __Require_Action_Quiet ++ #define __Require_Action_Quiet(assertion, exceptionLabel, action) \ ++ do \ ++ { \ ++ if ( __builtin_expect(!(assertion), 0) ) \ ++ { \ ++ { \ ++ action; \ ++ } \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++#endif ++ ++#ifndef __nRequire_Action_Quiet ++ #define __nRequire_Action_Quiet(assertion, exceptionLabel, action) \ ++ __Require_Action_Quiet(!(assertion), exceptionLabel, action) ++#endif + + /* +- * require_string(assertion, exceptionLabel, message) ++ * __Require_String(assertion, exceptionLabel, message) + * + * Summary: + * Production builds: if the assertion expression evaluates to false, +@@ -789,40 +836,38 @@ + * message: + * The C string to display. + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define require_string(assertion, exceptionLabel, message) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) +-#else +- #define require_string(assertion, exceptionLabel, message) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #assertion, \ +- #exceptionLabel, \ +- message, \ +- __FILE__, \ +- __LINE__, \ +- 0); \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) ++#ifndef __Require_String ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Require_String(assertion, exceptionLabel, message) \ ++ do \ ++ { \ ++ if ( __builtin_expect(!(assertion), 0) ) \ ++ { \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #else ++ #define __Require_String(assertion, exceptionLabel, message) \ ++ do \ ++ { \ ++ if ( __builtin_expect(!(assertion), 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #assertion, #exceptionLabel, message, __FILE__, __LINE__, 0); \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #endif ++#endif ++ ++#ifndef __nRequire_String ++ #define __nRequire_String(assertion, exceptionLabel, string) \ ++ __Require_String(!(assertion), exceptionLabel, string) + #endif + +-#define nrequire_string(assertion, exceptionLabel, string) \ +- require_string(!(assertion), exceptionLabel, string) +- +- + /* +- * require_action_string(assertion, exceptionLabel, action, message) ++ * __Require_Action_String(assertion, exceptionLabel, action, message) + * + * Summary: + * Production builds: if the assertion expression evaluates to false, +@@ -847,46 +892,44 @@ + * message: + * The C string to display. + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define require_action_string(assertion, exceptionLabel, action, message) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- { \ +- action; \ +- } \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) +-#else +- #define require_action_string(assertion, exceptionLabel, action, message) \ +- do \ +- { \ +- if ( !(assertion) ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #assertion, \ +- #exceptionLabel, \ +- message, \ +- __FILE__, \ +- __LINE__, \ +- 0); \ +- { \ +- action; \ +- } \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) ++#ifndef __Require_Action_String ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Require_Action_String(assertion, exceptionLabel, action, message) \ ++ do \ ++ { \ ++ if ( __builtin_expect(!(assertion), 0) ) \ ++ { \ ++ { \ ++ action; \ ++ } \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #else ++ #define __Require_Action_String(assertion, exceptionLabel, action, message) \ ++ do \ ++ { \ ++ if ( __builtin_expect(!(assertion), 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #assertion, #exceptionLabel, message, __FILE__, __LINE__, 0); \ ++ { \ ++ action; \ ++ } \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #endif ++#endif ++ ++#ifndef __nRequire_Action_String ++ #define __nRequire_Action_String(assertion, exceptionLabel, action, message) \ ++ __Require_Action_String(!(assertion), exceptionLabel, action, message) + #endif + +-#define nrequire_action_string(assertion, exceptionLabel, action, message) \ +- require_action_string(!(assertion), exceptionLabel, action, message) +- +- + /* +- * require_noerr(errorCode, exceptionLabel) ++ * __Require_noErr(errorCode, exceptionLabel) + * + * Summary: + * Production builds: if the errorCode expression does not equal 0 (noErr), +@@ -903,37 +946,34 @@ + * exceptionLabel: + * The label. + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define require_noerr(errorCode, exceptionLabel) \ +- do \ +- { \ +- if ( 0 != (errorCode) ) \ +- { \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) +-#else +- #define require_noerr(errorCode, exceptionLabel) \ +- do \ +- { \ +- int evalOnceErrorCode = (errorCode); \ +- if ( 0 != evalOnceErrorCode ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #errorCode " == 0 ", \ +- #exceptionLabel, \ +- 0, \ +- __FILE__, \ +- __LINE__, \ +- evalOnceErrorCode); \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) ++#ifndef __Require_noErr ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Require_noErr(errorCode, exceptionLabel) \ ++ do \ ++ { \ ++ if ( __builtin_expect(0 != (errorCode), 0) ) \ ++ { \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #else ++ #define __Require_noErr(errorCode, exceptionLabel) \ ++ do \ ++ { \ ++ long evalOnceErrorCode = (errorCode); \ ++ if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #errorCode " == 0 ", #exceptionLabel, 0, __FILE__, __LINE__, evalOnceErrorCode); \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #endif + #endif + + /* +- * require_noerr_action(errorCode, exceptionLabel, action) ++ * __Require_noErr_Action(errorCode, exceptionLabel, action) + * + * Summary: + * Production builds: if the errorCode expression does not equal 0 (noErr), +@@ -955,44 +995,40 @@ + * action: + * The statement or compound statement (block). + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define require_noerr_action(errorCode, exceptionLabel, action) \ +- do \ +- { \ +- if ( 0 != (errorCode) ) \ +- { \ +- { \ +- action; \ +- } \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) +-#else +- #define require_noerr_action(errorCode, exceptionLabel, action) \ +- do \ +- { \ +- int evalOnceErrorCode = (errorCode); \ +- if ( 0 != evalOnceErrorCode ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #errorCode " == 0 ", \ +- #exceptionLabel, \ +- 0, \ +- __FILE__, \ +- __LINE__, \ +- evalOnceErrorCode); \ +- { \ +- action; \ +- } \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) ++#ifndef __Require_noErr_Action ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Require_noErr_Action(errorCode, exceptionLabel, action) \ ++ do \ ++ { \ ++ if ( __builtin_expect(0 != (errorCode), 0) ) \ ++ { \ ++ { \ ++ action; \ ++ } \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #else ++ #define __Require_noErr_Action(errorCode, exceptionLabel, action) \ ++ do \ ++ { \ ++ long evalOnceErrorCode = (errorCode); \ ++ if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #errorCode " == 0 ", #exceptionLabel, 0, __FILE__, __LINE__, evalOnceErrorCode); \ ++ { \ ++ action; \ ++ } \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #endif + #endif + +- + /* +- * require_noerr_quiet(errorCode, exceptionLabel) ++ * __Require_noErr_Quiet(errorCode, exceptionLabel) + * + * Summary: + * If the errorCode expression does not equal 0 (noErr), +@@ -1006,18 +1042,19 @@ + * exceptionLabel: + * The label. + */ +-#define require_noerr_quiet(errorCode, exceptionLabel) \ +- do \ +- { \ +- if ( 0 != (errorCode) ) \ +- { \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) +- ++#ifndef __Require_noErr_Quiet ++ #define __Require_noErr_Quiet(errorCode, exceptionLabel) \ ++ do \ ++ { \ ++ if ( __builtin_expect(0 != (errorCode), 0) ) \ ++ { \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++#endif + + /* +- * require_noerr_action_quiet(errorCode, exceptionLabel, action) ++ * __Require_noErr_Action_Quiet(errorCode, exceptionLabel, action) + * + * Summary: + * If the errorCode expression does not equal 0 (noErr), +@@ -1035,21 +1072,22 @@ + * action: + * The statement or compound statement (block). + */ +-#define require_noerr_action_quiet(errorCode, exceptionLabel, action) \ +- do \ +- { \ +- if ( 0 != (errorCode) ) \ +- { \ +- { \ +- action; \ +- } \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) +- ++#ifndef __Require_noErr_Action_Quiet ++ #define __Require_noErr_Action_Quiet(errorCode, exceptionLabel, action) \ ++ do \ ++ { \ ++ if ( __builtin_expect(0 != (errorCode), 0) ) \ ++ { \ ++ { \ ++ action; \ ++ } \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++#endif + + /* +- * require_noerr_string(errorCode, exceptionLabel, message) ++ * __Require_noErr_String(errorCode, exceptionLabel, message) + * + * Summary: + * Production builds: if the errorCode expression does not equal 0 (noErr), +@@ -1069,38 +1107,34 @@ + * message: + * The C string to display. + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define require_noerr_string(errorCode, exceptionLabel, message) \ +- do \ +- { \ +- if ( 0 != (errorCode) ) \ +- { \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) +-#else +- #define require_noerr_string(errorCode, exceptionLabel, message) \ +- do \ +- { \ +- int evalOnceErrorCode = (errorCode); \ +- if ( 0 != evalOnceErrorCode ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #errorCode " == 0 ", \ +- #exceptionLabel, \ +- message, \ +- __FILE__, \ +- __LINE__, \ +- evalOnceErrorCode); \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) ++#ifndef __Require_noErr_String ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Require_noErr_String(errorCode, exceptionLabel, message) \ ++ do \ ++ { \ ++ if ( __builtin_expect(0 != (errorCode), 0) ) \ ++ { \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #else ++ #define __Require_noErr_String(errorCode, exceptionLabel, message) \ ++ do \ ++ { \ ++ long evalOnceErrorCode = (errorCode); \ ++ if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #errorCode " == 0 ", #exceptionLabel, message, __FILE__, __LINE__, evalOnceErrorCode); \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #endif + #endif + +- + /* +- * require_noerr_action_string(errorCode, exceptionLabel, action, message) ++ * __Require_noErr_Action_String(errorCode, exceptionLabel, action, message) + * + * Summary: + * Production builds: if the errorCode expression does not equal 0 (noErr), +@@ -1125,41 +1159,270 @@ + * message: + * The C string to display. + */ +-#if DEBUG_ASSERT_PRODUCTION_CODE +- #define require_noerr_action_string(errorCode, exceptionLabel, action, message)\ +- do \ +- { \ +- if ( 0 != (errorCode) ) \ +- { \ +- { \ +- action; \ +- } \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) +-#else +- #define require_noerr_action_string(errorCode, exceptionLabel, action, message) \ +- do \ +- { \ +- int evalOnceErrorCode = (errorCode); \ +- if ( 0 != evalOnceErrorCode ) \ +- { \ +- DEBUG_ASSERT_MESSAGE( \ +- DEBUG_ASSERT_COMPONENT_NAME_STRING, \ +- #errorCode " == 0 ", \ +- #exceptionLabel, \ +- message, \ +- __FILE__, \ +- __LINE__, \ +- evalOnceErrorCode); \ +- { \ +- action; \ +- } \ +- goto exceptionLabel; \ +- } \ +- } while ( 0 ) +-#endif ++#ifndef __Require_noErr_Action_String ++ #if DEBUG_ASSERT_PRODUCTION_CODE ++ #define __Require_noErr_Action_String(errorCode, exceptionLabel, action, message) \ ++ do \ ++ { \ ++ if ( __builtin_expect(0 != (errorCode), 0) ) \ ++ { \ ++ { \ ++ action; \ ++ } \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #else ++ #define __Require_noErr_Action_String(errorCode, exceptionLabel, action, message) \ ++ do \ ++ { \ ++ long evalOnceErrorCode = (errorCode); \ ++ if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ ++ { \ ++ DEBUG_ASSERT_MESSAGE( \ ++ DEBUG_ASSERT_COMPONENT_NAME_STRING, \ ++ #errorCode " == 0 ", #exceptionLabel, message, __FILE__, __LINE__, evalOnceErrorCode); \ ++ { \ ++ action; \ ++ } \ ++ goto exceptionLabel; \ ++ } \ ++ } while ( 0 ) ++ #endif ++#endif ++ ++/* ++ * __Check_Compile_Time(expr) ++ * ++ * Summary: ++ * any build: if the expression is not true, generated a compile time error. ++ * ++ * Parameters: ++ * ++ * expr: ++ * The compile time expression that should evaluate to non-zero. ++ * ++ * Discussion: ++ * This declares an array with a size that is determined by a compile-time expression. ++ * If false, it declares a negatively sized array, which generates a compile-time error. ++ * ++ * Examples: ++ * __Check_Compile_Time( sizeof( int ) == 4 ); ++ * __Check_Compile_Time( offsetof( MyStruct, myField ) == 4 ); ++ * __Check_Compile_Time( ( kMyBufferSize % 512 ) == 0 ); ++ * ++ * Note: This only works with compile-time expressions. ++ * Note: This only works in places where extern declarations are allowed (e.g. global scope). ++ */ ++#ifndef __Check_Compile_Time ++ #ifdef __GNUC__ ++ #define __Check_Compile_Time( expr ) \ ++ extern int compile_time_assert_failed[ ( expr ) ? 1 : -1 ] __attribute__( ( unused ) ) ++ #else ++ #define __Check_Compile_Time( expr ) \ ++ extern int compile_time_assert_failed[ ( expr ) ? 1 : -1 ] ++ #endif ++#endif ++ ++/* ++ * For time immemorial, Mac OS X has defined version of most of these macros without the __ prefix, which ++ * could collide with similarly named functions or macros in user code, including new functionality in ++ * Boost and the C++ standard library. ++ * ++ * A future release of Mac OS X will no longer do this, and will require that clients move to the ++ * new macros as defined above. However, in the interim both the new and old macros will work, unless ++ * clients define a macro __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES before this file is included ++ * in their compilations. Clients who do not want the older macros defined can accomplish this by adding ++ * #define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 ++ * at the top of their sources, or my adding -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0 to the ++ * gcc compilation options. ++ * ++ * To aid users of these macros in converting their sources, the following tops script will convert usages ++ * of the old macros into the new equivalents. To do so, in Terminal go into the directory containing the ++ * sources to be converted and run this command. ++ * ++ find . -name '*.[c|cc|cp|cpp|m|mm|h]' -print0 | xargs -0 tops -verbose \ ++ replace "check(<b args>)" with "__Check(<args>)" \ ++ replace "check_noerr(<b args>)" with "__Check_noErr(<args>)" \ ++ replace "check_noerr_string(<b args>)" with "__Check_noErr_String(<args>)" \ ++ replace "check_string(<b args>)" with "__Check_String(<args>)" \ ++ replace "require(<b args>)" with "__Require(<args>)" \ ++ replace "require_action(<b args>)" with "__Require_Action(<args>)" \ ++ replace "require_action_string(<b args>)" with "__Require_Action_String(<args>)" \ ++ replace "require_noerr(<b args>)" with "__Require_noErr(<args>)" \ ++ replace "require_noerr_action(<b args>)" with "__Require_noErr_Action(<args>)" \ ++ replace "require_noerr_action_string(<b args>)" with "__Require_noErr_Action_String(<args>)" \ ++ replace "require_noerr_string(<b args>)" with "__Require_noErr_String(<args>)" \ ++ replace "require_string(<b args>)" with "__Require_String(<args>)" \ ++ replace "verify(<b args>)" with "__Verify(<args>)" \ ++ replace "verify_action(<b args>)" with "__Verify_Action(<args>)" \ ++ replace "verify_noerr(<b args>)" with "__Verify_noErr(<args>)" \ ++ replace "verify_noerr_action(<b args>)" with "__Verify_noErr_Action(<args>)" \ ++ replace "verify_noerr_string(<b args>)" with "__Verify_noErr_String(<args>)" \ ++ replace "verify_string(<b args>)" with "__Verify_String(<args>)" \ ++ replace "ncheck(<b args>)" with "__nCheck(<args>)" \ ++ replace "ncheck_string(<b args>)" with "__nCheck_String(<args>)" \ ++ replace "nrequire(<b args>)" with "__nRequire(<args>)" \ ++ replace "nrequire_action(<b args>)" with "__nRequire_Action(<args>)" \ ++ replace "nrequire_action_quiet(<b args>)" with "__nRequire_Action_Quiet(<args>)" \ ++ replace "nrequire_action_string(<b args>)" with "__nRequire_Action_String(<args>)" \ ++ replace "nrequire_quiet(<b args>)" with "__nRequire_Quiet(<args>)" \ ++ replace "nrequire_string(<b args>)" with "__nRequire_String(<args>)" \ ++ replace "nverify(<b args>)" with "__nVerify(<args>)" \ ++ replace "nverify_string(<b args>)" with "__nVerify_String(<args>)" \ ++ replace "require_action_quiet(<b args>)" with "__Require_Action_Quiet(<args>)" \ ++ replace "require_noerr_action_quiet(<b args>)" with "__Require_noErr_Action_Quiet(<args>)" \ ++ replace "require_noerr_quiet(<b args>)" with "__Require_noErr_Quiet(<args>)" \ ++ replace "require_quiet(<b args>)" with "__Require_Quiet(<args>)" \ ++ replace "check_compile_time(<b args>)" with "__Check_Compile_Time(<args>)" \ ++ replace "debug_string(<b args>)" with "__Debug_String(<args>)" ++ * ++ */ ++ ++#ifndef __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES ++ /* If we haven't set this yet, it defaults to on. In the next release, this will default to off. */ ++ #define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 1 ++#endif ++ ++#if __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES ++ ++ #ifndef check ++ #define check(assertion) __Check(assertion) ++ #endif ++ ++ #ifndef check_noerr ++ #define check_noerr(errorCode) __Check_noErr(errorCode) ++ #endif ++ ++ #ifndef check_noerr_string ++ #define check_noerr_string(errorCode, message) __Check_noErr_String(errorCode, message) ++ #endif ++ ++ #ifndef check_string ++ #define check_string(assertion, message) __Check_String(assertion, message) ++ #endif ++ ++ #ifndef require ++ #define require(assertion, exceptionLabel) __Require(assertion, exceptionLabel) ++ #endif ++ ++ #ifndef require_action ++ #define require_action(assertion, exceptionLabel, action) __Require_Action(assertion, exceptionLabel, action) ++ #endif ++ ++ #ifndef require_action_string ++ #define require_action_string(assertion, exceptionLabel, action, message) __Require_Action_String(assertion, exceptionLabel, action, message) ++ #endif ++ ++ #ifndef require_noerr ++ #define require_noerr(errorCode, exceptionLabel) __Require_noErr(errorCode, exceptionLabel) ++ #endif ++ ++ #ifndef require_noerr_action ++ #define require_noerr_action(errorCode, exceptionLabel, action) __Require_noErr_Action(errorCode, exceptionLabel, action) ++ #endif ++ ++ #ifndef require_noerr_action_string ++ #define require_noerr_action_string(errorCode, exceptionLabel, action, message) __Require_noErr_Action_String(errorCode, exceptionLabel, action, message) ++ #endif ++ ++ #ifndef require_noerr_string ++ #define require_noerr_string(errorCode, exceptionLabel, message) __Require_noErr_String(errorCode, exceptionLabel, message) ++ #endif ++ ++ #ifndef require_string ++ #define require_string(assertion, exceptionLabel, message) __Require_String(assertion, exceptionLabel, message) ++ #endif ++ ++ #ifndef verify ++ #define verify(assertion) __Verify(assertion) ++ #endif ++ ++ #ifndef verify_action ++ #define verify_action(assertion, action) __Verify_Action(assertion, action) ++ #endif ++ ++ #ifndef verify_noerr ++ #define verify_noerr(errorCode) __Verify_noErr(errorCode) ++ #endif ++ ++ #ifndef verify_noerr_action ++ #define verify_noerr_action(errorCode, action) __Verify_noErr_Action(errorCode, action) ++ #endif ++ ++ #ifndef verify_noerr_string ++ #define verify_noerr_string(errorCode, message) __Verify_noErr_String(errorCode, message) ++ #endif ++ ++ #ifndef verify_string ++ #define verify_string(assertion, message) __Verify_String(assertion, message) ++ #endif ++ ++ #ifndef ncheck ++ #define ncheck(assertion) __nCheck(assertion) ++ #endif ++ ++ #ifndef ncheck_string ++ #define ncheck_string(assertion, message) __nCheck_String(assertion, message) ++ #endif ++ ++ #ifndef nrequire ++ #define nrequire(assertion, exceptionLabel) __nRequire(assertion, exceptionLabel) ++ #endif ++ ++ #ifndef nrequire_action ++ #define nrequire_action(assertion, exceptionLabel, action) __nRequire_Action(assertion, exceptionLabel, action) ++ #endif ++ ++ #ifndef nrequire_action_quiet ++ #define nrequire_action_quiet(assertion, exceptionLabel, action) __nRequire_Action_Quiet(assertion, exceptionLabel, action) ++ #endif ++ ++ #ifndef nrequire_action_string ++ #define nrequire_action_string(assertion, exceptionLabel, action, message) __nRequire_Action_String(assertion, exceptionLabel, action, message) ++ #endif ++ ++ #ifndef nrequire_quiet ++ #define nrequire_quiet(assertion, exceptionLabel) __nRequire_Quiet(assertion, exceptionLabel) ++ #endif ++ ++ #ifndef nrequire_string ++ #define nrequire_string(assertion, exceptionLabel, string) __nRequire_String(assertion, exceptionLabel, string) ++ #endif ++ ++ #ifndef nverify ++ #define nverify(assertion) __nVerify(assertion) ++ #endif ++ ++ #ifndef nverify_string ++ #define nverify_string(assertion, message) __nVerify_String(assertion, message) ++ #endif ++ ++ #ifndef require_action_quiet ++ #define require_action_quiet(assertion, exceptionLabel, action) __Require_Action_Quiet(assertion, exceptionLabel, action) ++ #endif ++ ++ #ifndef require_noerr_action_quiet ++ #define require_noerr_action_quiet(errorCode, exceptionLabel, action) __Require_noErr_Action_Quiet(errorCode, exceptionLabel, action) ++ #endif ++ ++ #ifndef require_noerr_quiet ++ #define require_noerr_quiet(errorCode, exceptionLabel) __Require_noErr_Quiet(errorCode, exceptionLabel) ++ #endif ++ ++ #ifndef require_quiet ++ #define require_quiet(assertion, exceptionLabel) __Require_Quiet(assertion, exceptionLabel) ++ #endif ++ ++ #ifndef check_compile_time ++ #define check_compile_time( expr ) __Check_Compile_Time( expr ) ++ #endif ++ ++ #ifndef debug_string ++ #define debug_string(message) __Debug_String(message) ++ #endif ++ ++#endif /* ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES */ + + + #endif /* __ASSERTMACROS__ */ +-
diff --git a/opencflite.patches/opencflite-53.patch b/opencflite.patches/opencflite-53.patch new file mode 100644 index 0000000..ef6c37f --- /dev/null +++ b/opencflite.patches/opencflite-53.patch
@@ -0,0 +1,26 @@ +diff -aruN a/CFBase.c b/CFBase.c +--- a/CFBase.c 2011-08-10 16:29:04.841083602 -0700 ++++ b/CFBase.c 2011-08-10 15:46:44.000000000 -0700 +@@ -44,6 +44,7 @@ + #include <mach/mach.h> + #include <dlfcn.h> + #elif DEPLOYMENT_TARGET_LINUX ++#include <mcheck.h> + #include <pthread.h> + #elif DEPLOYMENT_TARGET_WINDOWS + #include <windows.h> +@@ -281,6 +282,14 @@ + } + + static void __CFAllocatorSystemDeallocate(void *ptr, void *info) { ++#if defined(DEBUG) ++ const enum mcheck_status status = mprobe(ptr); ++ ++ CFAssert3(status == MCHECK_OK || status == MCHECK_DISABLED, ++ __kCFLogAssertion, "%s: ptr %p status %d", ++ __PRETTY_FUNCTION__, ptr, status); ++#endif ++ + free(ptr); + } + #endif
diff --git a/opencflite.patches/opencflite-54.patch b/opencflite.patches/opencflite-54.patch new file mode 100644 index 0000000..f65ab05 --- /dev/null +++ b/opencflite.patches/opencflite-54.patch
@@ -0,0 +1,30 @@ +diff -aruN a/CFBase.c b/CFBase.c +--- a/CFBase.c 2011-08-10 16:29:35.458178493 -0700 ++++ b/CFBase.c 2011-08-10 16:31:27.000000000 -0700 +@@ -270,7 +270,7 @@ + malloc_zone_free((malloc_zone_t*)info, ptr); + } + +-#endif ++#endif /* DEPLOYMENT_TARGET_MACOSX */ + + #if DEPLOYMENT_TARGET_WINDOWS || DEPLOYMENT_TARGET_LINUX || DEPLOYMENT_TARGET_FREEBSD + static void *__CFAllocatorSystemAllocate(CFIndex size, CFOptionFlags hint, void *info) { +@@ -685,7 +685,7 @@ + malloc_zone_free((malloc_zone_t *)allocator, ptr); + return NULL; + } +-#endif ++#endif /* DEPLOYMENT_TARGET_MACOSX */ + deallocateFunc = __CFAllocatorGetDeallocateFunction(&allocator->_context); + if (NULL != deallocateFunc) { + INVOKE_CALLBACK2(deallocateFunc, ptr, allocator->_context.info); +@@ -722,7 +722,7 @@ + #endif + return malloc_zone_free((malloc_zone_t *)allocator, ptr); + } +-#endif ++#endif /* DEPLOYMENT_TARGET_MACOSX */ + deallocateFunc = __CFAllocatorGetDeallocateFunction(&allocator->_context); + if (NULL != ptr && NULL != deallocateFunc) { + INVOKE_CALLBACK2(deallocateFunc, ptr, allocator->_context.info);
diff --git a/opencflite.patches/opencflite-55.patch b/opencflite.patches/opencflite-55.patch new file mode 100644 index 0000000..36cd340 --- /dev/null +++ b/opencflite.patches/opencflite-55.patch
@@ -0,0 +1,54 @@ +diff -aruN a/CFRuntime.c b/CFRuntime.c +--- a/CFRuntime.c 2009-02-19 08:32:54.000000000 -0800 ++++ b/CFRuntime.c 2011-08-10 16:32:44.000000000 -0700 +@@ -73,11 +73,6 @@ + CF_INLINE size_t malloc_size(void* memblock) { + return _msize(memblock); + } +-#elif DEPLOYMENT_TARGET_LINUX +-#include <malloc.h> +-CF_INLINE size_t malloc_size(const void *memblock) { +- return malloc_usable_size((void *)memblock); +-} + #endif + + extern void __HALT(void); +@@ -264,12 +259,21 @@ + if (NULL == memory) { + return NULL; + } +-#if DEPLOYMENT_TARGET_WINDOWS || DEPLOYMENT_TARGET_LINUX ++#if DEPLOYMENT_TARGET_WINDOWS + // malloc_size won't work if the memory address has been moved + // (such as a custom allocator that adds its own metadata + // (e.g. under/overflow guard data), so don't attempt to call it + // on the allocation return. + size_t msize = (usesSystemDefaultAllocator) ? malloc_size(memory) : size; ++#elif DEPLOYMENT_TARGET_LINUX ++ // On Linux, across various architectures and versions of the GNU ++ // C Library, malloc_usable_size has been observed to at times return ++ // incorrect values. Since the introspection value-add it provides to ++ // CoreFoundation seems to be of limited utility, we eliminate it and ++ // simpy use the caller-requested size. In addition, memsetting this ++ // small tail block has also been found to cause heap consistency ++ // problems. ++ size_t msize = size; + #else + size_t msize = malloc_size(memory); + #endif +@@ -1098,6 +1100,7 @@ + usesSystemDefaultAllocator = (allocator == kCFAllocatorSystemDefault); + + if (__CFZombieLevel & (1 << 0)) { ++#if !DEPLOYMENT_TARGET_LINUX + uint8_t *ptr = (uint8_t *)cf - (usesSystemDefaultAllocator ? 0 : sizeof(CFAllocatorRef)); + size_t size = malloc_size(ptr); + uint8_t byte = 0xFC; +@@ -1109,6 +1112,7 @@ + byte = (__CFZombieLevel >> 8) & 0xFF; + } + memset(ptr, byte, size); ++#endif /* !DEPLOYMENT_TARGET_LINUX */ + } + if (!(__CFZombieLevel & (1 << 4))) { + CFAllocatorDeallocate(allocator, (uint8_t *)cf - (usesSystemDefaultAllocator ? 0 : sizeof(CFAllocatorRef)));
diff --git a/opencflite.patches/opencflite-56.patch b/opencflite.patches/opencflite-56.patch new file mode 100644 index 0000000..b403a63 --- /dev/null +++ b/opencflite.patches/opencflite-56.patch
@@ -0,0 +1,22 @@ +diff -aruN a/CFSet.c b/CFSet.c +--- a/CFSet.c 2009-02-19 08:32:54.000000000 -0800 ++++ b/CFSet.c 2011-09-06 17:05:25.000000000 -0700 +@@ -1089,15 +1089,14 @@ + if (CFDictionary) CF_OBJC_FUNCDISPATCH2(__kCFHashTypeID, void, hc, "_apply:context:", applier, context); + if (CFSet) CF_OBJC_FUNCDISPATCH2(__kCFHashTypeID, void, hc, "_applyValues:context:", applier, context); + __CFGenericValidateType(hc, __kCFHashTypeID); +- any_t *keys = hc->_keys; + for (CFIndex idx = 0, nbuckets = hc->_bucketsNum; idx < nbuckets; idx++) { +- if (__CFHashKeyIsValue(hc, keys[idx])) { ++ if (__CFHashKeyIsValue(hc, hc->_keys[idx])) { + for (CFIndex cnt = __CFHashGetOccurrenceCount(hc, idx); cnt--;) { + #if CFDictionary +- INVOKE_CALLBACK3(applier, (const_any_pointer_t)keys[idx], (const_any_pointer_t)hc->_values[idx], context); ++ INVOKE_CALLBACK3(applier, (const_any_pointer_t)hc->_keys[idx], (const_any_pointer_t)hc->_values[idx], context); + #endif + #if CFSet || CFBag +- INVOKE_CALLBACK2(applier, (const_any_pointer_t)keys[idx], context); ++ INVOKE_CALLBACK2(applier, (const_any_pointer_t)hc->_keys[idx], context); + #endif + } + }
diff --git a/opencflite.patches/opencflite-57.patch b/opencflite.patches/opencflite-57.patch new file mode 100644 index 0000000..184f57c --- /dev/null +++ b/opencflite.patches/opencflite-57.patch
@@ -0,0 +1,32 @@ +diff -aruN a/CFLocale.c b/CFLocale.c +--- a/CFLocale.c 2009-02-22 21:56:00.000000000 -0800 ++++ b/CFLocale.c 2012-04-20 12:14:07.061605103 -0700 +@@ -223,6 +223,19 @@ + WindowsLocales = CFArrayCreate(kCFAllocatorSystemDefault, (const void**)s_WindowsInstalledLocales, s_num_installed_localesI, &kCFTypeArrayCallBacks); + return (WindowsLocales); + } ++#elif DEPLOYMENT_TARGET_LINUX ++static CFStringRef __CFLocaleCopyPOSIXLocaleName(void) ++{ ++ const char *p = NULL; ++ CFStringRef identifier = NULL; ++ ++ p = getenv("LC_ALL"); ++ ++ if (NULL == p) p = getenv("LANG"); ++ if (NULL != p) identifier = CFStringCreateWithCString(kCFAllocatorDefault, p, kCFStringEncodingASCII); ++ ++ return (identifier); ++} + #endif // DEPLOYMENT_TARGET_WINDOWS + + static Boolean __CFLocaleEqual(CFTypeRef cf1, CFTypeRef cf2) { +@@ -335,6 +348,8 @@ + + #ifdef DEPLOYMENT_TARGET_WINDOWS + identifier = __CFLocaleWindowsLCIDToISOLocaleName(LOCALE_USER_DEFAULT); ++#elif DEPLOYMENT_TARGET_LINUX ++ identifier = __CFLocaleCopyPOSIXLocaleName(); + #endif + + struct __CFLocale *locale;
diff --git a/opencflite.patches/opencflite-58.patch b/opencflite.patches/opencflite-58.patch new file mode 100644 index 0000000..db1f9ce --- /dev/null +++ b/opencflite.patches/opencflite-58.patch
@@ -0,0 +1,38 @@ +diff -aruN a/CFXMLPreferencesDomain.c b/CFXMLPreferencesDomain.c +--- a/CFXMLPreferencesDomain.c 2009-02-19 08:32:54.000000000 -0800 ++++ b/CFXMLPreferencesDomain.c 2012-04-25 10:35:53.000000000 -0700 +@@ -238,9 +238,10 @@ + } + + +-#if DEPLOYMENT_TARGET_MACOSX ++#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_LINUX ++#include <stdio.h> + #include <sys/fcntl.h> + + /* __CFWriteBytesToFileWithAtomicity is a "safe save" facility. Write the bytes using the specified mode on the file to the provided URL. If the atomic flag is true, try to do it in a fashion that will enable a safe save. + */ + static Boolean __CFWriteBytesToFileWithAtomicity(CFURLRef url, const void *bytes, int length, SInt32 mode, Boolean atomic) { +@@ -264,6 +269,6 @@ + if (atomic) { + CFURLRef dir = CFURLCreateCopyDeletingLastPathComponent(kCFAllocatorSystemDefault, url); +- CFURLRef tempFile = CFURLCreateCopyAppendingPathComponent(kCFAllocatorSystemDefault, dir, CFSTR("cf#XXXXX"), false); ++ CFURLRef tempFile = CFURLCreateCopyAppendingPathComponent(kCFAllocatorSystemDefault, dir, CFSTR("cf#XXXXXX"), false); + CFRelease(dir); + if (!CFURLGetFileSystemRepresentation(tempFile, true, (uint8_t *)auxPath, CFMaxPathSize)) { + CFRelease(tempFile); +@@ -339,12 +346,12 @@ + CFRelease(binStream); + if (data) { + SInt32 mode; +-#if DEPLOYMENT_TARGET_MACOSX ++#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_LINUX + mode = isWorldReadable ? S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH : S_IRUSR|S_IWUSR; + #else + mode = 0666; + #endif +-#if DEPLOYMENT_TARGET_MACOSX ++#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_LINUX + { // Try quick atomic way first, then fallback to slower ways and error cases + CFStringRef scheme = CFURLCopyScheme(url); + if (!scheme) {
diff --git a/opencflite.patches/opencflite-59.patch b/opencflite.patches/opencflite-59.patch new file mode 100644 index 0000000..cc73877 --- /dev/null +++ b/opencflite.patches/opencflite-59.patch
@@ -0,0 +1,29 @@ +diff -aruN a/CFXMLPreferencesDomain.c b/CFXMLPreferencesDomain.c +--- a/CFXMLPreferencesDomain.c 2009-02-19 08:32:54.000000000 -0800 ++++ b/CFXMLPreferencesDomain.c 2012-04-25 10:35:53.000000000 -0700 +@@ -239,9 +239,13 @@ + + + #if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_LINUX ++#include <grp.h> + #include <stdio.h> + #include <sys/fcntl.h> + ++#define __kCFAdminGroupName "admin" ++#define __kCFAdminFallbackGroupID 80 ++ + /* __CFWriteBytesToFileWithAtomicity is a "safe save" facility. Write the bytes using the specified mode on the file to the provided URL. If the atomic flag is true, try to do it in a fashion that will enable a safe save. + */ + static Boolean __CFWriteBytesToFileWithAtomicity(CFURLRef url, const void *bytes, int length, SInt32 mode, Boolean atomic) { +@@ -265,8 +270,10 @@ + } else { + mode = 0664; + if (writingFileAsRoot && (0 == strncmp(cpath, "/Library/Preferences", 20))) { ++ const struct group *grent; + owner = geteuid(); +- group = 80; ++ grent = getgrnam(__kCFAdminGroupName); ++ group = grent ? grent->gr_gid : __kCFAdminFallbackGroupID; + } + } + }
diff --git a/opencflite.patches/opencflite-60.patch b/opencflite.patches/opencflite-60.patch new file mode 100644 index 0000000..bf01af4 --- /dev/null +++ b/opencflite.patches/opencflite-60.patch
@@ -0,0 +1,93 @@ +diff -aruN a/CFUniChar.c b/CFUniChar.c +--- a/CFUniChar.c 2009-02-19 16:25:06.000000000 -0800 ++++ b/CFUniChar.c 2016-06-03 16:45:46.707080496 -0700 +@@ -67,7 +67,7 @@ + #if DEPLOYMENT_TARGET_MACOSX + #define __kCFCharacterSetDir "/System/Library/CoreServices" + #elif DEPLOYMENT_TARGET_LINUX || DEPLOYMENT_TARGET_FREEBSD +-#define __kCFCharacterSetDir "/usr/local/share/CoreFoundation" ++#define __kCFCharacterSetDir __kCFDataDir "/CoreFoundation" + #elif DEPLOYMENT_TARGET_WINDOWS + #define __kCFCharacterSetDir "\\Windows\\CoreFoundation" + #define MAXPATHLEN MAX_PATH +@@ -129,6 +129,26 @@ + strlcpy(cpath, _CFDLLPath(), MAXPATHLEN); + #else + strlcpy(cpath, __kCFCharacterSetDir, MAXPATHLEN); ++ // For non-absolute paths, prefix them with the path to this executable ++ if (*cpath != '/') { ++ int len; ++ char *lastslash; ++ ++ len = readlink("/proc/self/exe", cpath, MAXPATHLEN); ++ if (len < 0) { ++ cpath[0] = '\0'; ++ } else { ++ cpath[len] = '\0'; ++ } ++ ++ // Would have used dirname(), but it was behaving badly, and this works in place ++ lastslash = strrchr(cpath, '/'); ++ if (lastslash != NULL) { ++ *(lastslash + 1) = '\0'; ++ } ++ ++ strlcat(cpath, __kCFCharacterSetDir, MAXPATHLEN); ++ } + #endif + + #if DEPLOYMENT_TARGET_WINDOWS || 0 +diff -aruN a/configure b/configure +--- a/configure 2016-06-03 16:43:52.651387528 -0700 ++++ b/configure 2016-06-03 16:44:19.875314281 -0700 +@@ -1305,7 +1305,7 @@ + + # Be sure to have absolute directory names. + for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ +- datadir sysconfdir sharedstatedir localstatedir includedir \ ++ sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir + do +diff -aruN a/Makefile.am b/Makefile.am +--- a/Makefile.am 2009-03-10 16:31:21.000000000 -0700 ++++ b/Makefile.am 2016-06-03 16:44:19.879314270 -0700 +@@ -25,7 +25,7 @@ + # Unicode character mappings. + # + +-libCoreFoundation_la_datadir = ${datadir}/CoreServices ++libCoreFoundation_la_datadir = ${datadir}/CoreFoundation/CharacterSets + + libCoreFoundation_la_data_DATA = CFCharacterSetBitmaps.bitmap \ + CFUniCharPropertyDatabase.data \ +@@ -35,7 +35,7 @@ + CF_COMMON_CPPFLAGS = $(AM_CPPFLAGS) \ + -DU_SHOW_DRAFT_API=1 \ + -DCF_BUILDING_CF=1 \ +- -D__kCFCharacterSetDir=\"${libCoreFoundation_la_datadir}\" \ ++ -D__kCFDataDir=\"${datadir}\" \ + -DMAC_OS_X_VERSION_MAX_ALLOWED=MAC_OS_X_VERSION_10_5 \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/include/mach_support +diff -aruN a/Makefile.in b/Makefile.in +--- a/Makefile.in 2009-03-10 23:44:36.000000000 -0700 ++++ b/Makefile.in 2016-06-03 16:44:19.879314270 -0700 +@@ -535,7 +535,7 @@ + # Define where we will install and where CoreFoundation can find its + # Unicode character mappings. + # +-libCoreFoundation_la_datadir = ${datadir}/CoreServices ++libCoreFoundation_la_datadir = ${datadir}/CoreFoundation/CharacterSets + libCoreFoundation_la_data_DATA = CFCharacterSetBitmaps.bitmap \ + CFUniCharPropertyDatabase.data \ + CFUnicodeData-B.mapping \ +@@ -544,7 +544,7 @@ + CF_COMMON_CPPFLAGS = $(AM_CPPFLAGS) \ + -DU_SHOW_DRAFT_API=1 \ + -DCF_BUILDING_CF=1 \ +- -D__kCFCharacterSetDir=\"${libCoreFoundation_la_datadir}\" \ ++ -D__kCFDataDir=\"${datadir}\" \ + -DMAC_OS_X_VERSION_MAX_ALLOWED=MAC_OS_X_VERSION_10_5 \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/include/mach_support
diff --git a/opencflite.patches/opencflite-61.patch b/opencflite.patches/opencflite-61.patch new file mode 100644 index 0000000..b724c34 --- /dev/null +++ b/opencflite.patches/opencflite-61.patch
@@ -0,0 +1,24 @@ +diff -aruN a/CFUniChar.c b/CFUniChar.c +--- a/CFUniChar.c 2009-02-19 16:25:06.000000000 -0800 ++++ b/CFUniChar.c 2012-04-25 22:58:38.968005637 -0700 +@@ -574,18 +576,10 @@ + + static CFSpinLock_t __CFUniCharMappingTableLock = CFSpinLockInit; + +-#if __CF_BIG_ENDIAN__ + #if USE_MACHO_SEGMENT + #define MAPPING_TABLE_FILE "__data" + #else +-#define MAPPING_TABLE_FILE "CFUnicodeData-B.mapping" +-#endif +-#else +-#if USE_MACHO_SEGMENT +-#define MAPPING_TABLE_FILE "__data" +-#else +-#define MAPPING_TABLE_FILE "CFUnicodeData-L.mapping" +-#endif ++#define MAPPING_TABLE_FILE "CFUnicodeData.mapping" + #endif + + __private_extern__ const void *CFUniCharGetMappingData(uint32_t type) { +diff -aruN a/Makefile.am b/Makefile.am
diff --git a/opencflite.patches/opencflite-62.patch b/opencflite.patches/opencflite-62.patch new file mode 100644 index 0000000..e58f77a --- /dev/null +++ b/opencflite.patches/opencflite-62.patch
@@ -0,0 +1,16 @@ +diff -aruN a/CFUniChar.c b/CFUniChar.c +--- a/CFUniChar.c 2009-02-19 16:25:06.000000000 -0800 ++++ b/CFUniChar.c 2012-04-25 22:58:38.968005637 -0700 +@@ -221,10 +221,12 @@ + + int no_hang_fd = open("/dev/autofs_nowait", 0); + if ((fd = open(fileName, O_RDONLY, 0)) < 0) { ++ CFLog(__kCFLogAssertion, CFSTR("%s(): could not open %s for read-only access."), __PRETTY_FUNCTION__, fileName); + close(no_hang_fd); + return false; + } + if (fstat(fd, &statBuf) < 0 || (*bytes = mmap(0, statBuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) == (void *)-1) { ++ CFLog(__kCFLogAssertion, CFSTR("%s(): could not map %s for read-only access."), __PRETTY_FUNCTION__, fileName); + close(fd); + return false; + }
diff --git a/opencflite.tar.gz b/opencflite.tar.gz new file mode 100644 index 0000000..cff4fd0 --- /dev/null +++ b/opencflite.tar.gz Binary files differ
diff --git a/opencflite.url b/opencflite.url new file mode 100644 index 0000000..90a49dc --- /dev/null +++ b/opencflite.url
@@ -0,0 +1 @@ +http://download.sourceforge.net/opencflite/opencflite-476.17.2.tar.gz
diff --git a/opencflite.version b/opencflite.version new file mode 100644 index 0000000..7b60178 --- /dev/null +++ b/opencflite.version
@@ -0,0 +1 @@ +476.17.2