InputStream: add virtual destructor
Replaces the method Close().
This commit is contained in:
parent
f1d0700252
commit
82337dec44
|
@ -48,8 +48,7 @@ public:
|
||||||
is(nullptr) {}
|
is(nullptr) {}
|
||||||
|
|
||||||
~TagFileScan() {
|
~TagFileScan() {
|
||||||
if (is != nullptr)
|
delete is;
|
||||||
is->Close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ScanFile(const DecoderPlugin &plugin) {
|
bool ScanFile(const DecoderPlugin &plugin) {
|
||||||
|
|
|
@ -73,6 +73,6 @@ tag_stream_scan(const char *uri, const tag_handler &handler, void *ctx)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
bool success = tag_stream_scan(*is, handler, ctx);
|
bool success = tag_stream_scan(*is, handler, ctx);
|
||||||
is->Close();
|
delete is;
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
~Bzip2ArchiveFile() {
|
~Bzip2ArchiveFile() {
|
||||||
istream->Close();
|
delete istream;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Ref() {
|
void Ref() {
|
||||||
|
@ -102,7 +102,6 @@ struct Bzip2InputStream final : public InputStream {
|
||||||
~Bzip2InputStream();
|
~Bzip2InputStream();
|
||||||
|
|
||||||
bool Open(Error &error);
|
bool Open(Error &error);
|
||||||
void Close();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const InputPlugin bz2_inputplugin;
|
extern const InputPlugin bz2_inputplugin;
|
||||||
|
@ -132,12 +131,6 @@ Bzip2InputStream::Open(Error &error)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void
|
|
||||||
Bzip2InputStream::Close()
|
|
||||||
{
|
|
||||||
BZ2_bzDecompressEnd(&bzstream);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* archive open && listing routine */
|
/* archive open && listing routine */
|
||||||
|
|
||||||
static ArchiveFile *
|
static ArchiveFile *
|
||||||
|
@ -166,6 +159,7 @@ Bzip2InputStream::Bzip2InputStream(Bzip2ArchiveFile &_context,
|
||||||
|
|
||||||
Bzip2InputStream::~Bzip2InputStream()
|
Bzip2InputStream::~Bzip2InputStream()
|
||||||
{
|
{
|
||||||
|
BZ2_bzDecompressEnd(&bzstream);
|
||||||
archive->Unref();
|
archive->Unref();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,15 +177,6 @@ Bzip2ArchiveFile::OpenStream(const char *path,
|
||||||
return bis;
|
return bis;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
bz2_is_close(InputStream *is)
|
|
||||||
{
|
|
||||||
Bzip2InputStream *bis = (Bzip2InputStream *)is;
|
|
||||||
|
|
||||||
bis->Close();
|
|
||||||
delete bis;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
bz2_fillbuffer(Bzip2InputStream *bis, Error &error)
|
bz2_fillbuffer(Bzip2InputStream *bis, Error &error)
|
||||||
{
|
{
|
||||||
|
@ -273,7 +258,6 @@ const InputPlugin bz2_inputplugin = {
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
bz2_is_close,
|
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
|
|
@ -181,14 +181,6 @@ Iso9660ArchiveFile::OpenStream(const char *pathname,
|
||||||
statbuf);
|
statbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
iso9660_input_close(InputStream *is)
|
|
||||||
{
|
|
||||||
Iso9660InputStream *iis = (Iso9660InputStream *)is;
|
|
||||||
|
|
||||||
delete iis;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline size_t
|
inline size_t
|
||||||
Iso9660InputStream::Read(void *ptr, size_t read_size, Error &error)
|
Iso9660InputStream::Read(void *ptr, size_t read_size, Error &error)
|
||||||
{
|
{
|
||||||
|
@ -250,7 +242,6 @@ const InputPlugin iso9660_input_plugin = {
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
iso9660_input_close,
|
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
|
|
@ -142,14 +142,6 @@ ZzipArchiveFile::OpenStream(const char *pathname,
|
||||||
_file);
|
_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
zzip_input_close(InputStream *is)
|
|
||||||
{
|
|
||||||
ZzipInputStream *zis = (ZzipInputStream *)is;
|
|
||||||
|
|
||||||
delete zis;
|
|
||||||
}
|
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
zzip_input_read(InputStream *is, void *ptr, size_t size,
|
zzip_input_read(InputStream *is, void *ptr, size_t size,
|
||||||
Error &error)
|
Error &error)
|
||||||
|
@ -202,7 +194,6 @@ const InputPlugin zzip_input_plugin = {
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
zzip_input_close,
|
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
|
|
@ -271,7 +271,7 @@ decoder_run_stream(Decoder &decoder, const char *uri)
|
||||||
decoder_run_stream_fallback(decoder, *input_stream));
|
decoder_run_stream_fallback(decoder, *input_stream));
|
||||||
|
|
||||||
dc.Unlock();
|
dc.Unlock();
|
||||||
input_stream->Close();
|
delete input_stream;
|
||||||
dc.Lock();
|
dc.Lock();
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
|
@ -318,7 +318,7 @@ TryDecoderFile(Decoder &decoder, Path path_fs, const char *suffix,
|
||||||
|
|
||||||
dc.Unlock();
|
dc.Unlock();
|
||||||
|
|
||||||
input_stream->Close();
|
delete input_stream;
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
dc.Lock();
|
dc.Lock();
|
||||||
|
|
|
@ -467,7 +467,7 @@ wavpack_open_wvc(Decoder &decoder, const char *uri,
|
||||||
size_t nbytes = decoder_read(decoder, *is_wvc,
|
size_t nbytes = decoder_read(decoder, *is_wvc,
|
||||||
&first_byte, sizeof(first_byte));
|
&first_byte, sizeof(first_byte));
|
||||||
if (nbytes == 0) {
|
if (nbytes == 0) {
|
||||||
is_wvc->Close();
|
delete is_wvc;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -519,7 +519,7 @@ wavpack_streamdecode(Decoder &decoder, InputStream &is)
|
||||||
|
|
||||||
WavpackCloseFile(wpc);
|
WavpackCloseFile(wpc);
|
||||||
if (open_flags & OPEN_WVC) {
|
if (open_flags & OPEN_WVC) {
|
||||||
is_wvc->Close();
|
delete is_wvc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,6 @@ struct InputPlugin {
|
||||||
InputStream *(*open)(const char *uri,
|
InputStream *(*open)(const char *uri,
|
||||||
Mutex &mutex, Cond &cond,
|
Mutex &mutex, Cond &cond,
|
||||||
Error &error);
|
Error &error);
|
||||||
void (*close)(InputStream *is);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check for errors that may have occurred in the I/O thread.
|
* Check for errors that may have occurred in the I/O thread.
|
||||||
|
|
|
@ -31,6 +31,10 @@
|
||||||
|
|
||||||
static constexpr Domain input_domain("input");
|
static constexpr Domain input_domain("input");
|
||||||
|
|
||||||
|
InputStream::~InputStream()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
InputStream *
|
InputStream *
|
||||||
InputStream::Open(const char *url,
|
InputStream::Open(const char *url,
|
||||||
Mutex &mutex, Cond &cond,
|
Mutex &mutex, Cond &cond,
|
||||||
|
@ -41,7 +45,6 @@ InputStream::Open(const char *url,
|
||||||
|
|
||||||
is = plugin->open(url, mutex, cond, error);
|
is = plugin->open(url, mutex, cond, error);
|
||||||
if (is != nullptr) {
|
if (is != nullptr) {
|
||||||
assert(is->plugin.close != nullptr);
|
|
||||||
assert(is->plugin.read != nullptr);
|
assert(is->plugin.read != nullptr);
|
||||||
assert(is->plugin.eof != nullptr);
|
assert(is->plugin.eof != nullptr);
|
||||||
assert(!is->seekable || is->plugin.seek != nullptr);
|
assert(!is->seekable || is->plugin.seek != nullptr);
|
||||||
|
@ -72,7 +75,7 @@ InputStream::OpenReady(const char *uri,
|
||||||
mutex.unlock();
|
mutex.unlock();
|
||||||
|
|
||||||
if (!success) {
|
if (!success) {
|
||||||
is->Close();
|
delete is;
|
||||||
is = nullptr;
|
is = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,12 +205,6 @@ InputStream::LockRead(void *ptr, size_t _size, Error &error)
|
||||||
return Read(ptr, _size, error);
|
return Read(ptr, _size, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
InputStream::Close()
|
|
||||||
{
|
|
||||||
plugin.close(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
InputStream::IsEOF()
|
InputStream::IsEOF()
|
||||||
{
|
{
|
||||||
|
|
|
@ -108,6 +108,13 @@ public:
|
||||||
assert(_uri != nullptr);
|
assert(_uri != nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close the input stream and free resources.
|
||||||
|
*
|
||||||
|
* The caller must not lock the mutex.
|
||||||
|
*/
|
||||||
|
virtual ~InputStream();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Opens a new input stream. You may not access it until the "ready"
|
* Opens a new input stream. You may not access it until the "ready"
|
||||||
* flag is set.
|
* flag is set.
|
||||||
|
@ -133,13 +140,6 @@ public:
|
||||||
Mutex &mutex, Cond &cond,
|
Mutex &mutex, Cond &cond,
|
||||||
Error &error);
|
Error &error);
|
||||||
|
|
||||||
/**
|
|
||||||
* Close the input stream and free resources.
|
|
||||||
*
|
|
||||||
* The caller must not lock the mutex.
|
|
||||||
*/
|
|
||||||
void Close();
|
|
||||||
|
|
||||||
const InputPlugin &GetPlugin() const {
|
const InputPlugin &GetPlugin() const {
|
||||||
return plugin;
|
return plugin;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,15 @@
|
||||||
|
|
||||||
ThreadInputStream::~ThreadInputStream()
|
ThreadInputStream::~ThreadInputStream()
|
||||||
{
|
{
|
||||||
|
Lock();
|
||||||
|
close = true;
|
||||||
|
wake_cond.signal();
|
||||||
|
Unlock();
|
||||||
|
|
||||||
|
Cancel();
|
||||||
|
|
||||||
|
thread.Join();
|
||||||
|
|
||||||
if (buffer != nullptr) {
|
if (buffer != nullptr) {
|
||||||
buffer->Clear();
|
buffer->Clear();
|
||||||
HugeFree(buffer->Write().data, buffer_size);
|
HugeFree(buffer->Write().data, buffer_size);
|
||||||
|
@ -172,28 +181,6 @@ ThreadInputStream::Read(InputStream *is, void *ptr, size_t size,
|
||||||
return tis.Read2(ptr, size, error);
|
return tis.Read2(ptr, size, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void
|
|
||||||
ThreadInputStream::Close2()
|
|
||||||
{
|
|
||||||
Lock();
|
|
||||||
close = true;
|
|
||||||
wake_cond.signal();
|
|
||||||
Unlock();
|
|
||||||
|
|
||||||
Cancel();
|
|
||||||
|
|
||||||
thread.Join();
|
|
||||||
|
|
||||||
delete this;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
ThreadInputStream::Close(InputStream *is)
|
|
||||||
{
|
|
||||||
ThreadInputStream &tis = *(ThreadInputStream *)is;
|
|
||||||
tis.Close2();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
ThreadInputStream::IsEOF2()
|
ThreadInputStream::IsEOF2()
|
||||||
{
|
{
|
||||||
|
|
|
@ -134,7 +134,6 @@ private:
|
||||||
bool Check2(Error &error);
|
bool Check2(Error &error);
|
||||||
bool Available2();
|
bool Available2();
|
||||||
size_t Read2(void *ptr, size_t size, Error &error);
|
size_t Read2(void *ptr, size_t size, Error &error);
|
||||||
void Close2();
|
|
||||||
bool IsEOF2();
|
bool IsEOF2();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -143,7 +142,6 @@ public:
|
||||||
static bool Available(InputStream *is);
|
static bool Available(InputStream *is);
|
||||||
static size_t Read(InputStream *is, void *ptr, size_t size,
|
static size_t Read(InputStream *is, void *ptr, size_t size,
|
||||||
Error &error);
|
Error &error);
|
||||||
static void Close(InputStream *is);
|
|
||||||
static bool IsEOF(InputStream *is);
|
static bool IsEOF(InputStream *is);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -373,13 +373,6 @@ alsa_input_open(const char *uri, Mutex &mutex, Cond &cond, Error &error)
|
||||||
return AlsaInputStream::Create(uri, mutex, cond, error);
|
return AlsaInputStream::Create(uri, mutex, cond, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
alsa_input_close(InputStream *is)
|
|
||||||
{
|
|
||||||
AlsaInputStream *ais = (AlsaInputStream *)is;
|
|
||||||
delete ais;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
alsa_input_available(InputStream *is)
|
alsa_input_available(InputStream *is)
|
||||||
{
|
{
|
||||||
|
@ -406,7 +399,6 @@ const struct InputPlugin input_plugin_alsa = {
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
alsa_input_open,
|
alsa_input_open,
|
||||||
alsa_input_close,
|
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
|
|
@ -96,5 +96,4 @@ const InputPlugin input_plugin_archive = {
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -105,14 +105,6 @@ input_cdio_init(const config_param ¶m, Error &error)
|
||||||
return InputPlugin::InitResult::SUCCESS;
|
return InputPlugin::InitResult::SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
input_cdio_close(InputStream *is)
|
|
||||||
{
|
|
||||||
CdioParanoiaInputStream *i = (CdioParanoiaInputStream *)is;
|
|
||||||
|
|
||||||
delete i;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct cdio_uri {
|
struct cdio_uri {
|
||||||
char device[64];
|
char device[64];
|
||||||
int track;
|
int track;
|
||||||
|
@ -394,7 +386,6 @@ const InputPlugin input_plugin_cdio_paranoia = {
|
||||||
input_cdio_init,
|
input_cdio_init,
|
||||||
nullptr,
|
nullptr,
|
||||||
input_cdio_open,
|
input_cdio_open,
|
||||||
input_cdio_close,
|
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
|
|
@ -805,14 +805,6 @@ input_curl_read(InputStream *is, void *ptr, size_t size,
|
||||||
return c.Read(ptr, size, error);
|
return c.Read(ptr, size, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
input_curl_close(InputStream *is)
|
|
||||||
{
|
|
||||||
CurlInputStream *c = (CurlInputStream *)is;
|
|
||||||
|
|
||||||
delete c;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
input_curl_eof(gcc_unused InputStream *is)
|
input_curl_eof(gcc_unused InputStream *is)
|
||||||
{
|
{
|
||||||
|
@ -1144,7 +1136,6 @@ const struct InputPlugin input_plugin_curl = {
|
||||||
input_curl_init,
|
input_curl_init,
|
||||||
input_curl_finish,
|
input_curl_finish,
|
||||||
input_curl_open,
|
input_curl_open,
|
||||||
input_curl_close,
|
|
||||||
input_curl_check,
|
input_curl_check,
|
||||||
nullptr,
|
nullptr,
|
||||||
input_curl_tag,
|
input_curl_tag,
|
||||||
|
|
|
@ -61,9 +61,7 @@ class DespotifyInputStream final : public InputStream {
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
~DespotifyInputStream() {
|
~DespotifyInputStream();
|
||||||
despotify_free_track(track);
|
|
||||||
}
|
|
||||||
|
|
||||||
static InputStream *Open(const char *url, Mutex &mutex, Cond &cond,
|
static InputStream *Open(const char *url, Mutex &mutex, Cond &cond,
|
||||||
Error &error);
|
Error &error);
|
||||||
|
@ -146,6 +144,12 @@ static void callback(gcc_unused struct despotify_session* ds,
|
||||||
ctx->Callback(sig);
|
ctx->Callback(sig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DespotifyInputStream::~DespotifyInputStream()
|
||||||
|
{
|
||||||
|
mpd_despotify_unregister_callback(callback);
|
||||||
|
despotify_free_track(track);
|
||||||
|
}
|
||||||
|
|
||||||
inline InputStream *
|
inline InputStream *
|
||||||
DespotifyInputStream::Open(const char *url,
|
DespotifyInputStream::Open(const char *url,
|
||||||
Mutex &mutex, Cond &cond,
|
Mutex &mutex, Cond &cond,
|
||||||
|
@ -220,15 +224,6 @@ input_despotify_read(InputStream *is, void *ptr, size_t size, Error &error)
|
||||||
return ctx->Read(ptr, size, error);
|
return ctx->Read(ptr, size, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
input_despotify_close(InputStream *is)
|
|
||||||
{
|
|
||||||
DespotifyInputStream *ctx = (DespotifyInputStream *)is;
|
|
||||||
|
|
||||||
mpd_despotify_unregister_callback(callback);
|
|
||||||
delete ctx;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
input_despotify_eof(InputStream *is)
|
input_despotify_eof(InputStream *is)
|
||||||
{
|
{
|
||||||
|
@ -250,7 +245,6 @@ const InputPlugin input_plugin_despotify = {
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
input_despotify_open,
|
input_despotify_open,
|
||||||
input_despotify_close,
|
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
input_despotify_tag,
|
input_despotify_tag,
|
||||||
|
|
|
@ -125,14 +125,6 @@ input_ffmpeg_read(InputStream *is, void *ptr, size_t size,
|
||||||
return (size_t)ret;
|
return (size_t)ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
input_ffmpeg_close(InputStream *is)
|
|
||||||
{
|
|
||||||
FfmpegInputStream *i = (FfmpegInputStream *)is;
|
|
||||||
|
|
||||||
delete i;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
input_ffmpeg_eof(InputStream *is)
|
input_ffmpeg_eof(InputStream *is)
|
||||||
{
|
{
|
||||||
|
@ -163,7 +155,6 @@ const InputPlugin input_plugin_ffmpeg = {
|
||||||
input_ffmpeg_init,
|
input_ffmpeg_init,
|
||||||
nullptr,
|
nullptr,
|
||||||
input_ffmpeg_open,
|
input_ffmpeg_open,
|
||||||
input_ffmpeg_close,
|
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
|
|
@ -123,14 +123,6 @@ input_file_read(InputStream *is, void *ptr, size_t size,
|
||||||
return (size_t)nbytes;
|
return (size_t)nbytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
input_file_close(InputStream *is)
|
|
||||||
{
|
|
||||||
FileInputStream *fis = (FileInputStream *)is;
|
|
||||||
|
|
||||||
delete fis;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
input_file_eof(InputStream *is)
|
input_file_eof(InputStream *is)
|
||||||
{
|
{
|
||||||
|
@ -142,7 +134,6 @@ const InputPlugin input_plugin_file = {
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
input_file_open,
|
input_file_open,
|
||||||
input_file_close,
|
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
|
|
@ -106,7 +106,6 @@ const InputPlugin input_plugin_mms = {
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
input_mms_open,
|
input_mms_open,
|
||||||
ThreadInputStream::Close,
|
|
||||||
ThreadInputStream::Check,
|
ThreadInputStream::Check,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
|
|
@ -156,13 +156,6 @@ input_nfs_read(InputStream *is, void *ptr, size_t size,
|
||||||
return s.Read(ptr, size, error);
|
return s.Read(ptr, size, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
input_nfs_close(InputStream *is)
|
|
||||||
{
|
|
||||||
NfsInputStream *s = (NfsInputStream *)is;
|
|
||||||
delete s;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
input_nfs_eof(InputStream *is)
|
input_nfs_eof(InputStream *is)
|
||||||
{
|
{
|
||||||
|
@ -184,7 +177,6 @@ const InputPlugin input_plugin_nfs = {
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
input_nfs_open,
|
input_nfs_open,
|
||||||
input_nfs_close,
|
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
|
|
@ -60,7 +60,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
~RewindInputStream() {
|
~RewindInputStream() {
|
||||||
input->Close();
|
delete input;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Check(Error &error) {
|
bool Check(Error &error) {
|
||||||
|
@ -121,14 +121,6 @@ private:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
|
||||||
input_rewind_close(InputStream *is)
|
|
||||||
{
|
|
||||||
RewindInputStream *r = (RewindInputStream *)is;
|
|
||||||
|
|
||||||
delete r;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
input_rewind_check(InputStream *is, Error &error)
|
input_rewind_check(InputStream *is, Error &error)
|
||||||
{
|
{
|
||||||
|
@ -263,7 +255,6 @@ const InputPlugin rewind_input_plugin = {
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
input_rewind_close,
|
|
||||||
input_rewind_check,
|
input_rewind_check,
|
||||||
input_rewind_update,
|
input_rewind_update,
|
||||||
input_rewind_tag,
|
input_rewind_tag,
|
||||||
|
|
|
@ -149,13 +149,6 @@ input_smbclient_read(InputStream *is, void *ptr, size_t size,
|
||||||
return s.Read(ptr, size, error);
|
return s.Read(ptr, size, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
input_smbclient_close(InputStream *is)
|
|
||||||
{
|
|
||||||
SmbclientInputStream *s = (SmbclientInputStream *)is;
|
|
||||||
delete s;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
input_smbclient_eof(InputStream *is)
|
input_smbclient_eof(InputStream *is)
|
||||||
{
|
{
|
||||||
|
@ -177,7 +170,6 @@ const InputPlugin input_plugin_smbclient = {
|
||||||
input_smbclient_init,
|
input_smbclient_init,
|
||||||
nullptr,
|
nullptr,
|
||||||
input_smbclient_open,
|
input_smbclient_open,
|
||||||
input_smbclient_close,
|
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr,
|
nullptr,
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
CloseSongEnumerator::~CloseSongEnumerator()
|
CloseSongEnumerator::~CloseSongEnumerator()
|
||||||
{
|
{
|
||||||
delete other;
|
delete other;
|
||||||
is->Close();
|
delete is;
|
||||||
}
|
}
|
||||||
|
|
||||||
DetachedSong *
|
DetachedSong *
|
||||||
|
|
|
@ -50,7 +50,7 @@ playlist_open_path_suffix(const char *path_fs, Mutex &mutex, Cond &cond)
|
||||||
if (playlist != nullptr)
|
if (playlist != nullptr)
|
||||||
playlist = new CloseSongEnumerator(playlist, is);
|
playlist = new CloseSongEnumerator(playlist, is);
|
||||||
else
|
else
|
||||||
is->Close();
|
delete is;
|
||||||
|
|
||||||
return playlist;
|
return playlist;
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ playlist_open_remote(const char *uri, Mutex &mutex, Cond &cond)
|
||||||
|
|
||||||
playlist = playlist_list_open_stream(*is, uri);
|
playlist = playlist_list_open_stream(*is, uri);
|
||||||
if (playlist == nullptr) {
|
if (playlist == nullptr) {
|
||||||
is->Close();
|
delete is;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -276,7 +276,7 @@ soundcloud_parse_json(const char *url, yajl_handle hand,
|
||||||
done = true;
|
done = true;
|
||||||
} else {
|
} else {
|
||||||
mutex.unlock();
|
mutex.unlock();
|
||||||
input_stream->Close();
|
delete input_stream;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -304,7 +304,7 @@ soundcloud_parse_json(const char *url, yajl_handle hand,
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex.unlock();
|
mutex.unlock();
|
||||||
input_stream->Close();
|
delete input_stream;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,7 +105,7 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
playlist = playlist_list_open_stream(*is, uri);
|
playlist = playlist_list_open_stream(*is, uri);
|
||||||
if (playlist == NULL) {
|
if (playlist == NULL) {
|
||||||
is->Close();
|
delete is;
|
||||||
fprintf(stderr, "Failed to open playlist\n");
|
fprintf(stderr, "Failed to open playlist\n");
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
@ -139,8 +139,7 @@ int main(int argc, char **argv)
|
||||||
/* deinitialize everything */
|
/* deinitialize everything */
|
||||||
|
|
||||||
delete playlist;
|
delete playlist;
|
||||||
if (is != NULL)
|
delete is;
|
||||||
is->Close();
|
|
||||||
|
|
||||||
decoder_plugin_deinit_all();
|
decoder_plugin_deinit_all();
|
||||||
playlist_list_global_finish();
|
playlist_list_global_finish();
|
||||||
|
|
|
@ -112,7 +112,7 @@ int main(int argc, char **argv)
|
||||||
InputStream *is = InputStream::OpenReady(argv[1], mutex, cond, error);
|
InputStream *is = InputStream::OpenReady(argv[1], mutex, cond, error);
|
||||||
if (is != NULL) {
|
if (is != NULL) {
|
||||||
ret = dump_input_stream(*is);
|
ret = dump_input_stream(*is);
|
||||||
is->Close();
|
delete is;
|
||||||
} else {
|
} else {
|
||||||
if (error.IsDefined())
|
if (error.IsDefined())
|
||||||
LogError(error);
|
LogError(error);
|
||||||
|
|
|
@ -127,7 +127,7 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
success = plugin->ScanStream(*is, print_handler, nullptr);
|
success = plugin->ScanStream(*is, print_handler, nullptr);
|
||||||
is->Close();
|
delete is;
|
||||||
}
|
}
|
||||||
|
|
||||||
decoder_plugin_deinit_all();
|
decoder_plugin_deinit_all();
|
||||||
|
|
|
@ -230,7 +230,7 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
decoder.plugin->StreamDecode(decoder, *is);
|
decoder.plugin->StreamDecode(decoder, *is);
|
||||||
|
|
||||||
is->Close();
|
delete is;
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Decoder plugin is not usable\n");
|
fprintf(stderr, "Decoder plugin is not usable\n");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
|
@ -132,7 +132,7 @@ int main(int argc, char **argv)
|
||||||
is = InputStream::OpenReady(argv[1], mutex, cond, error);
|
is = InputStream::OpenReady(argv[1], mutex, cond, error);
|
||||||
if (is != NULL) {
|
if (is != NULL) {
|
||||||
ret = dump_input_stream(is);
|
ret = dump_input_stream(is);
|
||||||
is->Close();
|
delete is;
|
||||||
} else {
|
} else {
|
||||||
if (error.IsDefined())
|
if (error.IsDefined())
|
||||||
LogError(error);
|
LogError(error);
|
||||||
|
|
Loading…
Reference in New Issue