On 06/20/2011 02:55 AM, Vincas Miliƫnas wrote:
(see the message in the first part of the patch)
+struct raw_input +{
- struct list entry;
- unsigned short usage_page;
- unsigned short usage;
- BOOL processed;
- BOOL retrieved;
- RAWINPUT raw;
- /* common fields */
- unsigned int type;
- unsigned int message;
- unsigned int flags;
- unsigned int extra_info;
- /* mouse fields */
- unsigned int point_x;
- unsigned int point_y;
- unsigned int mouse_data;
- unsigned int cursor_x;
- unsigned int cursor_y;
- /* keyboard fields */
- unsigned int vk_code;
- unsigned int scan_code;
+};
Mouse and keyboard fields should be a union to save space.
+#define NUM_RAW_DEVICES (sizeof( raw_devices ) / sizeof( struct raw_device ))
Please use "sizeof(array)/sizeof(array[0])" construct instead.
- UINT i, size_in_bytes;
In server please use standard C types ("unsigned int" in this case).
/* Currently fake handles are provided, however they are only used for the GetRawInputDeviceInfo function,
thus it should not create any undesirable side effects */
result[i].hDevice = (HANDLE)raw_devices[i].handle;
This doesn't sound right. What this handle can be used for?
- if (!(raw = malloc( sizeof( *raw ) )))
In server please use mem_alloc() instead.
+/* Unregister a raw input device */ +DECL_HANDLER(unregister_raw_input_device)
I don't see handing of case where device is not found. Should you return error instead?
- LIST_FOR_EACH( registration_entry, ¤t->process->raw_registered )
- {
struct raw_registration *registration = LIST_ENTRY( registration_entry, struct raw_registration, entry );
You can use this instead: LIST_FOR_EACH_ENTRY( registration, ¤t->process->raw_registered, struct raw_registration, entry )
- /* Prevent unprocessed raw input entries from being queued indefinitely */
- while (current->process->raw_inputs_len >= MAX_RAW_INPUT_QUEUE_LENGTH)
- {
struct raw_input *head = LIST_ENTRY( list_head( ¤t->process->raw_inputs ), struct raw_input, entry );
list_remove( &head->entry );
current->process->raw_inputs_len -= 1;
free( head );
- }
Looks like you need a circular buffer (an array of fixed size with head and tail pointers) instead of a list here.
Vitaliy.