static void *(*createNvramHostInterface_fptr)(const char *handle);
static kern_return_t (*destroyNvramHostInterface_fptr)(void *interface);
static kern_return_t (*getNVRAMVariable_fptr)(void *interface, char *name, char **buffer, uint32_t *size);
static void *(*createNvramHostInterface_fptr)(const char *handle);
static kern_return_t (*destroyNvramHostInterface_fptr)(void *interface);
static kern_return_t (*getNVRAMVariable_fptr)(void *interface, char *name, char **buffer, uint32_t *size);
- nameRef = CFStringCreateWithCString(kCFAllocatorDefault, name,
- kCFStringEncodingUTF8);
- if (nameRef == 0) {
- errx(1, "Error creating CFString for key %s", name);
- }
-
- valueRef = IORegistryEntryCreateCFProperty(gOptionsRef, nameRef, 0, 0);
- if (valueRef) {
- typeID = CFGetTypeID(valueRef);
- CFRelease(valueRef);
-
- valueRef = ConvertValueToCFTypeRef(typeID, value);
- if (valueRef == 0) {
- errx(1, "Error creating CFTypeRef for value %s", value);
- } result = IORegistryEntrySetCFProperty(gOptionsRef, nameRef, valueRef);
- } else {
- while (1) {
- // In the default case, try data, string, number, then boolean.
-
- valueRef = ConvertValueToCFTypeRef(CFDataGetTypeID(), value);
- if (valueRef != 0) {
- result = IORegistryEntrySetCFProperty(gOptionsRef, nameRef, valueRef);
- if (result == KERN_SUCCESS) break;
- }
-
- valueRef = ConvertValueToCFTypeRef(CFStringGetTypeID(), value);
- if (valueRef != 0) {
- result = IORegistryEntrySetCFProperty(gOptionsRef, nameRef, valueRef);
- if (result == KERN_SUCCESS) break;
- }
-
- valueRef = ConvertValueToCFTypeRef(CFNumberGetTypeID(), value);
- if (valueRef != 0) {
- result = IORegistryEntrySetCFProperty(gOptionsRef, nameRef, valueRef);
- if (result == KERN_SUCCESS) break;
- }
+ nameRef = CFStringCreateWithCString(kCFAllocatorDefault, name,
+ kCFStringEncodingUTF8);
+ if (nameRef == 0) {
+ errx(1, "Error creating CFString for key %s", name);
+ }
+ valueRef = ConvertValueToCFTypeRef(typeID, value);
+ if (valueRef == 0) {
+ errx(1, "Error creating CFTypeRef for value %s", value);
+ } result = IORegistryEntrySetCFProperty(gOptionsRef, nameRef, valueRef);
+ } else {
+ while (1) {
+ // In the default case, try data, string, number, then boolean.
+
+ valueRef = ConvertValueToCFTypeRef(CFDataGetTypeID(), value);
+ if (valueRef != 0) {
+ result = IORegistryEntrySetCFProperty(gOptionsRef, nameRef, valueRef);
+ if (result == KERN_SUCCESS) break;
+ }
+
+ valueRef = ConvertValueToCFTypeRef(CFStringGetTypeID(), value);
+ if (valueRef != 0) {
+ result = IORegistryEntrySetCFProperty(gOptionsRef, nameRef, valueRef);
+ if (result == KERN_SUCCESS) break;
+ }
+
+ valueRef = ConvertValueToCFTypeRef(CFNumberGetTypeID(), value);
+ if (valueRef != 0) {
+ result = IORegistryEntrySetCFProperty(gOptionsRef, nameRef, valueRef);
+ if (result == KERN_SUCCESS) break;
+ }
+
+ valueRef = ConvertValueToCFTypeRef(CFBooleanGetTypeID(), value);
+ if (valueRef != 0) {
+ result = IORegistryEntrySetCFProperty(gOptionsRef, nameRef, valueRef);
+ if (result == KERN_SUCCESS) break;
+ }
+
+ break;
+ }
- CFTypeRef valueRef = 0;
- long cnt, cnt2, length;
- unsigned long number, tmp;
-
- if (typeID == CFBooleanGetTypeID()) {
- if (!strcmp("true", value)) valueRef = kCFBooleanTrue;
- else if (!strcmp("false", value)) valueRef = kCFBooleanFalse;
- } else if (typeID == CFNumberGetTypeID()) {
- number = strtol(value, 0, 0);
- valueRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type,
- &number);
- } else if (typeID == CFStringGetTypeID()) {
- valueRef = CFStringCreateWithCString(kCFAllocatorDefault, value,
- kCFStringEncodingUTF8);
- } else if (typeID == CFDataGetTypeID()) {
- length = strlen(value);
- for (cnt = cnt2 = 0; cnt < length; cnt++, cnt2++) {
- if (value[cnt] == '%') {
- if (!ishexnumber(value[cnt + 1]) ||
- !ishexnumber(value[cnt + 2])) return 0;
- number = toupper(value[++cnt]) - '0';
- if (number > 9) number -= 7;
- tmp = toupper(value[++cnt]) - '0';
- if (tmp > 9) tmp -= 7;
- number = (number << 4) + tmp;
- value[cnt2] = number;
- } else value[cnt2] = value[cnt];
- }
- valueRef = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, (const UInt8 *)value,
- cnt2, kCFAllocatorDefault);
- } else return 0;
+ CFTypeRef valueRef = 0;
+ long cnt, cnt2, length;
+ unsigned long number, tmp;
+
+ if (typeID == CFBooleanGetTypeID()) {
+ if (!strcmp("true", value)) valueRef = kCFBooleanTrue;
+ else if (!strcmp("false", value)) valueRef = kCFBooleanFalse;
+ } else if (typeID == CFNumberGetTypeID()) {
+ number = strtol(value, 0, 0);
+ valueRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type,
+ &number);
+ } else if (typeID == CFStringGetTypeID()) {
+ valueRef = CFStringCreateWithCString(kCFAllocatorDefault, value,
+ kCFStringEncodingUTF8);
+ } else if (typeID == CFDataGetTypeID()) {
+ length = strlen(value);
+ for (cnt = cnt2 = 0; cnt < length; cnt++, cnt2++) {
+ if (value[cnt] == '%') {
+ if (!ishexnumber(value[cnt + 1]) ||
+ !ishexnumber(value[cnt + 2])) return 0;
+ number = toupper(value[++cnt]) - '0';
+ if (number > 9) number -= 7;
+ tmp = toupper(value[++cnt]) - '0';
+ if (tmp > 9) tmp -= 7;
+ number = (number << 4) + tmp;
+ value[cnt2] = number;
+ } else value[cnt2] = value[cnt];
+ }
+ valueRef = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, (const UInt8 *)value,
+ cnt2, kCFAllocatorDefault);
+ } else return 0;