void _ODErrorSet(CFErrorRef *error, uint32_t code, CFStringRef info) { if (error == NULL) { return; } if (code) { CFStringRef keys[2], vals[2]; keys[0] = kCFErrorLocalizedDescriptionKey; if (info) { vals[0] = CFRetain(info); } else { // TODO: 7708162 vals[0] = MapCodeToReason(code); } keys[1] = kCFErrorLocalizedFailureReasonKey; vals[1] = MapCodeToReason(code); *error = CFErrorCreateWithUserInfoKeysAndValues(NULL, kODErrorDomainFramework, code, (const void **)keys, (const void **)vals, 2); CFRelease(vals[0]); CFRelease(vals[1]); } else { *error = NULL; } }
static void cocoaError(CFErrorRef *error, CFIndex code, CFURLRef url, CFStringRef path) { if (error) { const CFStringRef keys[2] = { NSURLErrorKey, NSFilePathErrorKey }; CFTypeRef values[2] = { url, path, }; *error = CFErrorCreateWithUserInfoKeysAndValues(kCFAllocatorDefault, kCFErrorDomainCocoa, code, (const void *const *)keys, (const void *const *)values, 2); } }
static void posixError(CFErrorRef *error, CFURLRef url, CFStringRef path) { if (error) { const CFStringRef keys[3] = { kCFErrorUnderlyingErrorKey, NSURLErrorKey, NSFilePathErrorKey }; CFStringRef err = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%s"), strerror(errno)); CFTypeRef values[3] = { err, url, path, }; *error = CFErrorCreateWithUserInfoKeysAndValues(kCFAllocatorDefault, kCFErrorDomainPOSIX, errno, (const void *const *)keys, (const void *const *)values, 3); CFRelease(err); } }
bool _validate_nonnull(CFErrorRef *error, CFStringRef desc, const void *ptr) { if (ptr) { return true; } if (error) { CFStringRef keys[2], vals[2]; keys[0] = kCFErrorLocalizedDescriptionKey; vals[0] = CFSTR("Invalid argument."); keys[1] = kCFErrorLocalizedFailureReasonKey; vals[1] = CFStringCreateWithFormat(NULL, NULL, CFSTR("Invalid %@ reference."), desc); *error = CFErrorCreateWithUserInfoKeysAndValues(NULL, kODErrorDomainFramework, kODErrorRecordParameterError, (const void **)keys, (const void **)vals, 2); CFRelease(vals[0]); CFRelease(vals[1]); } return false; }