mirror of
https://github.com/RPCS3/libusb.git
synced 2026-07-21 00:16:04 -04:00
free can handle NULL ptr.
free(NULL) is no operation. Contributed by @ya1gaurav. Signed-off-by: Nathan Hjelm <hjelmn@me.com>
This commit is contained in:
+18
-28
@@ -94,8 +94,7 @@ int usbi_parse_descriptor(const unsigned char *source, const char *descriptor,
|
||||
|
||||
static void clear_endpoint(struct libusb_endpoint_descriptor *endpoint)
|
||||
{
|
||||
if (endpoint->extra)
|
||||
free((unsigned char *) endpoint->extra);
|
||||
free(endpoint->extra);
|
||||
}
|
||||
|
||||
static int parse_endpoint(struct libusb_context *ctx,
|
||||
@@ -193,24 +192,18 @@ static void clear_interface(struct libusb_interface *usb_interface)
|
||||
int i;
|
||||
int j;
|
||||
|
||||
if (usb_interface->altsetting) {
|
||||
for (i = 0; i < usb_interface->num_altsetting; i++) {
|
||||
struct libusb_interface_descriptor *ifp =
|
||||
(struct libusb_interface_descriptor *)
|
||||
usb_interface->altsetting + i;
|
||||
if (ifp->extra)
|
||||
free((void *) ifp->extra);
|
||||
if (ifp->endpoint) {
|
||||
for (j = 0; j < ifp->bNumEndpoints; j++)
|
||||
clear_endpoint((struct libusb_endpoint_descriptor *)
|
||||
ifp->endpoint + j);
|
||||
free((void *) ifp->endpoint);
|
||||
}
|
||||
}
|
||||
free((void *) usb_interface->altsetting);
|
||||
usb_interface->altsetting = NULL;
|
||||
for (i = 0; i < usb_interface->num_altsetting; i++) {
|
||||
struct libusb_interface_descriptor *ifp =
|
||||
(struct libusb_interface_descriptor *)
|
||||
usb_interface->altsetting + i;
|
||||
free(ifp->extra);
|
||||
for (j = 0; j < ifp->bNumEndpoints; j++)
|
||||
clear_endpoint((struct libusb_endpoint_descriptor *)
|
||||
ifp->endpoint + j);
|
||||
free(ifp->endpoint);
|
||||
}
|
||||
|
||||
free(usb_interface->altsetting);
|
||||
usb_interface->altsetting = NULL;
|
||||
}
|
||||
|
||||
static int parse_interface(libusb_context *ctx,
|
||||
@@ -361,15 +354,12 @@ err:
|
||||
|
||||
static void clear_configuration(struct libusb_config_descriptor *config)
|
||||
{
|
||||
if (config->interface) {
|
||||
int i;
|
||||
for (i = 0; i < config->bNumInterfaces; i++)
|
||||
clear_interface((struct libusb_interface *)
|
||||
config->interface + i);
|
||||
free((void *) config->interface);
|
||||
}
|
||||
if (config->extra)
|
||||
free((void *) config->extra);
|
||||
int i;
|
||||
for (i = 0; i < config->bNumInterfaces; i++)
|
||||
clear_interface((struct libusb_interface *)
|
||||
config->interface + i);
|
||||
free(config->interface);
|
||||
free(config->extra);
|
||||
}
|
||||
|
||||
static int parse_configuration(struct libusb_context *ctx,
|
||||
|
||||
@@ -1 +1 @@
|
||||
#define LIBUSB_NANO 11098
|
||||
#define LIBUSB_NANO 11099
|
||||
|
||||
Reference in New Issue
Block a user