Changes in uspace/drv/bus/usb/usbmid/usbmid.c [a92ce4ef:5203e256] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbmid/usbmid.c
ra92ce4ef r5203e256 45 45 46 46 /** Callback for DDF USB interface. */ 47 static int usb_iface_get_address_impl(ddf_fun_t *fun, devman_handle_t handle, 48 usb_address_t *address) 49 { 50 return usb_iface_get_address_hub_impl(fun, handle, address); 51 } 52 53 /** Callback for DDF USB interface. */ 47 54 static int usb_iface_get_interface_impl(ddf_fun_t *fun, devman_handle_t handle, 48 55 int *iface_no) … … 63 70 static usb_iface_t child_usb_iface = { 64 71 .get_hc_handle = usb_iface_get_hc_handle_hub_child_impl, 65 .get_address = usb_iface_get_address_ hub_impl,72 .get_address = usb_iface_get_address_impl, 66 73 .get_interface = usb_iface_get_interface_impl 67 74 }; … … 72 79 }; 73 80 74 int usbmid_interface_destroy(usbmid_interface_t *mid_iface)75 {76 assert(mid_iface);77 assert_link_not_used(&mid_iface->link);78 const int ret = ddf_fun_unbind(mid_iface->fun);79 if (ret != EOK) {80 return ret;81 }82 /* NOTE: usbmid->interface points somewhere, but we did not83 * allocate that space, so don't touch */84 ddf_fun_destroy(mid_iface->fun);85 /* NOTE: mid_iface is invalid at this point, it was assigned to86 * mid_iface->fun->driver_data and freed in ddf_fun_destroy */87 return EOK;88 }89 81 90 82 /** Spawn new child device from one interface. … … 114 106 (int) interface_descriptor->interface_number); 115 107 if (rc < 0) { 116 return ENOMEM;108 goto error_leave; 117 109 } 118 110 119 111 /* Create the device. */ 120 112 child = ddf_fun_create(parent->ddf_dev, fun_inner, child_name); 121 free(child_name);122 113 if (child == NULL) { 123 return ENOMEM; 114 rc = ENOMEM; 115 goto error_leave; 124 116 } 125 117 … … 130 122 131 123 rc = usb_device_create_match_ids_from_interface(device_descriptor, 132 interface_descriptor, &child->match_ids); 124 interface_descriptor, 125 &child->match_ids); 133 126 if (rc != EOK) { 134 ddf_fun_destroy(child); 135 return rc; 127 goto error_leave; 136 128 } 137 129 138 130 rc = ddf_fun_bind(child); 139 131 if (rc != EOK) { 140 /* This takes care of match_id deallocation as well. */ 141 ddf_fun_destroy(child); 142 return rc; 132 goto error_leave; 143 133 } 144 134 145 135 return EOK; 136 137 error_leave: 138 if (child != NULL) { 139 child->name = NULL; 140 /* This takes care of match_id deallocation as well. */ 141 ddf_fun_destroy(child); 142 } 143 if (child_name != NULL) { 144 free(child_name); 145 } 146 147 return rc; 146 148 } 147 149
Note:
See TracChangeset
for help on using the changeset viewer.