From cd752ed6af74b1e1d7aa0e727bd376880d0cb868 Mon Sep 17 00:00:00 2001 From: ed Date: Mon, 5 Dec 2016 12:56:34 +0000 Subject: [PATCH] MidiFile::writeTo() method now returns false if unsuccessful --- .../juce_audio_basics/midi/juce_MidiFile.cpp | 22 +++++++++++-------- .../juce_audio_basics/midi/juce_MidiFile.h | 2 +- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/modules/juce_audio_basics/midi/juce_MidiFile.cpp b/modules/juce_audio_basics/midi/juce_MidiFile.cpp index 830891ac14..d3d770c2a1 100644 --- a/modules/juce_audio_basics/midi/juce_MidiFile.cpp +++ b/modules/juce_audio_basics/midi/juce_MidiFile.cpp @@ -369,20 +369,21 @@ bool MidiFile::writeTo (OutputStream& out, int midiFileType) { jassert (midiFileType >= 0 && midiFileType <= 2); - out.writeIntBigEndian ((int) ByteOrder::bigEndianInt ("MThd")); - out.writeIntBigEndian (6); - out.writeShortBigEndian ((short) midiFileType); - out.writeShortBigEndian ((short) tracks.size()); - out.writeShortBigEndian (timeFormat); + if (! out.writeIntBigEndian ((int) ByteOrder::bigEndianInt ("MThd"))) return false; + if (! out.writeIntBigEndian (6)) return false; + if (! out.writeShortBigEndian ((short) midiFileType)) return false; + if (! out.writeShortBigEndian ((short) tracks.size())) return false; + if (! out.writeShortBigEndian (timeFormat)) return false; for (int i = 0; i < tracks.size(); ++i) - writeTrack (out, i); + if (! writeTrack (out, i)) + return false; out.flush(); return true; } -void MidiFile::writeTrack (OutputStream& mainOut, const int trackNum) +bool MidiFile::writeTrack (OutputStream& mainOut, const int trackNum) { MemoryOutputStream out; const MidiMessageSequence& ms = *tracks.getUnchecked (trackNum); @@ -437,7 +438,10 @@ void MidiFile::writeTrack (OutputStream& mainOut, const int trackNum) out.write (m.getRawData(), (size_t) m.getRawDataSize()); } - mainOut.writeIntBigEndian ((int) ByteOrder::bigEndianInt ("MTrk")); - mainOut.writeIntBigEndian ((int) out.getDataSize()); + if (! mainOut.writeIntBigEndian ((int) ByteOrder::bigEndianInt ("MTrk"))) return false; + if (! mainOut.writeIntBigEndian ((int) out.getDataSize())) return false; + mainOut << out; + + return true; } diff --git a/modules/juce_audio_basics/midi/juce_MidiFile.h b/modules/juce_audio_basics/midi/juce_MidiFile.h index d653e48e29..96ec384910 100644 --- a/modules/juce_audio_basics/midi/juce_MidiFile.h +++ b/modules/juce_audio_basics/midi/juce_MidiFile.h @@ -177,7 +177,7 @@ private: short timeFormat; void readNextTrack (const uint8*, int size); - void writeTrack (OutputStream&, int trackNum); + bool writeTrack (OutputStream&, int trackNum); JUCE_LEAK_DETECTOR (MidiFile) };