diff --git a/include/FLAC/file_decoder.h b/include/FLAC/file_decoder.h index feeb8a8c..b2d94b63 100644 --- a/include/FLAC/file_decoder.h +++ b/include/FLAC/file_decoder.h @@ -95,7 +95,7 @@ void FLAC__file_decoder_delete(FLAC__FileDecoder *); * NOT reset the values to the constructor defaults. */ FLAC__bool FLAC__file_decoder_set_md5_checking(const FLAC__FileDecoder *decoder, FLAC__bool value); -FLAC__bool FLAC__file_decoder_set_filename(const FLAC__FileDecoder *decoder, const char *value); +FLAC__bool FLAC__file_decoder_set_filename(const FLAC__FileDecoder *decoder, const char *value); /* 'value' may not be 0; use "-" for stdin */ FLAC__bool FLAC__file_decoder_set_write_callback(const FLAC__FileDecoder *decoder, FLAC__StreamDecoderWriteStatus (*value)(const FLAC__FileDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 *buffer[], void *client_data)); FLAC__bool FLAC__file_decoder_set_metadata_callback(const FLAC__FileDecoder *decoder, void (*value)(const FLAC__FileDecoder *decoder, const FLAC__StreamMetaData *metadata, void *client_data)); FLAC__bool FLAC__file_decoder_set_error_callback(const FLAC__FileDecoder *decoder, void (*value)(const FLAC__FileDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)); diff --git a/src/libFLAC/file_decoder.c b/src/libFLAC/file_decoder.c index 0135da7b..a0806543 100644 --- a/src/libFLAC/file_decoder.c +++ b/src/libFLAC/file_decoder.c @@ -154,7 +154,7 @@ FLAC__FileDecoderState FLAC__file_decoder_init(FLAC__FileDecoder *decoder) decoder->private_->stream_decoder = 0; decoder->private_->seek_table = 0; - if(0 == strcmp(decoder->private_->filename, "-")) + if(0 == decoder->private_->filename) decoder->private_->file = stdin; else decoder->private_->file = fopen(decoder->private_->filename, "rb"); @@ -221,13 +221,21 @@ FLAC__bool FLAC__file_decoder_set_md5_checking(const FLAC__FileDecoder *decoder, FLAC__bool FLAC__file_decoder_set_filename(const FLAC__FileDecoder *decoder, const char *value) { + FLAC__ASSERT(value != 0); if(decoder->protected_->state != FLAC__FILE_DECODER_UNINITIALIZED) return false; - if(0 == (decoder->private_->filename = (char*)malloc(strlen(value)+1))) { - decoder->protected_->state = FLAC__FILE_DECODER_MEMORY_ALLOCATION_ERROR; - return false; + if(0 != decoder->private_->filename) + free(decoder->private_->filename); + if(0 == strcmp(value, "-")) { + decoder->private_->filename = 0; + } + else { + if(0 == (decoder->private_->filename = (char*)malloc(strlen(value)+1))) { + decoder->protected_->state = FLAC__FILE_DECODER_MEMORY_ALLOCATION_ERROR; + return false; + } + strcpy(decoder->private_->filename, value); } - strcpy(decoder->private_->filename, value); return true; }