summaryrefslogtreecommitdiff
path: root/sys/src/9/port/devaudio.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-05-18 19:57:31 +0000
committercinap_lenrek <cinap_lenrek@localhost>2011-05-18 19:57:31 +0000
commitb74418c2ce5c64ba39473e2eb50ea1112be63109 (patch)
tree06b3c26e33277e9f2c5e7a2d345d12efdf5d552e /sys/src/9/port/devaudio.c
parente7e04b5cbbedfb1411fcc38b7e7f67db98a251c2 (diff)
sb16: new approach, works in qemu
Diffstat (limited to 'sys/src/9/port/devaudio.c')
-rw-r--r--sys/src/9/port/devaudio.c20
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;
}