unsigned char *buffer, int size)
{
struct usb_descriptor_header header;
+ unsigned char *extra;
unsigned char *begin;
int parsed = 0;
int len;
return parsed;
}
- endpoint->extra = malloc(len);
- if (!endpoint->extra) {
+ extra = malloc(len);
+ endpoint->extra = extra;
+ if (!extra) {
endpoint->extralen = 0;
return parsed;
}
- memcpy(endpoint->extra, begin, len);
+ memcpy(extra, begin, len);
endpoint->extralen = len;
return parsed;
interface->num_altsetting = 0;
while (size >= INTERFACE_DESC_LENGTH) {
- interface->altsetting = realloc(interface->altsetting,
+ struct libusb_interface_descriptor *altsetting =
+ (struct libusb_interface_descriptor *) interface->altsetting;
+ altsetting = realloc(altsetting,
sizeof(struct libusb_interface_descriptor) *
(interface->num_altsetting + 1));
- if (!interface->altsetting)
+ if (!altsetting)
return -1;
+ interface->altsetting = altsetting;
- ifp = interface->altsetting + interface->num_altsetting;
+ ifp = altsetting + interface->num_altsetting;
interface->num_altsetting++;
usbi_parse_descriptor(buffer, "bbbbbbbbb", ifp);
ifp->extra = NULL;
ifp->extralen = 0;
} else {
- ifp->extra = malloc(len);
- if (!ifp->extra) {
+ unsigned char *extra = malloc(len);
+ ifp->extra = extra;
+ if (!extra) {
ifp->extralen = 0;
/* FIXME will leak memory */
return -1;
}
- memcpy(ifp->extra, begin, len);
+ memcpy(extra, begin, len);
ifp->extralen = len;
}
}
if (ifp->bNumEndpoints > 0) {
+ struct libusb_endpoint_descriptor *endpoint;
tmp = ifp->bNumEndpoints * sizeof(struct libusb_endpoint_descriptor);
- ifp->endpoint = malloc(tmp);
- if (!ifp->endpoint)
+ endpoint = malloc(tmp);
+ ifp->endpoint = endpoint;
+ if (!endpoint)
/* FIXME will leak memory? */
return -1;
- memset(ifp->endpoint, 0, tmp);
+ memset(endpoint, 0, tmp);
for (i = 0; i < ifp->bNumEndpoints; i++) {
usbi_parse_descriptor(buffer, "bb", &header);
return -1;
}
- r = parse_endpoint(ifp->endpoint + i, buffer, size);
+ r = parse_endpoint(endpoint + i, buffer, size);
if (r < 0)
/* FIXME will leak memory */
return r;
int size;
int tmp;
struct usb_descriptor_header header;
+ struct libusb_interface *interface;
usbi_parse_descriptor(buffer, "bbwbbbbb", config);
size = config->wTotalLength;
}
tmp = config->bNumInterfaces * sizeof(struct libusb_interface);
- config->interface = malloc(tmp);
+ interface = malloc(tmp);
+ config->interface = interface;
if (!config->interface)
return -1;
- memset(config->interface, 0, tmp);
+ memset(interface, 0, tmp);
buffer += config->bLength;
size -= config->bLength;
if (len) {
/* FIXME: We should realloc and append here */
if (!config->extralen) {
- config->extra = malloc(len);
- if (!config->extra) {
+ unsigned char *extra = malloc(len);
+ config->extra = extra;
+ if (!extra) {
config->extralen = 0;
/* FIXME will leak memory */
return -1;
}
- memcpy(config->extra, begin, len);
+ memcpy(extra, begin, len);
config->extralen = len;
}
}
- r = parse_interface(config->interface + i, buffer, size);
+ r = parse_interface(interface + i, buffer, size);
if (r < 0)
return r;
* \param dev the device
* \returns the USB device descriptor
*/
-API_EXPORTED struct libusb_device_descriptor *libusb_get_device_descriptor(
+API_EXPORTED const struct libusb_device_descriptor *libusb_get_device_descriptor(
struct libusb_device *dev)
{
return &dev->desc;
* \param dev the device
* \returns the USB configuration descriptor
*/
-API_EXPORTED struct libusb_config_descriptor *libusb_get_config_descriptor(
+API_EXPORTED const struct libusb_config_descriptor *libusb_get_config_descriptor(
struct libusb_device *dev)
{
return dev->config;
uint8_t bRefresh;
uint8_t bSynchAddress;
- unsigned char *extra; /* Extra descriptors */
+ const unsigned char *extra; /* Extra descriptors */
int extralen;
};
/** Array of endpoint descriptors. This length of this array is determined
* by the bNumEndpoints field. */
- struct libusb_endpoint_descriptor *endpoint;
+ const struct libusb_endpoint_descriptor *endpoint;
- unsigned char *extra; /* Extra descriptors */
+ const unsigned char *extra; /* Extra descriptors */
int extralen;
};
struct libusb_interface {
/** Array of interface descriptors. The length of this array is determined
* by the num_altsetting field. */
- struct libusb_interface_descriptor *altsetting;
+ const struct libusb_interface_descriptor *altsetting;
/** The number of alternate settings that belong to this interface */
int num_altsetting;
/** Array of interfaces supported by this configuration. The length of
* this array is determined by the bNumInterfaces field. */
- struct libusb_interface *interface;
+ const struct libusb_interface *interface;
- unsigned char *extra; /* Extra descriptors */
+ const unsigned char *extra; /* Extra descriptors */
int extralen;
};
int libusb_get_device_list(libusb_device ***list);
void libusb_free_device_list(libusb_device **list, int unref_devices);
-struct libusb_device_descriptor *libusb_get_device_descriptor(
+const struct libusb_device_descriptor *libusb_get_device_descriptor(
libusb_device *dev);
-struct libusb_config_descriptor *libusb_get_config_descriptor(
+const struct libusb_config_descriptor *libusb_get_config_descriptor(
libusb_device *dev);
libusb_device *libusb_device_ref(libusb_device *dev);
void libusb_device_unref(libusb_device *dev);
int libusb_handle_events_timeout(struct timeval *tv);
int libusb_handle_events(void);
int libusb_get_next_timeout(struct timeval *tv);
-struct libusb_pollfd **libusb_get_pollfds(void);
+const struct libusb_pollfd **libusb_get_pollfds(void);
typedef void (*libusb_pollfd_added_cb)(int fd, short events);
typedef void (*libusb_pollfd_removed_cb)(int fd);