From c7eebacde9b5e6d1d7595ea873832d9d118ad26d Mon Sep 17 00:00:00 2001 From: krcroft Date: Sat, 29 Feb 2020 12:47:12 -0800 Subject: [PATCH] Allow the code to describe the return value --- src/dos/cdrom_image.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/dos/cdrom_image.cpp b/src/dos/cdrom_image.cpp index 6ee4231b..15e6bcc0 100644 --- a/src/dos/cdrom_image.cpp +++ b/src/dos/cdrom_image.cpp @@ -134,7 +134,15 @@ uint32_t CDROM_Interface_Image::BinaryFile::decode(int16_t *buffer, "Requested number of frames exceeds the maximum for a CDROM [Bug]"); file->read((char*)buffer, desired_track_frames * BYTES_PER_REDBOOK_PCM_FRAME); - return (file->gcount() + BYTES_PER_REDBOOK_PCM_FRAME - 1) / BYTES_PER_REDBOOK_PCM_FRAME; + /** + * Note: gcount returns a signed type, but according to specification: + * "Except in the constructors of std::strstreambuf, negative values of + * std::streamsize are never used."; so we store it as unsigned. + */ + const uint32_t bytes_read = static_cast(file->gcount()); + + // Return the number of decoded Redbook frames + return ceil_divide(bytes_read, BYTES_PER_REDBOOK_PCM_FRAME); } CDROM_Interface_Image::AudioFile::AudioFile(const char *filename, bool &error)