From f831d6e8dfd8f02b87d46b5492b5b4fc46e423da Mon Sep 17 00:00:00 2001
From: yanmorin <yanmorin>
Date: Fri, 1 Sep 2006 14:56:51 +0000
Subject: [PATCH] Remove segfault with float and mic/speaker < 100

---
 src/audio/ringbuffer.cpp | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/audio/ringbuffer.cpp b/src/audio/ringbuffer.cpp
index fb3c53dc3c..3176cc728a 100644
--- a/src/audio/ringbuffer.cpp
+++ b/src/audio/ringbuffer.cpp
@@ -92,9 +92,9 @@ RingBuffer::Put(void* buffer, int toCopy, unsigned short volume) {
 
       // put the data inside the buffer.
       if (volume!=100) {
-        SFLDataFormat* src16 = (SFLDataFormat*)src;
-        int int16len = (block >> 1);
-        for (int i=0; i < int16len; i++) { src16[i] = src16[i] * volume / 100; }
+        SFLDataFormat* start = (SFLDataFormat*)src;
+        int nbSample = block / sizeof(SFLDataFormat);
+        for (int i=0; i<nbSample; i++) { start[i] = start[i] * volume / 100; }
       }
       // bcopy(src, dest, len)
       //fprintf(stderr, "has %d put %d\t", len, block);
@@ -143,8 +143,8 @@ RingBuffer::Get(void *buffer, int toCopy, unsigned short volume) {
 
       if(volume!=100) {
         SFLDataFormat* start = (SFLDataFormat*)(mBuffer + mStart);
-        int int16len = (block >> 1);
-        for (int i=0; i<int16len; i++) { start[i] = start[i] * volume / 100; }
+        int nbSample = block / sizeof(SFLDataFormat);
+        for (int i=0; i<nbSample; i++) { start[i] = start[i] * volume / 100; }
       }
       // bcopy(src, dest, len)
       bcopy (mBuffer + mStart, dest, block);
-- 
GitLab