-#include <mach-o/dyld.h>
-
-extern char *getenv(const char *name);
-
-static void *__CFLoadCFNetwork(void) {
- static const void *image = NULL;
- if (NULL == image) {
- // OS 10.3 change to NSAddImage options here:
- // a) Use NSADDIMAGE_OPTION_WITH_SEARCHING to support setting common DYLD_ environment variables
- // including DYLD_IMAGE_SUFFIX and DYLD_LIBRARY_PATH.
- // b) Use NSADDIMAGE_OPTION_MATCH_FILENAME_BY_INSTALLNAME to fix a nasty problem where two copies of
- // a given framework are loaded into the same address space (See bug # 3060641).
- image = ((void*)NSAddImage("/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/CFNetwork", NSADDIMAGE_OPTION_WITH_SEARCHING | NSADDIMAGE_OPTION_MATCH_FILENAME_BY_INSTALLNAME));
- }
- return (void *)image;
-}
-
-static Boolean __CFURLCreateDataAndPropertiesFromResource(CFAllocatorRef A, CFURLRef B, CFDataRef *C, CFDictionaryRef *D, CFArrayRef E, SInt32 *F) {
- static Boolean (*dyfunc)(CFAllocatorRef, CFURLRef, CFDataRef *, CFDictionaryRef *, CFArrayRef, SInt32 *) = NULL;
- if (NULL == dyfunc) {
- void *image = __CFLoadCFNetwork();
- dyfunc = NSAddressOfSymbol(NSLookupSymbolInImage(image, "__CFURLCreateDataAndPropertiesFromResource", NSLOOKUPSYMBOLINIMAGE_OPTION_BIND));
- }
- if (dyfunc) {
- return dyfunc(A, B, C, D, E, F);
- } else {
- if (C) *C = NULL;
- if (D) *D = NULL;
- if (F) *F = kCFURLUnknownSchemeError;
- return false;
- }
-}
-
-static Boolean __CFURLWriteDataAndPropertiesToResource(CFURLRef A, CFDataRef B, CFDictionaryRef C, SInt32 *D) {
- static Boolean (*dyfunc)(CFURLRef, CFDataRef, CFDictionaryRef, SInt32 *) = NULL;
- if (NULL == dyfunc) {
- void *image = __CFLoadCFNetwork();
- dyfunc = NSAddressOfSymbol(NSLookupSymbolInImage(image, "__CFURLWriteDataAndPropertiesToResource", NSLOOKUPSYMBOLINIMAGE_OPTION_BIND));
- }
- if (dyfunc) {
- return dyfunc(A, B, C, D);
- } else {
- if (D) *D = kCFURLUnknownSchemeError;
- return false;
- }
-}
-
-static Boolean __CFURLDestroyResource(CFURLRef A, SInt32 *B) {
- static Boolean (*dyfunc)(CFURLRef, SInt32 *) = NULL;
- if (NULL == dyfunc) {
- void *image = __CFLoadCFNetwork();
- dyfunc = NSAddressOfSymbol(NSLookupSymbolInImage(image, "__CFURLDestroyResource", NSLOOKUPSYMBOLINIMAGE_OPTION_BIND));
- }
- if (dyfunc) {
- return dyfunc(A, B);
- } else {
- if (B) *B = kCFURLUnknownSchemeError;
- return false;
- }
-}
+DEFINE_WEAK_CFNETWORK_FUNC(Boolean, _CFURLCreateDataAndPropertiesFromResource, (CFAllocatorRef A, CFURLRef B, CFDataRef *C, CFDictionaryRef *D, CFArrayRef E, SInt32 *F), (A, B, C, D, E, F), false)
+DEFINE_WEAK_CFNETWORK_FUNC(Boolean, _CFURLWriteDataAndPropertiesToResource, (CFURLRef A, CFDataRef B, CFDictionaryRef C, SInt32 *D), (A, B, C, D), false)
+DEFINE_WEAK_CFNETWORK_FUNC(Boolean, _CFURLDestroyResource, (CFURLRef A, SInt32 *B), (A, B), false)