From b39cca1c30b0424a567d3826a8038946404cf0a6 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Wed, 7 Dec 2016 14:29:08 +0300 Subject: Fixed crash in the DosBox version (because after std::vector's resize, contents is uninitialized, Valgrind has been confirmed that) --- src/adlmidi.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'src/adlmidi.cpp') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index 02e78c6..4527d5c 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -48,6 +48,7 @@ #include // deque #include // exp, log, ceil #include +#include // numeric_limit #include #include @@ -57,7 +58,6 @@ #include "dbopl.h" #else #include "nukedopl3.h" -#include #endif #include "adldata.hh" @@ -202,10 +202,10 @@ struct OPL3 // 7 = percussion Hihat // 8 = percussion slave - void Poke(size_t card, unsigned index, unsigned value) + void Poke(size_t card, uint32_t index, uint32_t value) { #ifdef ADLMIDI_USE_DOSBOX_OPL - cards[card].WriteReg(index, value); + cards[card].WriteReg(index, static_cast(value)); #else OPL3_WriteReg(&cards[card], static_cast(index), static_cast(value)); #endif @@ -213,7 +213,7 @@ struct OPL3 void PokeN(size_t card, uint16_t index, uint8_t value) { #ifdef ADLMIDI_USE_DOSBOX_OPL - cards[card].WriteReg(static_cast(index), static_cast(value)); + cards[card].WriteReg(static_cast(index), value); #else OPL3_WriteReg(&cards[card], index, value); #endif @@ -428,7 +428,16 @@ struct OPL3 void Reset() { LogarithmicVolumes = false; +#ifdef ADLMIDI_USE_DOSBOX_OPL + DBOPL::Handler emptyChip; +#else + _opl3_chip emptyChip; +#endif cards.resize(NumCards); + + for(unsigned int i = 0; i < NumCards; i++) + cards[i] = emptyChip; + NumChannels = NumCards * 23; ins.resize(NumChannels, 189); pit.resize(NumChannels, 0); @@ -2841,7 +2850,7 @@ ADLMIDI_EXPORT int adl_play(ADL_MIDIPlayer *device, int sampleCount, short *out) else if(n_samples > 0) { #ifdef ADLMIDI_USE_DOSBOX_OPL - std::vector in; + std::vector in; in.resize(1024); /*n_samples * 2 */ ssize_t in_count = n_samples; #endif -- cgit v1.2.3