Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbvirt/src/ctrltransfer.c

    r9d58539 r58563585  
    5050 */
    5151int process_control_transfer(usbvirt_device_t *dev,
    52     usbvirt_control_request_handler_t *control_handlers,
    53     usb_device_request_setup_packet_t *setup,
     52    const usbvirt_control_request_handler_t *control_handlers,
     53    const usb_device_request_setup_packet_t *setup,
    5454    uint8_t *data, size_t *data_sent_size)
    5555{
     
    6060                return EFORWARD;
    6161        }
    62 
    63         usb_direction_t direction = setup->request_type & 128 ?
    64             USB_DIRECTION_IN : USB_DIRECTION_OUT;
    65         usb_request_recipient_t req_recipient = setup->request_type & 31;
    66         usb_request_type_t req_type = (setup->request_type >> 5) & 3;
    67 
    68         usbvirt_control_request_handler_t *handler = control_handlers;
    69         while (handler->callback != NULL) {
    70                 if (handler->req_direction != direction) {
    71                         goto next;
    72                 }
    73                 if (handler->req_recipient != req_recipient) {
    74                         goto next;
    75                 }
    76                 if (handler->req_type != req_type) {
    77                         goto next;
    78                 }
    79                 if (handler->request != setup->request) {
    80                         goto next;
     62       
     63        const usbvirt_control_request_handler_t *handler = control_handlers;
     64        for (;handler->callback != NULL; ++handler) {
     65                if (handler->request != setup->request ||
     66                    handler->request_type != setup->request_type) {
     67                        continue;
    8168                }
    8269
     
    8471                    usb_debug_str_buffer((uint8_t*) setup, sizeof(*setup), 0));
    8572                int rc = handler->callback(dev, setup, data, data_sent_size);
    86                 if (rc == EFORWARD) {
    87                         goto next;
     73                if (rc != EFORWARD) {
     74                        return rc;
    8875                }
    8976
    90                 return rc;
    91 
    92 next:
    93                 handler++;
    9477        }
    9578
Note: See TracChangeset for help on using the changeset viewer.