ref: 36d797f8b638e97c753c9b32214bfefcdda9bc1b
parent: cc17845f6cf72cc78097e996d296cb57e317eb7e
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sun Apr 7 11:19:43 EDT 2024
nusb/audio: fix division by zero error I have a edirol usb 1.1 soundcard: ep4.0: audio csp 0x000101 vid 0x08bb did 0x2902 'Burr-Brown from TI ' 'USB Audio CODEC ' 76dd2 xhci Recent code changes produce the following errors and seems to leave some volume controls empty, causing later a division by zero crash. getvalue: mute: cur: Stall Error getvalue: volume: cur: Stall Error getvalue: volume: cur: Stall Error ... audio 269: suicide: sys: trap: divide error pc=0x201b25 The device doesnt appear to have digital volume controls or anything so i'm not really interested in getting it to work :) Just getting rid of the crash. The device works otherwise fine: % for(i in /dev/audioctlU* /dev/audiostatU*){echo $i; cat $i;} /dev/audioctlU76dd2 out on in on /dev/audiostatU76dd2 bufsize 0 buffered 0 fmtout u8c1r32000 u8c1r44100 u8c1r48000 u8c2r32000 u8c2r44100 u8c2r48000 s8c1r32000 s8c1r44100 s8c1r48000 s8c2r32000 s8c2r44100 s8c2r48000 s16c1r32000 s16c1r44100 s16c1r48000 s16c2r32000 s16c2r44100 s16c2r48000 fmtin s8c1r11025 s8c2r11025 s16c1r11025 s16c2r11025 s8c1r8000 s8c2r8000 s8c1r16000 s8c2r16000 s16c1r16000 s16c2r16000 s16c1r22050 s16c2r22050 s16c1r32000 s16c2r32000 s16c1r44100 s16c2r44100 s16c1r48000 s16c2r48000
--- a/sys/src/cmd/nusb/audio/audio.c
+++ b/sys/src/cmd/nusb/audio/audio.c
@@ -754,7 +754,10 @@
else {
n = (c->max - c->min);
x = (c->cur - c->min) * 100;
- x /= n;
+ if(n == 0)
+ x = 100;
+ else
+ x /= n;
}
}else{
x = !!c->cur;