IOReturn IOHIDEventSystemUserClient::clientMemoryForType( UInt32 type, UInt32 * flags, IOMemoryDescriptor ** memory ) { IODataQueue * eventQueue = NULL; IOReturn ret = kIOReturnNoMemory; if (type == kIOHIDEventSystemKernelQueueID) eventQueue = kernelQueue; else eventQueue = copyDataQueueWithID(type); if ( eventQueue ) { IOMemoryDescriptor * desc = NULL; *flags = 0; desc = eventQueue->getMemoryDescriptor(); if ( desc ) { desc->retain(); ret = kIOReturnSuccess; } *memory = desc; if (type != kIOHIDEventSystemKernelQueueID) eventQueue->release(); } else { ret = kIOReturnBadArgument; } return ret; }
IOReturn IOHIDEventSystemUserClient::clientMemoryForType( UInt32 type, UInt32 * flags, IOMemoryDescriptor ** memory ) { IODataQueue * eventQueue = OSDynamicCast(IODataQueue, (OSObject*)type); IOReturn ret = kIOReturnNoMemory; if ( eventQueue ) { IOMemoryDescriptor * desc = NULL; *flags = 0; desc = eventQueue->getMemoryDescriptor(); if ( desc ) { desc->retain(); ret = kIOReturnSuccess; } *memory = desc; } else { ret = kIOReturnBadArgument; } return ret; }