Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbdev/src/altiface.c

    rab27e01 re978ada  
    9090 * @return Error code.
    9191 */
    92 int usb_alternate_interfaces_init(usb_alternate_interfaces_t *alternates,
    93     const uint8_t *config_descr, size_t config_descr_size, int interface_number)
     92int usb_alternate_interfaces_create(const uint8_t *config_descr,
     93    size_t config_descr_size, int interface_number,
     94    usb_alternate_interfaces_t **alternates_ptr)
    9495{
    95         assert(alternates != NULL);
     96        assert(alternates_ptr != NULL);
    9697        assert(config_descr != NULL);
    9798        assert(config_descr_size > 0);
    9899
    99         alternates->alternatives = NULL;
    100         alternates->alternative_count = 0;
    101         alternates->current = 0;
    102 
     100        *alternates_ptr = NULL;
    103101        if (interface_number < 0) {
    104102                return EOK;
     103        }
     104
     105        usb_alternate_interfaces_t *alternates
     106            = malloc(sizeof(usb_alternate_interfaces_t));
     107        if (alternates == NULL) {
     108                return ENOMEM;
    105109        }
    106110
     
    110114
    111115        if (alternates->alternative_count == 0) {
     116                free(alternates);
    112117                return ENOENT;
    113118        }
     
    116121            sizeof(usb_alternate_interface_descriptors_t));
    117122        if (alternates->alternatives == NULL) {
     123                free(alternates);
    118124                return ENOMEM;
    119125        }
    120126
    121         const usb_dp_parser_t dp_parser = {
     127        alternates->current = 0;
     128
     129        usb_dp_parser_t dp_parser = {
    122130                .nesting = usb_dp_standard_descriptor_nesting
    123131        };
    124         const usb_dp_parser_data_t dp_data = {
     132        usb_dp_parser_data_t dp_data = {
    125133                .data = config_descr,
    126134                .size = config_descr_size,
     
    139147                    || (iface->interface_number != interface_number)) {
    140148                        iface_ptr = usb_dp_get_sibling_descriptor(&dp_parser,
    141                             &dp_data, dp_data.data, iface_ptr);
     149                            &dp_data,
     150                            dp_data.data, iface_ptr);
    142151                        continue;
    143152                }
     
    161170        }
    162171
     172        *alternates_ptr = alternates;
     173
    163174        return EOK;
    164175}
    165176
    166 void usb_alternate_interfaces_deinit(usb_alternate_interfaces_t *alternate)
     177void usb_alternate_interfaces_destroy(usb_alternate_interfaces_t *alternate)
    167178{
    168179        if (!alternate)
    169180                return;
    170181        free(alternate->alternatives);
     182        free(alternate);
    171183}
    172184/**
Note: See TracChangeset for help on using the changeset viewer.