Commit e4b8537c authored by Jonathan Nieder's avatar Jonathan Nieder Committed by Mauro Carvalho Chehab

[media] dvb-bt8xx: use goto based exception handling

Repeating the same cleanup code in each error handling path makes life
unnecessarily difficult for reviewers, who much check each instance of
the same copy+pasted code separately.  A "goto" to the end of the
function is more maintainable and conveys the intent more clearly.

While we're touching this code, also lift some assignments from "if"
conditionals for simplicity.

No functional change intended.
Signed-off-by: default avatarJonathan Nieder <jrnieder@gmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 5c96ebb7
...@@ -744,57 +744,42 @@ static int __devinit dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type) ...@@ -744,57 +744,42 @@ static int __devinit dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type)
card->demux.stop_feed = dvb_bt8xx_stop_feed; card->demux.stop_feed = dvb_bt8xx_stop_feed;
card->demux.write_to_decoder = NULL; card->demux.write_to_decoder = NULL;
if ((result = dvb_dmx_init(&card->demux)) < 0) { result = dvb_dmx_init(&card->demux);
if (result < 0) {
printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result);
goto err_unregister_adaptor;
dvb_unregister_adapter(&card->dvb_adapter);
return result;
} }
card->dmxdev.filternum = 256; card->dmxdev.filternum = 256;
card->dmxdev.demux = &card->demux.dmx; card->dmxdev.demux = &card->demux.dmx;
card->dmxdev.capabilities = 0; card->dmxdev.capabilities = 0;
if ((result = dvb_dmxdev_init(&card->dmxdev, &card->dvb_adapter)) < 0) { result = dvb_dmxdev_init(&card->dmxdev, &card->dvb_adapter);
if (result < 0) {
printk("dvb_bt8xx: dvb_dmxdev_init failed (errno = %d)\n", result); printk("dvb_bt8xx: dvb_dmxdev_init failed (errno = %d)\n", result);
goto err_dmx_release;
dvb_dmx_release(&card->demux);
dvb_unregister_adapter(&card->dvb_adapter);
return result;
} }
card->fe_hw.source = DMX_FRONTEND_0; card->fe_hw.source = DMX_FRONTEND_0;
if ((result = card->demux.dmx.add_frontend(&card->demux.dmx, &card->fe_hw)) < 0) { result = card->demux.dmx.add_frontend(&card->demux.dmx, &card->fe_hw);
if (result < 0) {
printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result);
goto err_dmxdev_release;
dvb_dmxdev_release(&card->dmxdev);
dvb_dmx_release(&card->demux);
dvb_unregister_adapter(&card->dvb_adapter);
return result;
} }
card->fe_mem.source = DMX_MEMORY_FE; card->fe_mem.source = DMX_MEMORY_FE;
if ((result = card->demux.dmx.add_frontend(&card->demux.dmx, &card->fe_mem)) < 0) { result = card->demux.dmx.add_frontend(&card->demux.dmx, &card->fe_mem);
if (result < 0) {
printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result);
goto err_remove_hw_frontend;
card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_hw);
dvb_dmxdev_release(&card->dmxdev);
dvb_dmx_release(&card->demux);
dvb_unregister_adapter(&card->dvb_adapter);
return result;
} }
if ((result = card->demux.dmx.connect_frontend(&card->demux.dmx, &card->fe_hw)) < 0) { result = card->demux.dmx.connect_frontend(&card->demux.dmx, &card->fe_hw);
if (result < 0) {
printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result);
goto err_remove_mem_frontend;
card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_mem);
card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_hw);
dvb_dmxdev_release(&card->dmxdev);
dvb_dmx_release(&card->demux);
dvb_unregister_adapter(&card->dvb_adapter);
return result;
} }
dvb_net_init(&card->dvb_adapter, &card->dvbnet, &card->demux.dmx); dvb_net_init(&card->dvb_adapter, &card->dvbnet, &card->demux.dmx);
...@@ -804,6 +789,18 @@ static int __devinit dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type) ...@@ -804,6 +789,18 @@ static int __devinit dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type)
frontend_init(card, type); frontend_init(card, type);
return 0; return 0;
err_remove_mem_frontend:
card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_mem);
err_remove_hw_frontend:
card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_hw);
err_dmxdev_release:
dvb_dmxdev_release(&card->dmxdev);
err_dmx_release:
dvb_dmx_release(&card->demux);
err_unregister_adaptor:
dvb_unregister_adapter(&card->dvb_adapter);
return result;
} }
static int __devinit dvb_bt8xx_probe(struct bttv_sub_device *sub) static int __devinit dvb_bt8xx_probe(struct bttv_sub_device *sub)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment