windows-fix bug in FEX interface which made archive opening effectively useless. apparently fex_seek_arc takes an offset into the archive which must be got by fex_tell_arc; it doesnt take an archive index. am i right?

This commit is contained in:
zeromus 2012-10-17 05:44:16 +00:00
parent 35b6d80a62
commit 89aa770a82
3 changed files with 8 additions and 2 deletions

View File

@ -960,6 +960,10 @@
RelativePath=".\File_Extractor\fex\fex.cpp"
>
</File>
<File
RelativePath=".\File_Extractor\fex\fex.h"
>
</File>
<File
RelativePath=".\File_Extractor\fex\File_Extractor.cpp"
>

View File

@ -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];

View File

@ -50,6 +50,7 @@ protected:
{
int size;
char* name;
s64 offset;
};
ArchiveItem* m_items;
int m_numItems;