USB: isp1760: Use an IS_ERR test rather than a NULL test
authorJulien Brunel <brunel@diku.dk>
Wed, 24 Sep 2008 16:00:36 +0000 (18:00 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 17 Oct 2008 21:41:02 +0000 (14:41 -0700)
In case of error, the function isp1760_register returns an ERR
pointer, but never returns a NULL pointer. So after a call to this
function, a NULL test should be replaced by an IS_ERR test. Moreover,
we have noticed that:
(1) the result of isp1760_register is assigned through the function
pci_set_drvdata without an error test,
(2) if the call to isp1760_register fails, the current function
(isp1761_pci_probe) returns 0, and if it succeeds, it returns -ENOMEM,
which seems odd.

Thus, we suggest to move the test before the call to pci_set_drvdata
to correct (1), and to turn it into a non IS_ERR test to correct (2).

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

// <smpl>
@bad_null_test@
expression x,E;
statement S1, S2;
@@
x =  isp1760_register(...)
... when != x = E
* if (x == NULL)
S1 else S2
// </smpl>

Signed-off-by: Julien Brunel <brunel@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/host/isp1760-if.c

index 051ef7b6bdc640f99e0e17f2079b3929e73cab6f..ad44bd60df981b45c45c35d6faec76a6688061da 100644 (file)
@@ -232,9 +232,10 @@ static int __devinit isp1761_pci_probe(struct pci_dev *dev,
        hcd = isp1760_register(pci_mem_phy0, length, dev->irq,
                IRQF_SHARED | IRQF_DISABLED, &dev->dev, dev_name(&dev->dev),
                devflags);
-       pci_set_drvdata(dev, hcd);
-       if (!hcd)
+       if (!IS_ERR(hcd)) {
+               pci_set_drvdata(dev, hcd);
                return 0;
+       }
 clean:
        status = -ENODEV;
        iounmap(iobase);