diff --git a/src/core/fex/fex/BZ2_Inflater.cpp b/src/core/fex/fex/BZ2_Inflater.cpp index 2e9ae73c..a9d334d3 100644 --- a/src/core/fex/fex/BZ2_Inflater.cpp +++ b/src/core/fex/fex/BZ2_Inflater.cpp @@ -68,6 +68,11 @@ blargg_err_t BZ2_Inflater::fill_buf( int count ) return blargg_ok; } +blargg_err_t BZ2_Inflater::resize_buffer( int count ) +{ + return buf.resize(count); +} + blargg_err_t BZ2_Inflater::begin( callback_t new_callback, void* new_user_data, int new_buf_size, int initial_read ) { diff --git a/src/core/fex/fex/BZ2_Inflater.h b/src/core/fex/fex/BZ2_Inflater.h index 448ac51c..8da4c02f 100644 --- a/src/core/fex/fex/BZ2_Inflater.h +++ b/src/core/fex/fex/BZ2_Inflater.h @@ -62,6 +62,8 @@ class BZ2_Inflater return zbuf.total_out_lo32; } + blargg_err_t resize_buffer(int count); + // Ends inflation and frees memory void end(); diff --git a/src/core/fex/fex/BZ2_Reader.cpp b/src/core/fex/fex/BZ2_Reader.cpp index ba277e33..975ef467 100644 --- a/src/core/fex/fex/BZ2_Reader.cpp +++ b/src/core/fex/fex/BZ2_Reader.cpp @@ -67,6 +67,7 @@ blargg_err_t BZ2_Reader::read_v( void* out, int count ) if ( actual < count ) { size_ = actual; + inflater.resize_buffer(actual); set_remain(0); } diff --git a/src/core/fex/fex/fex.cpp b/src/core/fex/fex/fex.cpp index abf8c63c..bd4b0810 100644 --- a/src/core/fex/fex/fex.cpp +++ b/src/core/fex/fex/fex.cpp @@ -203,11 +203,11 @@ BLARGG_EXPORT fex_err_t fex_identify_file( fex_type_t* type_out, const char path { char h [fex_identify_header_size]; RETURN_ERR( in.read( h, sizeof h ) ); - + type = fex_identify_extension( fex_identify_header( h ) ); } } - + *type_out = type; return blargg_ok; }