From b315bc3be060dfe4875f63cf4b768f6238bbd3cc Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 10 Mar 2018 20:33:49 +0100 Subject: [PATCH] - added a few more FileRdr replacements - fixed: The streaming music player must return the file reader if it fails to open, so that the next player can still use it. - fixed: Timidity++'s Instruments class did not delete the sound font when it was destroyed. ..- --- src/d_dehacked.cpp | 6 +++--- src/g_game.cpp | 4 ++-- src/m_misc.cpp | 6 +++--- src/sc_man.cpp | 4 ++-- src/sound/i_soundfont.cpp | 12 ++++++------ src/sound/mpg123_decoder.cpp | 3 ++- src/sound/sndfile_decoder.cpp | 3 ++- src/sound/timiditypp/instrum.cpp | 2 ++ src/textures/buildtexture.cpp | 6 +++--- 9 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/d_dehacked.cpp b/src/d_dehacked.cpp index ddabdb772..d92aef424 100644 --- a/src/d_dehacked.cpp +++ b/src/d_dehacked.cpp @@ -2492,11 +2492,11 @@ bool D_LoadDehLump(int lumpnum) bool D_LoadDehFile(const char *patchfile) { - FileReader fr; + FileRdr fr; - if (fr.Open(patchfile)) + if (fr.OpenFile(patchfile)) { - PatchSize = fr.GetLength(); + PatchSize = (int)fr.GetLength(); PatchName = copystring(patchfile); PatchFile = new char[PatchSize + 1]; diff --git a/src/g_game.cpp b/src/g_game.cpp index 2ca349631..836805677 100644 --- a/src/g_game.cpp +++ b/src/g_game.cpp @@ -2801,8 +2801,8 @@ void G_DoPlayDemo (void) { FixPathSeperator (defdemoname); DefaultExtension (defdemoname, ".lmp"); - FileReader fr; - if (!fr.Open(defdemoname)) + FileRdr fr; + if (!fr.OpenFile(defdemoname)) { I_Error("Unable to open demo '%s'", defdemoname.GetChars()); } diff --git a/src/m_misc.cpp b/src/m_misc.cpp index 481f956b5..4f13802ce 100644 --- a/src/m_misc.cpp +++ b/src/m_misc.cpp @@ -121,15 +121,15 @@ void M_FindResponseFile (void) if (added_stuff < limit) { // READ THE RESPONSE FILE INTO MEMORY - FileReader fr; - if (!fr.Open(Args->GetArg(i) + 1)) + FileRdr fr; + if (!fr.OpenFile(Args->GetArg(i) + 1)) { // [RH] Make this a warning, not an error. Printf ("No such response file (%s)!\n", Args->GetArg(i) + 1); } else { Printf ("Found response file %s!\n", Args->GetArg(i) + 1); - size = fr.GetLength(); + size = (int)fr.GetLength(); file = new char[size+1]; fr.Read (file, size); file[size] = 0; diff --git a/src/sc_man.cpp b/src/sc_man.cpp index b78b7a305..2056ca60b 100644 --- a/src/sc_man.cpp +++ b/src/sc_man.cpp @@ -248,8 +248,8 @@ bool FScanner::OpenFile (const char *name) { Close (); - FileReader fr; - if (!fr.Open(name)) return false; + FileRdr fr; + if (!fr.OpenFile(name)) return false; auto filesize = fr.GetLength(); auto filebuf = new uint8_t[filesize]; if (fr.Read(filebuf, filesize) != filesize) diff --git a/src/sound/i_soundfont.cpp b/src/sound/i_soundfont.cpp index 38b1f70b7..e80726110 100644 --- a/src/sound/i_soundfont.cpp +++ b/src/sound/i_soundfont.cpp @@ -291,8 +291,8 @@ void FSoundFontManager::ProcessOneFile(const FString &fn) if (!sfi.mName.CompareNoCase(fb)) return; } - FileReader fr; - if (fr.Open(fn)) + FileRdr fr; + if (fr.OpenFile(fn)) { // Try to identify. We only accept .sf2 and .zip by content. All other archives are intentionally ignored. char head[16] = { 0}; @@ -433,8 +433,8 @@ FSoundFontReader *FSoundFontManager::OpenSoundFont(const char *name, int allowed // Next check if the file is a .sf file if (allowed & SF_SF2) { - FileReader fr; - if (fr.Open(name)) + FileRdr fr; + if (fr.OpenFile(name)) { char head[16] = { 0}; fr.Read(head, 16); @@ -447,8 +447,8 @@ FSoundFontReader *FSoundFontManager::OpenSoundFont(const char *name, int allowed } if (allowed & SF_GUS) { - FileReader fr; - if (fr.Open(name)) + FileRdr fr; + if (fr.OpenFile(name)) { char head[16] = { 0 }; fr.Read(head, 2); diff --git a/src/sound/mpg123_decoder.cpp b/src/sound/mpg123_decoder.cpp index db3489aa0..0a2f9fa2e 100644 --- a/src/sound/mpg123_decoder.cpp +++ b/src/sound/mpg123_decoder.cpp @@ -145,7 +145,8 @@ bool MPG123Decoder::open(FileRdr &reader) MPG123 = 0; } - return false; + reader = std::move(Reader); // need to give it back. + return false; } void MPG123Decoder::getInfo(int *samplerate, ChannelConfig *chans, SampleType *type) diff --git a/src/sound/sndfile_decoder.cpp b/src/sound/sndfile_decoder.cpp index 07c7c81c3..ef24748aa 100644 --- a/src/sound/sndfile_decoder.cpp +++ b/src/sound/sndfile_decoder.cpp @@ -127,7 +127,8 @@ bool SndFileDecoder::open(FileRdr &reader) sf_close(SndFile); SndFile = 0; } - return false; + reader = std::move(Reader); // need to give it back. + return false; } void SndFileDecoder::getInfo(int *samplerate, ChannelConfig *chans, SampleType *type) diff --git a/src/sound/timiditypp/instrum.cpp b/src/sound/timiditypp/instrum.cpp index 86053e518..ddd0d8fab 100644 --- a/src/sound/timiditypp/instrum.cpp +++ b/src/sound/timiditypp/instrum.cpp @@ -75,6 +75,8 @@ Instruments::~Instruments() free_tone_bank(); free_instrument_map(); + + if (sfreader != nullptr) delete sfreader; } void Instruments::free_instrument(Instrument *ip) diff --git a/src/textures/buildtexture.cpp b/src/textures/buildtexture.cpp index d23e5e6f2..78d606a7e 100644 --- a/src/textures/buildtexture.cpp +++ b/src/textures/buildtexture.cpp @@ -306,14 +306,14 @@ int FTextureManager::CountBuildTiles () FString artpath = rffpath; artpath += artfile; - FileReader fr; + FileRdr fr; - if (!fr.Open(artpath)) + if (!fr.OpenFile(artpath)) { break; } - long len = fr.GetLength(); + auto len = fr.GetLength(); uint8_t *art = new uint8_t[len]; if (fr.Read (art, len) != len || (numtiles = CountTiles(art)) == 0) {