2
0
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:
Alibek Omarov 2024-04-22 03:39:21 +03:00
parent 75451cc7fa
commit 60c6767337
4 changed files with 18 additions and 12 deletions

View File

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

View File

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

View File

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

View File

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