mirror of
https://github.com/FWGS/xash3d-fwgs
synced 2024-11-22 01:45:19 +01:00
filesystem: copy absolute path to library in FS_FindLibrary for compatibility
Extend fullPath for longer absolute paths.
This commit is contained in:
parent
75451cc7fa
commit
60c6767337
@ -89,32 +89,32 @@ qboolean FS_LoadProgs( void )
|
|||||||
|
|
||||||
if( !fs_hInstance )
|
if( !fs_hInstance )
|
||||||
{
|
{
|
||||||
Host_Error( "FS_LoadProgs: can't load filesystem library %s: %s\n", name, COM_GetLibraryError() );
|
Host_Error( "%s: can't load filesystem library %s: %s\n", __func__, name, COM_GetLibraryError() );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !( GetFSAPI = (FSAPI)COM_GetProcAddress( fs_hInstance, GET_FS_API )))
|
if( !( GetFSAPI = (FSAPI)COM_GetProcAddress( fs_hInstance, GET_FS_API )))
|
||||||
{
|
{
|
||||||
FS_UnloadProgs();
|
FS_UnloadProgs();
|
||||||
Host_Error( "FS_LoadProgs: can't find GetFSAPI entry point in %s\n", name );
|
Host_Error( "%s: can't find GetFSAPI entry point in %s\n", __func__, name );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !GetFSAPI( FS_API_VERSION, &g_fsapi, &FI, &fs_memfuncs ))
|
if( GetFSAPI( FS_API_VERSION, &g_fsapi, &FI, &fs_memfuncs ) != FS_API_VERSION )
|
||||||
{
|
{
|
||||||
FS_UnloadProgs();
|
FS_UnloadProgs();
|
||||||
Host_Error( "FS_LoadProgs: can't initialize filesystem API: wrong version\n" );
|
Host_Error( "%s: can't initialize filesystem API: wrong version\n", __func__ );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !( fs_pfnCreateInterface = (pfnCreateInterface_t)COM_GetProcAddress( fs_hInstance, "CreateInterface" )))
|
if( !( fs_pfnCreateInterface = (pfnCreateInterface_t)COM_GetProcAddress( fs_hInstance, "CreateInterface" )))
|
||||||
{
|
{
|
||||||
FS_UnloadProgs();
|
FS_UnloadProgs();
|
||||||
Host_Error( "FS_LoadProgs: can't find CreateInterface entry point in %s\n", name );
|
Host_Error( "%s: can't find CreateInterface entry point in %s\n", __func__, name );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Con_DPrintf( "FS_LoadProgs: filesystem_stdio successfully loaded\n" );
|
Con_DPrintf( "%s: filesystem_stdio successfully loaded\n", __func__ );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,8 @@ typedef struct dll_user_s
|
|||||||
qboolean custom_loader; // a bit who indicated loader type
|
qboolean custom_loader; // a bit who indicated loader type
|
||||||
qboolean encrypted; // dll is crypted (some client.dll in HL, CS etc)
|
qboolean encrypted; // dll is crypted (some client.dll in HL, CS etc)
|
||||||
char dllName[32]; // for debug messages
|
char dllName[32]; // for debug messages
|
||||||
string fullPath, shortPath; // actual dll paths
|
char fullPath[2048];
|
||||||
|
string shortPath; // actual dll paths
|
||||||
|
|
||||||
// ordinals stuff, valid only on Win32
|
// ordinals stuff, valid only on Win32
|
||||||
word *ordinals;
|
word *ordinals;
|
||||||
|
@ -1363,8 +1363,13 @@ static qboolean FS_FindLibrary( const char *dllname, qboolean directpath, fs_dll
|
|||||||
|
|
||||||
if( index >= 0 && !dllInfo->encrypted && search )
|
if( index >= 0 && !dllInfo->encrypted && search )
|
||||||
{
|
{
|
||||||
Q_snprintf( dllInfo->fullPath, sizeof( dllInfo->fullPath ),
|
// gamedll might resolve it's own path using dladdr()
|
||||||
"%s%s", search->filename, dllInfo->shortPath );
|
// combine it with engine returned path to gamedir
|
||||||
|
// it might lead to double gamedir like this
|
||||||
|
// - valve/valve/dlls/hl.so
|
||||||
|
// instead of expected
|
||||||
|
// - valve/dlls/hl.so
|
||||||
|
Q_snprintf( dllInfo->fullPath, sizeof( dllInfo->fullPath ), "%s/%s%s", fs_rootdir, search->filename, dllInfo->shortPath );
|
||||||
dllInfo->custom_loader = false; // we can loading from disk and use normal debugging
|
dllInfo->custom_loader = false; // we can loading from disk and use normal debugging
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -31,7 +31,7 @@ extern "C"
|
|||||||
{
|
{
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
||||||
#define FS_API_VERSION 2 // not stable yet!
|
#define FS_API_VERSION 3 // not stable yet!
|
||||||
#define FS_API_CREATEINTERFACE_TAG "XashFileSystem002" // follow FS_API_VERSION!!!
|
#define FS_API_CREATEINTERFACE_TAG "XashFileSystem002" // follow FS_API_VERSION!!!
|
||||||
#define FILESYSTEM_INTERFACE_VERSION "VFileSystem009" // never change this!
|
#define FILESYSTEM_INTERFACE_VERSION "VFileSystem009" // never change this!
|
||||||
|
|
||||||
@ -121,8 +121,8 @@ typedef enum
|
|||||||
|
|
||||||
typedef struct fs_dllinfo_t
|
typedef struct fs_dllinfo_t
|
||||||
{
|
{
|
||||||
string fullPath;
|
char fullPath[2048]; // absolute disk path
|
||||||
string shortPath;
|
string shortPath; // vfs path
|
||||||
qboolean encrypted;
|
qboolean encrypted;
|
||||||
qboolean custom_loader;
|
qboolean custom_loader;
|
||||||
} fs_dllinfo_t;
|
} fs_dllinfo_t;
|
||||||
|
Loading…
Reference in New Issue
Block a user