diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-18 19:57:31 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-18 19:57:31 +0000 |
commit | b74418c2ce5c64ba39473e2eb50ea1112be63109 (patch) | |
tree | 06b3c26e33277e9f2c5e7a2d345d12efdf5d552e /sys/src/9/port/devaudio.c | |
parent | e7e04b5cbbedfb1411fcc38b7e7f67db98a251c2 (diff) |
sb16: new approach, works in qemu
Diffstat (limited to 'sys/src/9/port/devaudio.c')
-rw-r--r-- | sys/src/9/port/devaudio.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/sys/src/9/port/devaudio.c b/sys/src/9/port/devaudio.c index 89d756f56..9234e15a9 100644 --- a/sys/src/9/port/devaudio.c +++ b/sys/src/9/port/devaudio.c @@ -18,6 +18,7 @@ enum { Qaudioctl, Qaudiostatus, Qvolume, + Maxaudioprobes = 8, }; @@ -48,19 +49,26 @@ audioreset(void) int i, ctlrno = 0; Audio **pp; Audioprobe *probe; + pp = &audiodevs; *pp = malloc(sizeof(Audio)); - (*pp)->ctlrno = ctlrno++; - for(i = 0; i < naudioprobes; i++){ + + for(i=0; i<naudioprobes; i++){ probe = &audioprobes[i]; - (*pp)->name = probe->name; - while(!probe->probe(*pp)){ + + for(;;){ + memset(*pp, 0, sizeof(Audio)); + (*pp)->ctlrno = ctlrno; + (*pp)->name = probe->name; + if(probe->probe(*pp)) + break; + + ctlrno++; pp = &(*pp)->next; *pp = malloc(sizeof(Audio)); - (*pp)->ctlrno = ctlrno++; - (*pp)->name = probe->name; } } + free(*pp); *pp = nil; } |