Update of /cvsroot/alsa/alsa-kernel/isa/gus
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14161

Modified Files:
        gusextreme.c 
Log Message:
<[EMAIL PROTECTED]>
Whilst chasing an oops, I shortened some error paths.
(Also sets card to NULL when something goes wrong).


Index: gusextreme.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/isa/gus/gusextreme.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- gusextreme.c        14 Oct 2003 13:08:17 -0000      1.12
+++ gusextreme.c        15 Mar 2004 19:29:13 -0000      1.13
@@ -220,17 +220,17 @@
        xgf1_irq = gf1_irq[dev];
        if (xgf1_irq == SNDRV_AUTO_IRQ) {
                if ((xgf1_irq = snd_legacy_find_free_irq(possible_gf1_irqs)) < 0) {
-                       snd_card_free(card);
                        snd_printk("unable to find a free IRQ for GF1\n");
-                       return -EBUSY;
+                       err = -EBUSY;
+                       goto out;
                }
        }
        xess_irq = irq[dev];
        if (xess_irq == SNDRV_AUTO_IRQ) {
                if ((xess_irq = snd_legacy_find_free_irq(possible_ess_irqs)) < 0) {
-                       snd_card_free(card);
                        snd_printk("unable to find a free IRQ for ES1688\n");
-                       return -EBUSY;
+                       err = -EBUSY;
+                       goto out;
                }
        }
        if (mpu_port[dev] == SNDRV_AUTO_PORT)
@@ -241,26 +241,24 @@
        xgf1_dma = dma1[dev];
        if (xgf1_dma == SNDRV_AUTO_DMA) {
                if ((xgf1_dma = snd_legacy_find_free_dma(possible_gf1_dmas)) < 0) {
-                       snd_card_free(card);
                        snd_printk("unable to find a free DMA for GF1\n");
-                       return -EBUSY;
+                       err = -EBUSY;
+                       goto out;
                }
        }
        xess_dma = dma8[dev];
        if (xess_dma == SNDRV_AUTO_DMA) {
                if ((xess_dma = snd_legacy_find_free_dma(possible_ess_dmas)) < 0) {
-                       snd_card_free(card);
                        snd_printk("unable to find a free DMA for ES1688\n");
-                       return -EBUSY;
+                       err = -EBUSY;
+                       goto out;
                }
        }
 
        if ((err = snd_es1688_create(card, port[dev], mpu_port[dev],
                                     xess_irq, xmpu_irq, xess_dma,
-                                    ES1688_HW_1688, &es1688)) < 0) {
-               snd_card_free(card);
-               return err;
-       }
+                                    ES1688_HW_1688, &es1688)) < 0)
+               goto out;
        if (gf1_port[dev] < 0)
                gf1_port[dev] = port[dev] + 0x20;
        if ((err = snd_gus_create(card,
@@ -270,77 +268,65 @@
                                  -1,
                                  0, channels[dev],
                                  pcm_channels[dev], 0,
-                                 &gus)) < 0) {
-               snd_card_free(card);
-               return err;
-       }
-       if ((err = snd_gusextreme_detect(dev, card, gus, es1688)) < 0) {
-               snd_card_free(card);
-               return err;
-       }
+                                 &gus)) < 0)
+               goto out;
+
+       if ((err = snd_gusextreme_detect(dev, card, gus, es1688)) < 0)
+               goto out;
+
        snd_gusextreme_init(dev, gus);
-       if ((err = snd_gus_initialize(gus)) < 0) {
-               snd_card_free(card);
-               return err;
-       }
+       if ((err = snd_gus_initialize(gus)) < 0)
+               goto out;
+
        if (!gus->ess_flag) {
                snd_printdd("GUS Extreme soundcard was not detected at 0x%lx\n", 
gus->gf1.port);
-               snd_card_free(card);
-               return -ENODEV;
-       }
-       if ((err = snd_es1688_pcm(es1688, 0, NULL)) < 0) {
-               snd_card_free(card);
-               return err;
-       }
-       if ((err = snd_es1688_mixer(es1688)) < 0) {
-               snd_card_free(card);
-               return err;
+               err = -ENODEV;
+               goto out;
        }
+       if ((err = snd_es1688_pcm(es1688, 0, NULL)) < 0)
+               goto out;
+
+       if ((err = snd_es1688_mixer(es1688)) < 0)
+               goto out;
+
        snd_component_add(card, "ES1688");
        if (pcm_channels[dev] > 0) {
-               if ((err = snd_gf1_pcm_new(gus, 1, 1, NULL)) < 0) {
-                       snd_card_free(card);
-                       return err;
-               }
-       }
-       if ((err = snd_gf1_new_mixer(gus)) < 0) {
-               snd_card_free(card);
-               return err;
-       }
-       if ((err = snd_gusextreme_mixer(es1688)) < 0) {
-               snd_card_free(card);
-               return err;
+               if ((err = snd_gf1_pcm_new(gus, 1, 1, NULL)) < 0)
+                       goto out;
        }
+       if ((err = snd_gf1_new_mixer(gus)) < 0)
+               goto out;
+
+       if ((err = snd_gusextreme_mixer(es1688)) < 0)
+               goto out;
 
        if (snd_opl3_create(card, es1688->port, es1688->port + 2,
                            OPL3_HW_OPL3, 0, &opl3) < 0) {
                printk(KERN_ERR "gusextreme: opl3 not detected at 0x%lx\n", 
es1688->port);
        } else {
-               if ((err = snd_opl3_hwdep_new(opl3, 0, 2, NULL)) < 0) {
-                       snd_card_free(card);
-                       return err;
-               }
+               if ((err = snd_opl3_hwdep_new(opl3, 0, 2, NULL)) < 0)
+                       goto out;
        }
 
-       if (es1688->mpu_port >= 0x300) {
-               if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_ES1688,
+       if (es1688->mpu_port >= 0x300 &&
+           ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_ES1688,
                                               es1688->mpu_port, 0,
                                               xmpu_irq,
                                               SA_INTERRUPT,
-                                              NULL)) < 0) {
-                       snd_card_free(card);
-                       return err;
-               }
-       }
+                                              NULL)) < 0)
+               goto out;
 
        sprintf(card->longname, "Gravis UltraSound Extreme at 0x%lx, irq %i&%i, dma 
%i&%i",
                es1688->port, xgf1_irq, xess_irq, xgf1_dma, xess_dma);
-       if ((err = snd_card_register(card)) < 0) {
-               snd_card_free(card);
-               return err;
-       }
+       if ((err = snd_card_register(card)) < 0)
+               goto out;
+
        snd_gusextreme_cards[dev] = card;
        return 0;
+
+      out:
+       snd_card_free(card);
+       return err;
 }
 
 static int __init snd_gusextreme_legacy_auto_probe(unsigned long xport)



-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to