mirror of
https://github.com/dhewm/dhewm3.git
synced 2024-11-23 12:53:09 +00:00
Don't try to extract libraries from gamepaks.
This commit is contained in:
parent
a86cbb1bff
commit
b049ea78e9
4 changed files with 9 additions and 78 deletions
|
@ -133,7 +133,7 @@ void idModelExport::LoadMayaDll( void ) {
|
||||||
exporterDLLEntry_t dllEntry;
|
exporterDLLEntry_t dllEntry;
|
||||||
char dllPath[ MAX_OSPATH ];
|
char dllPath[ MAX_OSPATH ];
|
||||||
|
|
||||||
fileSystem->FindDLL( "MayaImport", dllPath, false );
|
fileSystem->FindDLL( "MayaImport", dllPath );
|
||||||
if ( !dllPath[ 0 ] ) {
|
if ( !dllPath[ 0 ] ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -380,7 +380,7 @@ public:
|
||||||
virtual void ResetReadCount( void ) { readCount = 0; }
|
virtual void ResetReadCount( void ) { readCount = 0; }
|
||||||
virtual void AddToReadCount( int c ) { readCount += c; }
|
virtual void AddToReadCount( int c ) { readCount += c; }
|
||||||
virtual int GetReadCount( void ) { return readCount; }
|
virtual int GetReadCount( void ) { return readCount; }
|
||||||
virtual void FindDLL( const char *basename, char dllPath[ MAX_OSPATH ], bool updateChecksum );
|
virtual void FindDLL( const char *basename, char dllPath[ MAX_OSPATH ] );
|
||||||
virtual void ClearDirCache( void );
|
virtual void ClearDirCache( void );
|
||||||
virtual bool HasD3XP( void );
|
virtual bool HasD3XP( void );
|
||||||
virtual bool RunningD3XP( void );
|
virtual bool RunningD3XP( void );
|
||||||
|
@ -3718,17 +3718,12 @@ int idFileSystemLocal::GetFileChecksum( idFile *file ) {
|
||||||
idFileSystemLocal::FindDLL
|
idFileSystemLocal::FindDLL
|
||||||
=================
|
=================
|
||||||
*/
|
*/
|
||||||
void idFileSystemLocal::FindDLL( const char *name, char _dllPath[ MAX_OSPATH ], bool updateChecksum ) {
|
void idFileSystemLocal::FindDLL( const char *name, char _dllPath[ MAX_OSPATH ] ) {
|
||||||
idFile *dllFile = NULL;
|
idFile *dllFile = NULL;
|
||||||
char dllName[MAX_OSPATH];
|
char dllName[MAX_OSPATH];
|
||||||
idStr dllPath;
|
idStr dllPath;
|
||||||
int dllHash;
|
|
||||||
pack_t *inPak;
|
|
||||||
pack_t *pak;
|
|
||||||
fileInPack_t *pakFile;
|
|
||||||
|
|
||||||
sys->DLL_GetFileName( name, dllName, MAX_OSPATH );
|
sys->DLL_GetFileName( name, dllName, MAX_OSPATH );
|
||||||
dllHash = HashFileName( dllName );
|
|
||||||
|
|
||||||
#if ID_FAKE_PURE
|
#if ID_FAKE_PURE
|
||||||
if ( 1 ) {
|
if ( 1 ) {
|
||||||
|
@ -3740,74 +3735,10 @@ void idFileSystemLocal::FindDLL( const char *name, char _dllPath[ MAX_OSPATH ],
|
||||||
dllPath.AppendPath( dllName );
|
dllPath.AppendPath( dllName );
|
||||||
dllFile = OpenExplicitFileRead( dllPath );
|
dllFile = OpenExplicitFileRead( dllPath );
|
||||||
}
|
}
|
||||||
if ( !dllFile ) {
|
|
||||||
if ( !serverPaks.Num() ) {
|
if ( !dllFile && !serverPaks.Num() )
|
||||||
// not running in pure mode, try to extract from a pak file first
|
dllFile = OpenFileReadFlags( dllName, FSFLAG_SEARCH_DIRS );
|
||||||
dllFile = OpenFileReadFlags( dllName, FSFLAG_SEARCH_PAKS | FSFLAG_PURE_NOREF | FSFLAG_BINARY_ONLY, &inPak );
|
|
||||||
if ( dllFile ) {
|
|
||||||
common->Printf( "found DLL in pak file: %s\n", dllFile->GetFullPath() );
|
|
||||||
dllPath = RelativePathToOSPath( dllName, "fs_savepath" );
|
|
||||||
CopyFile( dllFile, dllPath );
|
|
||||||
CloseFile( dllFile );
|
|
||||||
dllFile = OpenFileReadFlags( dllName, FSFLAG_SEARCH_DIRS );
|
|
||||||
if ( !dllFile ) {
|
|
||||||
common->Error( "DLL extraction to fs_savepath failed\n" );
|
|
||||||
} else if ( updateChecksum ) {
|
|
||||||
gameDLLChecksum = GetFileChecksum( dllFile );
|
|
||||||
gamePakChecksum = inPak->checksum;
|
|
||||||
updateChecksum = false; // don't try again below
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// didn't find a source in a pak file, try in the directory
|
|
||||||
dllFile = OpenFileReadFlags( dllName, FSFLAG_SEARCH_DIRS );
|
|
||||||
if ( dllFile ) {
|
|
||||||
if ( updateChecksum ) {
|
|
||||||
gameDLLChecksum = GetFileChecksum( dllFile );
|
|
||||||
// see if we can mark a pak file
|
|
||||||
pak = FindPakForFileChecksum( dllName, gameDLLChecksum, false );
|
|
||||||
pak ? gamePakChecksum = pak->checksum : gamePakChecksum = 0;
|
|
||||||
updateChecksum = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// we are in pure mode. this path to be reached only for game DLL situations
|
|
||||||
// with a code pak checksum given by server
|
|
||||||
assert( gamePakChecksum );
|
|
||||||
assert( updateChecksum );
|
|
||||||
pak = GetPackForChecksum( gamePakChecksum );
|
|
||||||
if ( !pak ) {
|
|
||||||
// not supposed to happen, bug in pure code?
|
|
||||||
common->Warning( "FindDLL in pure mode: game pak not found ( 0x%x )\n", gamePakChecksum );
|
|
||||||
} else {
|
|
||||||
// extract and copy
|
|
||||||
for ( pakFile = pak->hashTable[dllHash]; pakFile; pakFile = pakFile->next ) {
|
|
||||||
if ( !FilenameCompare( pakFile->name, dllName ) ) {
|
|
||||||
dllFile = ReadFileFromZip( pak, pakFile, dllName );
|
|
||||||
common->Printf( "found DLL in game pak file: %s\n", pak->pakFilename.c_str() );
|
|
||||||
dllPath = RelativePathToOSPath( dllName, "fs_savepath" );
|
|
||||||
CopyFile( dllFile, dllPath );
|
|
||||||
CloseFile( dllFile );
|
|
||||||
dllFile = OpenFileReadFlags( dllName, FSFLAG_SEARCH_DIRS );
|
|
||||||
if ( !dllFile ) {
|
|
||||||
common->Error( "DLL extraction to fs_savepath failed\n" );
|
|
||||||
} else {
|
|
||||||
gameDLLChecksum = GetFileChecksum( dllFile );
|
|
||||||
updateChecksum = false; // don't try again below
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( updateChecksum ) {
|
|
||||||
if ( dllFile ) {
|
|
||||||
gameDLLChecksum = GetFileChecksum( dllFile );
|
|
||||||
} else {
|
|
||||||
gameDLLChecksum = 0;
|
|
||||||
}
|
|
||||||
gamePakChecksum = 0;
|
|
||||||
}
|
|
||||||
if ( dllFile ) {
|
if ( dllFile ) {
|
||||||
dllPath = dllFile->GetFullPath( );
|
dllPath = dllFile->GetFullPath( );
|
||||||
CloseFile( dllFile );
|
CloseFile( dllFile );
|
||||||
|
|
|
@ -250,7 +250,7 @@ public:
|
||||||
// adds to the read count
|
// adds to the read count
|
||||||
virtual void AddToReadCount( int c ) = 0;
|
virtual void AddToReadCount( int c ) = 0;
|
||||||
// look for a dynamic module
|
// look for a dynamic module
|
||||||
virtual void FindDLL( const char *basename, char dllPath[ MAX_OSPATH ], bool updateChecksum ) = 0;
|
virtual void FindDLL( const char *basename, char dllPath[ MAX_OSPATH ] ) = 0;
|
||||||
// case sensitive filesystems use an internal directory cache
|
// case sensitive filesystems use an internal directory cache
|
||||||
// the cache is cleared when calling OpenFileWrite and RemoveFile
|
// the cache is cleared when calling OpenFileWrite and RemoveFile
|
||||||
// in some cases you may need to use this directly
|
// in some cases you may need to use this directly
|
||||||
|
|
|
@ -133,7 +133,7 @@ void idModelExport::LoadMayaDll( void ) {
|
||||||
exporterDLLEntry_t dllEntry;
|
exporterDLLEntry_t dllEntry;
|
||||||
char dllPath[ MAX_OSPATH ];
|
char dllPath[ MAX_OSPATH ];
|
||||||
|
|
||||||
fileSystem->FindDLL( "MayaImport", dllPath, false );
|
fileSystem->FindDLL( "MayaImport", dllPath );
|
||||||
if ( !dllPath[ 0 ] ) {
|
if ( !dllPath[ 0 ] ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue