mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-27 06:04:23 +08:00
HID: simplify code in fetch_item()
We can easily calculate the size of the item using arithmetic (shifts). This allows to pull duplicated code out of the switch statement, making it cleaner. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Link: https://patch.msgid.link/ZvwYbESMZ667QZqY@google.com Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
This commit is contained in:
parent
f23aa4c076
commit
61595012f2
@ -754,35 +754,32 @@ static const u8 *fetch_item(const __u8 *start, const __u8 *end, struct hid_item
|
||||
}
|
||||
|
||||
item->format = HID_ITEM_FORMAT_SHORT;
|
||||
item->size = b & 3;
|
||||
item->size = BIT(b & 3) >> 1; /* 0, 1, 2, 3 -> 0, 1, 2, 4 */
|
||||
|
||||
if (end - start < item->size)
|
||||
return NULL;
|
||||
|
||||
switch (item->size) {
|
||||
case 0:
|
||||
return start;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if ((end - start) < 1)
|
||||
return NULL;
|
||||
item->data.u8 = *start++;
|
||||
return start;
|
||||
item->data.u8 = *start;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if ((end - start) < 2)
|
||||
return NULL;
|
||||
item->data.u16 = get_unaligned_le16(start);
|
||||
start = (__u8 *)((__le16 *)start + 1);
|
||||
return start;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
item->size++;
|
||||
if ((end - start) < 4)
|
||||
return NULL;
|
||||
case 4:
|
||||
item->data.u32 = get_unaligned_le32(start);
|
||||
start = (__u8 *)((__le32 *)start + 1);
|
||||
return start;
|
||||
break;
|
||||
|
||||
default:
|
||||
unreachable();
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return start + item->size;
|
||||
}
|
||||
|
||||
static void hid_scan_input_usage(struct hid_parser *parser, u32 usage)
|
||||
|
Loading…
Reference in New Issue
Block a user