From f11b206fe8643048c935e4cc86c1ec930e519809 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Luk=C3=A1=C5=A1=20Lalinsk=C3=BD?= Date: Thu, 6 Sep 2012 19:43:52 +0200 Subject: [PATCH] Do not delete the IOStream object in TagLib::File --- taglib/ape/apefile.h | 3 +++ taglib/asf/asffile.h | 6 ++++++ taglib/flac/flacfile.h | 3 +++ taglib/it/itfile.h | 3 +++ taglib/mod/modfile.h | 3 +++ taglib/mp4/mp4file.h | 3 +++ taglib/mpc/mpcfile.h | 3 +++ taglib/mpeg/mpegfile.h | 3 +++ taglib/ogg/flac/oggflacfile.h | 3 +++ taglib/ogg/oggfile.h | 3 +++ taglib/ogg/speex/speexfile.h | 3 +++ taglib/ogg/vorbis/vorbisfile.h | 3 +++ taglib/riff/aiff/aifffile.h | 3 +++ taglib/riff/wav/wavfile.h | 3 +++ taglib/s3m/s3mfile.h | 3 +++ taglib/toolkit/tfile.cpp | 12 +++++++----- taglib/toolkit/tfile.h | 3 +++ taglib/trueaudio/trueaudiofile.h | 6 ++++++ taglib/wavpack/wavpackfile.h | 3 +++ taglib/xm/xmfile.h | 3 +++ 20 files changed, 70 insertions(+), 5 deletions(-) diff --git a/taglib/ape/apefile.h b/taglib/ape/apefile.h index 0bdbd422..8b187f6a 100644 --- a/taglib/ape/apefile.h +++ b/taglib/ape/apefile.h @@ -95,6 +95,9 @@ namespace TagLib { * Contructs an WavPack file from \a file. If \a readProperties is true the * file's audio properties will also be read using \a propertiesStyle. If * false, \a propertiesStyle is ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average); diff --git a/taglib/asf/asffile.h b/taglib/asf/asffile.h index f0acd728..3a7eef56 100644 --- a/taglib/asf/asffile.h +++ b/taglib/asf/asffile.h @@ -54,6 +54,9 @@ namespace TagLib { * * \note In the current implementation, both \a readProperties and * \a propertiesStyle are ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(FileName file, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average); @@ -64,6 +67,9 @@ namespace TagLib { * * \note In the current implementation, both \a readProperties and * \a propertiesStyle are ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average); diff --git a/taglib/flac/flacfile.h b/taglib/flac/flacfile.h index 31dfebd7..716d4478 100644 --- a/taglib/flac/flacfile.h +++ b/taglib/flac/flacfile.h @@ -97,6 +97,9 @@ namespace TagLib { * * If this file contains and ID3v2 tag the frames will be created using * \a frameFactory. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ // BIC: merge with the above constructor File(IOStream *stream, ID3v2::FrameFactory *frameFactory, diff --git a/taglib/it/itfile.h b/taglib/it/itfile.h index 9c507742..5584b7cd 100644 --- a/taglib/it/itfile.h +++ b/taglib/it/itfile.h @@ -48,6 +48,9 @@ namespace TagLib { * Contructs a Impulse Tracker file from \a stream. If \a readProperties * is true the file's audio properties will also be read using * \a propertiesStyle. If false, \a propertiesStyle is ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stram, bool readProperties = true, AudioProperties::ReadStyle propertiesStyle = diff --git a/taglib/mod/modfile.h b/taglib/mod/modfile.h index 9e79659c..ad1e43b8 100644 --- a/taglib/mod/modfile.h +++ b/taglib/mod/modfile.h @@ -49,6 +49,9 @@ namespace TagLib { * Contructs a Protracker file from \a stream. If \a readProperties * is true the file's audio properties will also be read using * \a propertiesStyle. If false, \a propertiesStyle is ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, bool readProperties = true, AudioProperties::ReadStyle propertiesStyle = diff --git a/taglib/mp4/mp4file.h b/taglib/mp4/mp4file.h index c3613f76..2ed3bea5 100644 --- a/taglib/mp4/mp4file.h +++ b/taglib/mp4/mp4file.h @@ -65,6 +65,9 @@ namespace TagLib { * * \note In the current implementation, both \a readProperties and * \a propertiesStyle are ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, bool readProperties = true, Properties::ReadStyle audioPropertiesStyle = Properties::Average); diff --git a/taglib/mpc/mpcfile.h b/taglib/mpc/mpcfile.h index 61ac6d67..167b768e 100644 --- a/taglib/mpc/mpcfile.h +++ b/taglib/mpc/mpcfile.h @@ -95,6 +95,9 @@ namespace TagLib { * Contructs an MPC file from \a file. If \a readProperties is true the * file's audio properties will also be read using \a propertiesStyle. If * false, \a propertiesStyle is ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average); diff --git a/taglib/mpeg/mpegfile.h b/taglib/mpeg/mpegfile.h index 185fced6..9967a991 100644 --- a/taglib/mpeg/mpegfile.h +++ b/taglib/mpeg/mpegfile.h @@ -99,6 +99,9 @@ namespace TagLib { * file's audio properties will also be read using \a propertiesStyle. If * false, \a propertiesStyle is ignored. The frames will be created using * \a frameFactory. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ // BIC: merge with the above constructor File(IOStream *stream, ID3v2::FrameFactory *frameFactory, diff --git a/taglib/ogg/flac/oggflacfile.h b/taglib/ogg/flac/oggflacfile.h index d4373795..8558cfdf 100644 --- a/taglib/ogg/flac/oggflacfile.h +++ b/taglib/ogg/flac/oggflacfile.h @@ -75,6 +75,9 @@ namespace TagLib { * Contructs an Ogg/FLAC file from \a file. If \a readProperties is true * the file's audio properties will also be read using \a propertiesStyle. * If false, \a propertiesStyle is ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average); diff --git a/taglib/ogg/oggfile.h b/taglib/ogg/oggfile.h index 1ecf2b9b..b36daecb 100644 --- a/taglib/ogg/oggfile.h +++ b/taglib/ogg/oggfile.h @@ -100,6 +100,9 @@ namespace TagLib { * \note This constructor is protected since Ogg::File shouldn't be * instantiated directly but rather should be used through the codec * specific subclasses. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream); diff --git a/taglib/ogg/speex/speexfile.h b/taglib/ogg/speex/speexfile.h index c14cf2aa..dfe51ec4 100644 --- a/taglib/ogg/speex/speexfile.h +++ b/taglib/ogg/speex/speexfile.h @@ -67,6 +67,9 @@ namespace TagLib { * Contructs a Speex file from \a file. If \a readProperties is true the * file's audio properties will also be read using \a propertiesStyle. If * false, \a propertiesStyle is ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average); diff --git a/taglib/ogg/vorbis/vorbisfile.h b/taglib/ogg/vorbis/vorbisfile.h index 15c29d99..6e4d4fc4 100644 --- a/taglib/ogg/vorbis/vorbisfile.h +++ b/taglib/ogg/vorbis/vorbisfile.h @@ -74,6 +74,9 @@ namespace TagLib { * Contructs a Vorbis file from \a file. If \a readProperties is true the * file's audio properties will also be read using \a propertiesStyle. If * false, \a propertiesStyle is ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average); diff --git a/taglib/riff/aiff/aifffile.h b/taglib/riff/aiff/aifffile.h index a50c8ecb..e1284db0 100644 --- a/taglib/riff/aiff/aifffile.h +++ b/taglib/riff/aiff/aifffile.h @@ -69,6 +69,9 @@ namespace TagLib { * Contructs an AIFF file from \a file. If \a readProperties is true the * file's audio properties will also be read using \a propertiesStyle. If * false, \a propertiesStyle is ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average); diff --git a/taglib/riff/wav/wavfile.h b/taglib/riff/wav/wavfile.h index 861f3f77..1c470870 100644 --- a/taglib/riff/wav/wavfile.h +++ b/taglib/riff/wav/wavfile.h @@ -69,6 +69,9 @@ namespace TagLib { * Contructs an WAV file from \a file. If \a readProperties is true the * file's audio properties will also be read using \a propertiesStyle. If * false, \a propertiesStyle is ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average); diff --git a/taglib/s3m/s3mfile.h b/taglib/s3m/s3mfile.h index 0605b2bf..c862108e 100644 --- a/taglib/s3m/s3mfile.h +++ b/taglib/s3m/s3mfile.h @@ -48,6 +48,9 @@ namespace TagLib { * Contructs a ScreamTracker III file from \a stream. If \a readProperties * is true the file's audio properties will also be read using * \a propertiesStyle. If false, \a propertiesStyle is ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, bool readProperties = true, AudioProperties::ReadStyle propertiesStyle = diff --git a/taglib/toolkit/tfile.cpp b/taglib/toolkit/tfile.cpp index 30cc9fbc..d0a6116f 100644 --- a/taglib/toolkit/tfile.cpp +++ b/taglib/toolkit/tfile.cpp @@ -74,15 +74,17 @@ using namespace TagLib; class File::FilePrivate { public: - FilePrivate(IOStream *stream); + FilePrivate(IOStream *stream, bool owner); IOStream *stream; + bool streamOwner; bool valid; static const uint bufferSize = 1024; }; -File::FilePrivate::FilePrivate(IOStream *stream) : +File::FilePrivate::FilePrivate(IOStream *stream, bool owner) : stream(stream), + streamOwner(owner), valid(true) { } @@ -94,17 +96,17 @@ File::FilePrivate::FilePrivate(IOStream *stream) : File::File(FileName fileName) { IOStream *stream = new FileStream(fileName); - d = new FilePrivate(stream); + d = new FilePrivate(stream, true); } File::File(IOStream *stream) { - d = new FilePrivate(stream); + d = new FilePrivate(stream, false); } File::~File() { - if(d->stream) + if(d->stream && d->streamOwner) delete d->stream; delete d; } diff --git a/taglib/toolkit/tfile.h b/taglib/toolkit/tfile.h index 7df774a0..7e6f2b93 100644 --- a/taglib/toolkit/tfile.h +++ b/taglib/toolkit/tfile.h @@ -260,6 +260,9 @@ namespace TagLib { /*! * Construct a File object and use the \a stream instance. * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. + * * \note Constructor is protected since this class should only be * instantiated through subclasses. */ diff --git a/taglib/trueaudio/trueaudiofile.h b/taglib/trueaudio/trueaudiofile.h index 9b0378f7..e3e1fe62 100644 --- a/taglib/trueaudio/trueaudiofile.h +++ b/taglib/trueaudio/trueaudiofile.h @@ -100,6 +100,9 @@ namespace TagLib { * Contructs an TrueAudio file from \a file. If \a readProperties is true the * file's audio properties will also be read using \a propertiesStyle. If * false, \a propertiesStyle is ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average); @@ -109,6 +112,9 @@ namespace TagLib { * file's audio properties will also be read using \a propertiesStyle. If * false, \a propertiesStyle is ignored. The frames will be created using * \a frameFactory. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, ID3v2::FrameFactory *frameFactory, bool readProperties = true, diff --git a/taglib/wavpack/wavpackfile.h b/taglib/wavpack/wavpackfile.h index 02bac023..5bbbc65a 100644 --- a/taglib/wavpack/wavpackfile.h +++ b/taglib/wavpack/wavpackfile.h @@ -91,6 +91,9 @@ namespace TagLib { * Contructs an WavPack file from \a file. If \a readProperties is true the * file's audio properties will also be read using \a propertiesStyle. If * false, \a propertiesStyle is ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average); diff --git a/taglib/xm/xmfile.h b/taglib/xm/xmfile.h index 1b07010b..9d1bb71c 100644 --- a/taglib/xm/xmfile.h +++ b/taglib/xm/xmfile.h @@ -48,6 +48,9 @@ namespace TagLib { * Contructs a Extended Module file from \a stream. If \a readProperties * is true the file's audio properties will also be read using * \a propertiesStyle. If false, \a propertiesStyle is ignored. + * + * \note TagLib will *not* take ownership of the stream, the caller is + * responsible for deleting it after the File object. */ File(IOStream *stream, bool readProperties = true, AudioProperties::ReadStyle propertiesStyle = -- 2.50.1