History

[media] staging: lirc: clean error handling in probe()

We have reorganized the error handling into a simpler and more canonical format. Additionally we removed extra empty lines, switched to devm_kzalloc(), and substitute 'minor' by 'ret' in the igorplugusb_remote_probe() function.

Dan Carpenter committed 13 years ago

Commit 1444fbf1 parent 51dd4d71 file · +14 −42Browse files

Showing the changes to drivers/staging/media/lirc/lirc_igorplugusb.c (1 of 1 file). Show all

Unified · Split

drivers/staging/media/lirc/lirc_igorplugusb.c+14−42
@@ -240,10 +240,6 @@ static int unregister_from_lirc(struct igorplug *ir) · 239 unmodified lines
240240 dprintk(DRIVER_NAME "[%d]: calling lirc_unregister_driver\n", devnum);
241241 lirc_unregister_driver(d->minor);
242242
243− kfree(d);
244− ir->d = NULL;
245− kfree(ir);
246−
247243 return devnum;
248244 }
249245
@@ -377,20 +373,16 @@ static int igorplugusb_remote_poll(void *data, struct lirc_buffer *buf) · 127 unmodified lines
377373 return -ENODATA;
378374 }
379375
380−
381−
382376 static int igorplugusb_remote_probe(struct usb_interface *intf,
383377 const struct usb_device_id *id)
384378 {
385− struct usb_device *dev = NULL;
379+ struct usb_device *dev;
386380 struct usb_host_interface *idesc = NULL;
387381 struct usb_endpoint_descriptor *ep;
388382 struct igorplug *ir = NULL;
389383 struct lirc_driver *driver = NULL;
390384 int devnum, pipe, maxp;
391− int minor = 0;
392385 char buf[63], name[128] = "";
393− int mem_failure = 0;
394386 int ret;
395387
396388 dprintk(DRIVER_NAME ": usb probe called.\n");
@@ -416,24 +408,18 @@ static int igorplugusb_remote_probe(struct usb_interface *intf, · 19 unmodified lines
416408 dprintk(DRIVER_NAME "[%d]: bytes_in_key=%zu maxp=%d\n",
417409 devnum, CODE_LENGTH, maxp);
418410
419− mem_failure = 0;
420− ir = kzalloc(sizeof(struct igorplug), GFP_KERNEL);
421− if (!ir) {
422− mem_failure = 1;
423− goto mem_failure_switch;
424− }
425− driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
426− if (!driver) {
427− mem_failure = 2;
428− goto mem_failure_switch;
429− }
411+ ir = devm_kzalloc(&intf->dev, sizeof(*ir), GFP_KERNEL);
412+ if (!ir)
413+ return -ENOMEM;
414+
415+ driver = devm_kzalloc(&intf->dev, sizeof(*driver), GFP_KERNEL);
416+ if (!driver)
417+ return -ENOMEM;
430418
431419 ir->buf_in = usb_alloc_coherent(dev, DEVICE_BUFLEN + DEVICE_HEADERLEN,
432420 GFP_ATOMIC, &ir->dma_in);
433− if (!ir->buf_in) {
434− mem_failure = 3;
435− goto mem_failure_switch;
436− }
421+ if (!ir->buf_in)
422+ return -ENOMEM;
437423
438424 strcpy(driver->name, DRIVER_NAME " ");
439425 driver->minor = -1;
@@ -449,27 +435,14 @@ static int igorplugusb_remote_probe(struct usb_interface *intf, · 9 unmodified lines
449435 driver->dev = &intf->dev;
450436 driver->owner = THIS_MODULE;
451437
452− minor = lirc_register_driver(driver);
453− if (minor < 0)
454− mem_failure = 9;
455−
456−mem_failure_switch:
457−
458− switch (mem_failure) {
459− case 9:
438+ ret = lirc_register_driver(driver);
439+ if (ret < 0) {
460440 usb_free_coherent(dev, DEVICE_BUFLEN + DEVICE_HEADERLEN,
461441 ir->buf_in, ir->dma_in);
462− case 3:
463− kfree(driver);
464− case 2:
465− kfree(ir);
466− case 1:
467− printk(DRIVER_NAME "[%d]: out of memory (code=%d)\n",
468− devnum, mem_failure);
469− return -ENOMEM;
442+ return ret;
470443 }
471444
472− driver->minor = minor;
445+ driver->minor = ret;
473446 ir->d = driver;
474447 ir->devnum = devnum;
475448 ir->usbdev = dev;
@@ -502,7 +475,6 @@ mem_failure_switch: · 26 unmodified lines
502475 return 0;
503476 }
504477
505−
506478 static void igorplugusb_remote_disconnect(struct usb_interface *intf)
507479 {
508480 struct usb_device *usbdev = interface_to_usbdev(intf);