diff options
author | waker <wakeroid@gmail.com> | 2011-03-26 19:32:07 +0100 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2011-03-26 19:32:07 +0100 |
commit | f1055a93463419c16e72aaaa6967b7245c2cfca9 (patch) | |
tree | a4a2555f4aeaf791fe4bdd625dd09c04ef4c8c5e /plugins/flac | |
parent | 2280a8f6f0482efa3a308716f4361634f656a721 (diff) |
flac: fixed filehandle leak; fixed hanging on 0-length files
Diffstat (limited to 'plugins/flac')
-rw-r--r-- | plugins/flac/flac.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/plugins/flac/flac.c b/plugins/flac/flac.c index 0f4c729d..fb4b05d9 100644 --- a/plugins/flac/flac.c +++ b/plugins/flac/flac.c @@ -165,7 +165,6 @@ static void cflac_metadata_callback(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) { DB_fileinfo_t *_info = (DB_fileinfo_t *)client_data; flac_info_t *info = (flac_info_t *)_info; - info->totalsamples = metadata->data.stream_info.total_samples; _info->fmt.samplerate = metadata->data.stream_info.sample_rate; _info->fmt.channels = metadata->data.stream_info.channels; _info->fmt.bps = metadata->data.stream_info.bits_per_sample; @@ -291,8 +290,12 @@ cflac_init (DB_fileinfo_t *_info, DB_playItem_t *it) { if (res) { fsize -= position; } - FLAC__uint64 flac_totalsamples = FLAC__stream_decoder_get_total_samples (info->decoder); - float sec = flac_totalsamples / _info->fmt.samplerate; + info->totalsamples = FLAC__stream_decoder_get_total_samples (info->decoder); + if (info->totalsamples <= 0) { + return -1; + } + float sec = info->totalsamples / (float)_info->fmt.samplerate; + deadbeef->pl_set_item_duration (it, sec); if (sec > 0) { info->bitrate = fsize / sec * 8 / 1000; } @@ -343,6 +346,9 @@ cflac_free (DB_fileinfo_t *_info) { if (info->buffer) { free (info->buffer); } + if (info->file) { + deadbeef->fclose (info->file); + } free (_info); } } @@ -572,7 +578,7 @@ cflac_init_metadata_callback(const FLAC__StreamDecoder *decoder, const FLAC__Str DB_playItem_t *it = info->it; //it->tracknum = 0; if (metadata->type == FLAC__METADATA_TYPE_STREAMINFO) { - trace ("flac: samplerate=%d, channels=%d\n", metadata->data.stream_info.sample_rate, metadata->data.stream_info.channels); + trace ("flac: samplerate=%d, channels=%d, totalsamples=%d\n", metadata->data.stream_info.sample_rate, metadata->data.stream_info.channels, metadata->data.stream_info.total_samples); _info->fmt.samplerate = metadata->data.stream_info.sample_rate; _info->fmt.channels = metadata->data.stream_info.channels; _info->fmt.bps = metadata->data.stream_info.bits_per_sample; |