diff --git a/source/Disk.cpp b/source/Disk.cpp index c286bfe3..05761012 100644 --- a/source/Disk.cpp +++ b/source/Disk.cpp @@ -1336,11 +1336,12 @@ static void DiskLoadSnapshotDriveUnit(YamlLoadHelper& yamlLoadHelper, UINT unit) g_aFloppyDisk[unit].trackimagedata = yamlLoadHelper.LoadUint(SS_YAML_KEY_TRACK_IMAGE_DATA); g_aFloppyDisk[unit].trackimagedirty = yamlLoadHelper.LoadUint(SS_YAML_KEY_TRACK_IMAGE_DIRTY); - std::auto_ptr pTrack( new BYTE [NIBBLES_PER_TRACK] ); - memset(pTrack.get(), 0, NIBBLES_PER_TRACK); + std::vector track; + track.resize(NIBBLES_PER_TRACK); + memset(&track[0], 0, track.size()); if (yamlLoadHelper.GetSubMap(SS_YAML_KEY_TRACK_IMAGE)) { - yamlLoadHelper.LoadMemory(pTrack.get(), NIBBLES_PER_TRACK); + yamlLoadHelper.LoadMemory(&track[0], NIBBLES_PER_TRACK); yamlLoadHelper.PopMap(); } @@ -1356,7 +1357,7 @@ static void DiskLoadSnapshotDriveUnit(YamlLoadHelper& yamlLoadHelper, UINT unit) if (g_aFloppyDisk[unit].trackimage == NULL) bImageError = true; else - memcpy(g_aFloppyDisk[unit].trackimage, pTrack.get(), NIBBLES_PER_TRACK); + memcpy(g_aFloppyDisk[unit].trackimage, &track[0], NIBBLES_PER_TRACK); } if (bImageError) diff --git a/source/DiskImageHelper.cpp b/source/DiskImageHelper.cpp index d631c597..a2b21ec8 100644 --- a/source/DiskImageHelper.cpp +++ b/source/DiskImageHelper.cpp @@ -192,9 +192,6 @@ bool CImageBase::WriteBlock(ImageInfo* pImageInfo, const int nBlock, LPBYTE pBlo // Horribly inefficient! (Unzip to a normal file if you want better performance!) const UINT uNewImageSize = Offset+HD_BLOCK_SIZE; BYTE* pNewImageBuffer = new BYTE [uNewImageSize]; - _ASSERT(pNewImageBuffer); - if (!pNewImageBuffer) - return false; memcpy(pNewImageBuffer, pImageInfo->pImageBuffer, pImageInfo->uImageSize); memset(&pNewImageBuffer[pImageInfo->uImageSize], 0, uNewImageSize-pImageInfo->uImageSize); // Should always be HD_BLOCK_SIZE (so this is redundant) @@ -1153,8 +1150,6 @@ ImageError_e CImageHelperBase::CheckGZipFile(LPCTSTR pszImageFilename, ImageInfo const UINT MAX_UNCOMPRESSED_SIZE = GetMaxImageSize() + 1; // +1 to detect images that are too big pImageInfo->pImageBuffer = new BYTE[MAX_UNCOMPRESSED_SIZE]; - if (!pImageInfo->pImageBuffer) - return eIMAGE_ERROR_BAD_POINTER; int nLen = gzread(hGZFile, pImageInfo->pImageBuffer, MAX_UNCOMPRESSED_SIZE); if (nLen < 0 || nLen == MAX_UNCOMPRESSED_SIZE) @@ -1222,8 +1217,6 @@ ImageError_e CImageHelperBase::CheckZipFile(LPCTSTR pszImageFilename, ImageInfo* return eIMAGE_ERROR_BAD_SIZE; pImageInfo->pImageBuffer = new BYTE[uFileSize]; - if (!pImageInfo->pImageBuffer) - return eIMAGE_ERROR_BAD_POINTER; nRes = unzOpenCurrentFile(hZipFile); if (nRes != UNZ_OK) @@ -1352,8 +1345,6 @@ ImageError_e CImageHelperBase::CheckNormalFile(LPCTSTR pszImageFilename, ImageIn const UINT uDetectSize = GetMinDetectSize(dwSize, &bTempDetectBuffer); pImageInfo->pImageBuffer = new BYTE [dwSize]; - if (!pImageInfo->pImageBuffer) - return eIMAGE_ERROR_BAD_POINTER; DWORD dwBytesRead; BOOL bRes = ReadFile(hFile, pImageInfo->pImageBuffer, dwSize, &dwBytesRead, NULL); @@ -1377,9 +1368,6 @@ ImageError_e CImageHelperBase::CheckNormalFile(LPCTSTR pszImageFilename, ImageIn if (pImageType && dwSize) { pImageInfo->pImageBuffer = new BYTE [dwSize]; - if (!pImageInfo->pImageBuffer) - return eIMAGE_ERROR_BAD_POINTER; - ZeroMemory(pImageInfo->pImageBuffer, dwSize); } } diff --git a/source/Speaker.cpp b/source/Speaker.cpp index ff58a7fd..328093a9 100644 --- a/source/Speaker.cpp +++ b/source/Speaker.cpp @@ -130,7 +130,7 @@ static void InitRemainderBuffer() SetClksPerSpkrSample(); g_nRemainderBufferSize = (UINT) g_fClksPerSpkrSample; - if ((double)g_nRemainderBufferSize != g_fClksPerSpkrSample) + if ((double)g_nRemainderBufferSize < g_fClksPerSpkrSample) g_nRemainderBufferSize++; g_pRemainderBuffer = new short [g_nRemainderBufferSize]; @@ -339,10 +339,10 @@ BYTE __stdcall SpkrToggle (WORD, WORD, BYTE, BYTE, ULONG nCyclesLeft) if (g_bQuieterSpeaker) { // quieten the speaker if 8 bit DAC in use - if (g_nSpeakerData == (SPKR_DATA_INIT >> 2)) + if (g_nSpeakerData == (SPKR_DATA_INIT/4)) // NB. Don't shift -ve number right: undefined behaviour (MSDN says: implementation-dependent) g_nSpeakerData = ~g_nSpeakerData; else - g_nSpeakerData = SPKR_DATA_INIT>>2; + g_nSpeakerData = SPKR_DATA_INIT/4; // NB. Don't shift -ve number right: undefined behaviour (MSDN says: implementation-dependent) } else { diff --git a/source/Tfe/Uilib.cpp b/source/Tfe/Uilib.cpp index 262c5883..b350b8ce 100644 --- a/source/Tfe/Uilib.cpp +++ b/source/Tfe/Uilib.cpp @@ -58,6 +58,12 @@ void uilib_get_general_window_extents(HWND hwnd, int *xsize, int *ysize) strlen = SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0); /* RGJ added cast for AppleWin */ buffer = (char *) malloc(strlen + 1); + if (buffer == NULL) // TC: add null check for AppleWin + { + *xsize = 0; + *ysize = 0; + return; + } GetWindowText(hwnd, buffer, strlen + 1); hdc = GetDC(hwnd); diff --git a/source/Tfe/Uilib.h b/source/Tfe/Uilib.h index f8ec8c8e..22865eab 100644 --- a/source/Tfe/Uilib.h +++ b/source/Tfe/Uilib.h @@ -32,8 +32,6 @@ #include #include -extern void uilib_get_general_window_extents(HWND hwnd, int *xsize, int *ysize); - typedef struct { unsigned int idc; int element_type;