free can handle NULL ptr.
authorGaurav <g.gupta@samsung.com>
Fri, 19 Jun 2015 03:23:59 +0000 (08:53 +0530)
committerNathan Hjelm <hjelmn@me.com>
Sun, 6 Mar 2016 21:40:30 +0000 (14:40 -0700)
free(NULL) is no operation.

Contributed by @ya1gaurav.

Signed-off-by: Nathan Hjelm <hjelmn@me.com>
libusb/descriptor.c
libusb/version_nano.h

index ccf7fe4..d784be8 100644 (file)
@@ -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,
index 73a3620..87acb62 100644 (file)
@@ -1 +1 @@
-#define LIBUSB_NANO 11098
+#define LIBUSB_NANO 11099