drivers/usb/class/usblp.c: adjust error handling code
authorJulia Lawall <julia@diku.dk>
Wed, 16 Jul 2008 16:00:42 +0000 (18:00 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 17 Oct 2008 21:40:51 +0000 (14:40 -0700)
In this code, it is possible to tell statically whether usblp will be NULL
in the error handling code.

Oliver Neukum suggested to make a goto to the final return rather than
return directly.

The semantic match that finds this problem is as follows:
(http://www.emn.fr/x-info/coccinelle/)

// <smpl>
@@
identifier f,err,l,l1;
type T;
expression x,E;
statement S;
@@

x = NULL
... when != goto l1;
* x = f(...)
... when != x
err = E;
goto l;
...
* if (x != NULL)
  S
return err;
// </smpl>

Signed-off-by: Julia Lawall <julia@diku.dk>
Cc: Pete Zaitcev <zaitcev@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/class/usblp.c

index 0647164d36db562758cde201619d98e5ed9327a1..68a2239cd0b686211c9ac5b4df2f9cbb1371ad97 100644 (file)
@@ -1076,15 +1076,16 @@ static int usblp_probe(struct usb_interface *intf,
                       const struct usb_device_id *id)
 {
        struct usb_device *dev = interface_to_usbdev (intf);
-       struct usblp *usblp = NULL;
+       struct usblp *usblp;
        int protocol;
        int retval;
 
        /* Malloc and start initializing usblp structure so we can use it
         * directly. */
-       if (!(usblp = kzalloc(sizeof(struct usblp), GFP_KERNEL))) {
+       usblp = kzalloc(sizeof(struct usblp), GFP_KERNEL);
+       if (!usblp) {
                retval = -ENOMEM;
-               goto abort;
+               goto abort_ret;
        }
        usblp->dev = dev;
        mutex_init(&usblp->wmut);
@@ -1179,12 +1180,11 @@ abort_intfdata:
        usb_set_intfdata (intf, NULL);
        device_remove_file(&intf->dev, &dev_attr_ieee1284_id);
 abort:
-       if (usblp) {
-               kfree(usblp->readbuf);
-               kfree(usblp->statusbuf);
-               kfree(usblp->device_id_string);
-               kfree(usblp);
-       }
+       kfree(usblp->readbuf);
+       kfree(usblp->statusbuf);
+       kfree(usblp->device_id_string);
+       kfree(usblp);
+abort_ret:
        return retval;
 }