Check the reallocation in usb_hid. Use B_NO_MEMORY instead of B_ERROR in other checks.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18495 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
4872c00b87
commit
852c3506f5
@ -717,6 +717,7 @@ hid_device_added(const usb_device *dev, void **cookie)
|
|||||||
|
|
||||||
desc_len = hid_desc->descriptor_info[0].descriptor_length;
|
desc_len = hid_desc->descriptor_info[0].descriptor_length;
|
||||||
free(hid_desc);
|
free(hid_desc);
|
||||||
|
|
||||||
rep_desc = malloc(desc_len);
|
rep_desc = malloc(desc_len);
|
||||||
if (rep_desc == NULL)
|
if (rep_desc == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
@ -754,7 +755,7 @@ hid_device_added(const usb_device *dev, void **cookie)
|
|||||||
|
|
||||||
if ((status = usb->set_configuration (dev, conf)) != B_OK) {
|
if ((status = usb->set_configuration (dev, conf)) != B_OK) {
|
||||||
DPRINTF_ERR((MY_ID "set_configuration() failed %d\n", (int)status));
|
DPRINTF_ERR((MY_ID "set_configuration() failed %d\n", (int)status));
|
||||||
free (rep_desc);
|
free(rep_desc);
|
||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -770,9 +771,9 @@ hid_device_added(const usb_device *dev, void **cookie)
|
|||||||
num_items = desc_len; /* XXX */
|
num_items = desc_len; /* XXX */
|
||||||
items = malloc(sizeof (decomp_item) * num_items);
|
items = malloc(sizeof (decomp_item) * num_items);
|
||||||
if (items == NULL) {
|
if (items == NULL) {
|
||||||
// TODO: free device
|
remove_device(device);
|
||||||
free(rep_desc);
|
free(rep_desc);
|
||||||
return B_ERROR;
|
return B_NO_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
decompose_report_descriptor(rep_desc, desc_len, items, &num_items);
|
decompose_report_descriptor(rep_desc, desc_len, items, &num_items);
|
||||||
@ -782,12 +783,23 @@ hid_device_added(const usb_device *dev, void **cookie)
|
|||||||
|
|
||||||
device->num_insns = num_items; /* XXX */
|
device->num_insns = num_items; /* XXX */
|
||||||
device->insns = malloc (sizeof (report_insn) * device->num_insns);
|
device->insns = malloc (sizeof (report_insn) * device->num_insns);
|
||||||
assert (device->insns != NULL);
|
if (device->insns == NULL) {
|
||||||
|
remove_device(device);
|
||||||
|
free(items);
|
||||||
|
return B_NO_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
parse_report_descriptor (items, num_items, device->insns,
|
parse_report_descriptor (items, num_items, device->insns,
|
||||||
&device->num_insns, &device->total_report_size, &report_id);
|
&device->num_insns, &device->total_report_size, &report_id);
|
||||||
free(items);
|
free(items);
|
||||||
|
|
||||||
device->insns = realloc(device->insns, sizeof (report_insn)
|
device->insns = realloc(device->insns, sizeof (report_insn)
|
||||||
* device->num_insns);
|
* device->num_insns);
|
||||||
|
if (device->insns == NULL) {
|
||||||
|
remove_device(device);
|
||||||
|
return B_NO_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
DPRINTF_INFO ((MY_ID "%d items, %d insns, %d bytes\n",
|
DPRINTF_INFO ((MY_ID "%d items, %d insns, %d bytes\n",
|
||||||
(int)num_items, (int)device->num_insns, (int)device->total_report_size));
|
(int)num_items, (int)device->num_insns, (int)device->total_report_size));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user