From 98dd33c41ab12db437112b662821e7f133a4eac9 Mon Sep 17 00:00:00 2001 From: Gaurav Date: Fri, 19 Jun 2015 08:53:59 +0530 Subject: free can handle NULL ptr. free(NULL) is no operation. Contributed by @ya1gaurav. Signed-off-by: Nathan Hjelm --- libusb/descriptor.c | 46 ++++++++++++++++++---------------------------- 1 file changed, 18 insertions(+), 28 deletions(-) (limited to 'libusb/descriptor.c') diff --git a/libusb/descriptor.c b/libusb/descriptor.c index ccf7fe4..d784be8 100644 --- a/libusb/descriptor.c +++ b/libusb/descriptor.c @@ -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, -- cgit v1.2.1