diff --git a/desmume/src/windows/DeSmuME_2005.vcproj b/desmume/src/windows/DeSmuME_2005.vcproj index 9ce0ece45..7a8d26a17 100644 --- a/desmume/src/windows/DeSmuME_2005.vcproj +++ b/desmume/src/windows/DeSmuME_2005.vcproj @@ -960,6 +960,10 @@ RelativePath=".\File_Extractor\fex\fex.cpp" > + + diff --git a/desmume/src/windows/FEX_Interface.cpp b/desmume/src/windows/FEX_Interface.cpp index 0b3714607..9c80e0680 100644 --- a/desmume/src/windows/FEX_Interface.cpp +++ b/desmume/src/windows/FEX_Interface.cpp @@ -223,6 +223,7 @@ ArchiveFile::ArchiveFile(const char* filename) if (err) break; item.size = fex_size(object); + item.offset = fex_tell_arc(object); fex_next(object); } @@ -302,7 +303,7 @@ int ArchiveFile::ExtractItem(int index, unsigned char* outBuffer, int bufSize) c fex_err_t err = fex_open_type( &object, m_filename, s_formatInfos[m_typeIndex].type ); if ( !err ) { - if ( index != 0 ) err = fex_seek_arc( object, index ); + if ( index != 0 ) err = fex_seek_arc( object, item.offset ); if ( !err ) { err = fex_read( object, outBuffer, item.size ); @@ -348,7 +349,7 @@ int ArchiveFile::ExtractItem(int index, const char* outFilename) const fex_err_t err = fex_open_type( &object, m_filename, s_formatInfos[m_typeIndex].type ); if ( !err ) { - if ( index != 0 ) err = fex_seek_arc( object, index ); + if ( index != 0 ) err = fex_seek_arc( object, item.offset ); if ( !err ) { unsigned char * buffer = new unsigned char[item.size]; diff --git a/desmume/src/windows/FEX_Interface.h b/desmume/src/windows/FEX_Interface.h index 930f01d9b..8bf504b3d 100644 --- a/desmume/src/windows/FEX_Interface.h +++ b/desmume/src/windows/FEX_Interface.h @@ -50,6 +50,7 @@ protected: { int size; char* name; + s64 offset; }; ArchiveItem* m_items; int m_numItems;