From: <sv...@op...> - 2024-11-04 17:58:27
|
Author: sagamusix Date: Mon Nov 4 18:58:14 2024 New Revision: 22095 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22095 Log: Merged revision(s) 22094 from trunk/OpenMPT: [Fix] After loading a file with missing external samples, OpenMPT still prompted to save those empty sample slots to disk when closing the module. Doing that resulted in a crash. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/mptrack/ExternalSamples.cpp branches/OpenMPT-1.31/soundlib/SampleFormatFLAC.cpp branches/OpenMPT-1.31/soundlib/SampleFormats.cpp Modified: branches/OpenMPT-1.31/mptrack/ExternalSamples.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/ExternalSamples.cpp Mon Nov 4 18:57:43 2024 (r22094) +++ branches/OpenMPT-1.31/mptrack/ExternalSamples.cpp Mon Nov 4 18:58:14 2024 (r22095) @@ -270,6 +270,8 @@ if(m_sndFile.GetSample(smp).uFlags[SMP_MODIFIED]) status = _T("modified"); + else if(!m_sndFile.GetSample(smp).HasSampleData()) + continue; // Sample was already missing when the file was loaded, nothing we can do here else if(!mpt::native_fs{}.is_file(m_sndFile.GetSamplePath(smp))) status = _T("missing"); else Modified: branches/OpenMPT-1.31/soundlib/SampleFormatFLAC.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/SampleFormatFLAC.cpp Mon Nov 4 18:57:43 2024 (r22094) +++ branches/OpenMPT-1.31/soundlib/SampleFormatFLAC.cpp Mon Nov 4 18:58:14 2024 (r22095) @@ -558,7 +558,7 @@ { #ifdef MPT_WITH_FLAC const ModSample &sample = Samples[nSample]; - if(sample.uFlags[CHN_ADLIB]) + if(sample.uFlags[CHN_ADLIB] || !sample.HasSampleData()) return false; FLAC__StreamEncoder_RAII encoder(f); Modified: branches/OpenMPT-1.31/soundlib/SampleFormats.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/SampleFormats.cpp Mon Nov 4 18:57:43 2024 (r22094) +++ branches/OpenMPT-1.31/soundlib/SampleFormats.cpp Mon Nov 4 18:58:14 2024 (r22095) @@ -559,7 +559,7 @@ bool CSoundFile::SaveWAVSample(SAMPLEINDEX nSample, std::ostream &f) const { const ModSample &sample = Samples[nSample]; - if(sample.uFlags[CHN_ADLIB]) + if(sample.uFlags[CHN_ADLIB] || !sample.HasSampleData()) return false; mpt::IO::OFile<std::ostream> ff(f); @@ -843,6 +843,8 @@ bool CSoundFile::SaveRAWSample(SAMPLEINDEX nSample, std::ostream &f) const { const ModSample &sample = Samples[nSample]; + if(!sample.HasSampleData()) + return false; SampleIO( sample.uFlags[CHN_16BIT] ? SampleIO::_16bit : SampleIO::_8bit, sample.uFlags[CHN_STEREO] ? SampleIO::stereoInterleaved : SampleIO::mono, @@ -1188,6 +1190,8 @@ bool CSoundFile::SaveS3ISample(SAMPLEINDEX smp, std::ostream &f) const { const ModSample &sample = Samples[smp]; + if(!sample.uFlags[CHN_ADLIB] && !sample.HasSampleData()) + return false; S3MSampleHeader sampleHeader{}; SmpLength length = sampleHeader.ConvertToS3M(sample); mpt::String::WriteBuf(mpt::String::nullTerminated, sampleHeader.name) = m_szNames[smp]; @@ -2762,7 +2766,7 @@ bool CSoundFile::SaveIFFSample(SAMPLEINDEX smp, std::ostream &f) const { const ModSample &sample = Samples[smp]; - if(sample.uFlags[CHN_ADLIB]) + if(sample.uFlags[CHN_ADLIB] || !sample.HasSampleData()) return false; mpt::IO::OFile<std::ostream> ff(f); |