1
0
Fork 0

Fix audio-related static analysis issues

This commit is contained in:
krcroft 2020-01-29 00:51:52 -08:00 committed by Patryk Obara
parent b040cb32c3
commit 93f9cd7e4e
4 changed files with 29 additions and 28 deletions

View file

@ -34,6 +34,11 @@
#define strncasecmp(a, b, n) _strnicmp(a, b, n)
#endif
// Include a message in assert, similar to static_assert:
#define assertm(exp, msg) assert(((void)msg, exp))
// Use (void) to silent unused warnings.
// https://en.cppreference.com/w/cpp/error/assert
/// Copy a string into C array
///
/// This function copies string pointed by src to fixed-size buffer dst.

View file

@ -667,7 +667,7 @@ track_iter CDROM_Interface_Image::GetTrack(const int sector)
if (lower_bound <= sector && sector < upper_bound) {
break;
}
track++;
++track;
lower_bound = upper_bound;
} // If we made it here without breaking, then the track
// wasn't found and the iterator is now the end() item.
@ -978,7 +978,7 @@ bool CDROM_Interface_Image::LoadCueSheet(char *cuefile)
// ignored commands
else if (command == "CDTEXTFILE" || command == "FLAGS" || command == "ISRC" ||
command == "PERFORMER" || command == "POSTGAP" || command == "REM" ||
command == "SONGWRITER" || command == "TITLE" || command == "") {
command == "SONGWRITER" || command == "TITLE" || command.empty()) {
success = true;
}
// failure

View file

@ -18,6 +18,7 @@
#include "dos_mscdex.h"
#include <cassert>
#include <cctype>
#include <cstring>
#include <sys/stat.h>
@ -174,11 +175,10 @@ public:
CMscdex::CMscdex()
: numDrives(0),
defaultBufSeg(0),
cdrom{nullptr},
rootDriverHeaderSeg(0)
{
memset(dinfo, 0, sizeof(dinfo));
for (auto &drive : cdrom)
drive = nullptr;
}
CMscdex::~CMscdex()
@ -282,10 +282,11 @@ int CMscdex::AddDrive(Bit16u _drive, char* physicalPath, Bit8u& subUnit)
if (rootDriverHeaderSeg==0) {
Bit16u driverSize = sizeof(DOS_DeviceHeader::sDeviceHeader) + 10; // 10 = Bytes for 3 callbacks
constexpr uint16_t driverSize = sizeof(DOS_DeviceHeader::sDeviceHeader) + 10; // 10 = Bytes for 3 callbacks
// Create Device Header
Bit16u seg = DOS_GetMemory(driverSize/16+((driverSize%16)>0));
static_assert((driverSize % 16) == 0, "should always be zero");
Bit16u seg = DOS_GetMemory(driverSize / 16);
DOS_DeviceHeader devHeader(PhysMake(seg,0));
devHeader.SetNextDeviceHeader (0xFFFFFFFF);
devHeader.SetAttribute(0xc800);
@ -710,8 +711,7 @@ bool CMscdex::GetDirectoryEntry(Bit16u drive, bool copyFlag, PhysPt pathname, Ph
LOG(LOG_MISC,LOG_WARN)("MSCDEX: GetDirEntry: Copyflag structure not entirely accurate maybe");
Bit8u readBuf[256];
Bit8u writeBuf[256];
if (entryLength > 256)
return false;
assertm(entryLength <= 256, "entryLength should never exceed 256");
MEM_BlockRead( defBuffer+index, readBuf, entryLength );
writeBuf[0] = readBuf[1]; // 00h BYTE length of XAR in Logical Block Numbers
memcpy( &writeBuf[1], &readBuf[0x2], 4); // 01h DWORD Logical Block Number of file start

View file

@ -345,28 +345,24 @@ static Sound_Sample *alloc_sample(SDL_RWops *rw, Sound_AudioInfo *desired)
* !!! FIXME: We're going to need to pool samples, since the mixer
* !!! FIXME: might be allocating tons of these on a regular basis.
*/
Sound_Sample *retval = malloc(sizeof (Sound_Sample));
Sound_Sample *retval = NULL;
Sound_Sample *sample = malloc(sizeof (Sound_Sample));
Sound_SampleInternal *internal = malloc(sizeof (Sound_SampleInternal));
if ((retval == NULL) || (internal == NULL))
{
if (sample && internal) {
memset(sample, '\0', sizeof (Sound_Sample));
memset(internal, '\0', sizeof (Sound_SampleInternal));
if (desired != NULL) {
memcpy(&sample->desired, desired, sizeof (Sound_AudioInfo));
}
internal->rw = rw;
sample->opaque = internal;
retval = sample;
} else {
__Sound_SetError(ERR_OUT_OF_MEMORY);
if (retval)
free(retval);
if (internal)
free(internal);
return(NULL);
} /* if */
memset(retval, '\0', sizeof (Sound_Sample));
memset(internal, '\0', sizeof (Sound_SampleInternal));
if (desired != NULL)
memcpy(&retval->desired, desired, sizeof (Sound_AudioInfo));
internal->rw = rw;
retval->opaque = internal;
return(retval);
free(sample);
free(internal);
}
return retval;
} /* alloc_sample */