On Jan 20, 2013, at 11:47 AM, C.W. Betts wrote: > On Jan 20, 2013, at 12:38 AM, Ken Thomases <[email protected]> wrote: > >> On Jan 19, 2013, at 4:08 PM, C.W. Betts wrote: >> >>> + CFNumberRef count = >>> CFDictionaryGetValue(assertsionStats, kIOPMAssertionTypeNoDisplaySleep); >>> + CFNumberRef count2 = NULL; >>> + long longCount = 0; >>> + long longCount2 = 0; >>> + CFNumberGetValue(count, kCFNumberLongType, &longCount); >>> + count2 = CFDictionaryGetValue(assertsionStats, >>> kIOPMAssertionTypePreventUserIdleDisplaySleep); >>> + if(count2) >>> + CFNumberGetValue(count2, kCFNumberLongType, >>> &longCount2); >> >> Why are the two assertion types handled differently here? You get the value >> in the initializer in one case but not in the other. You check if the >> CFNumber pointer is NULL in one case but not the other. They should >> probably both be handled the same way. > On Lion and later, kIOPMAssertionTypeNoDisplaySleep is deprecated in favor of > kIOPMAssertionTypePreventUserIdleDisplaySleep. This catches both: I don't > know if OS X Lion and later automatically maps > kIOPMAssertionTypeNoDisplaySleep to > kIOPMAssertionTypePreventUserIdleDisplaySleep, so this takes care of both.
I understand why you're checking both. My question was why the code wasn't similar for checking each case. You check them both, which is good, but you check each in a slightly different way, which is confusing and inconsistent. It's also error-prone for the possible future where CFDictionaryGetValue(..., kIOPMAssertionTypeNoDisplaySleep) might return NULL. Should that happen, CFNumberGetValue() would crash. -Ken
