Browse Source

filesystem: allow acquiring C interface through CreateInterface export

pull/2/head
Alibek Omarov 2 years ago
parent
commit
fce8afabfb
  1. 12
      filesystem/VFileSystem009.cpp
  2. 2
      filesystem/filesystem.c
  3. 1
      filesystem/filesystem.h
  4. 1
      filesystem/filesystem_internal.h

12
filesystem/VFileSystem009.cpp

@ -492,6 +492,18 @@ extern "C" void EXPORT *CreateInterface( const char *interface, int *retval )
return &g_VFileSystem009; return &g_VFileSystem009;
} }
if( !Q_strcmp( interface, FS_API_CREATEINTERFACE_TAG ))
{
// return a copy, to disallow overriding
static fs_api_t copy = { 0 };
if( !copy.InitStdio )
memcpy( &copy, &g_api, sizeof( copy ));
if( retval ) *retval = 0;
return ©
}
if( retval ) *retval = 1; if( retval ) *retval = 1;
return NULL; return NULL;
} }

2
filesystem/filesystem.c

@ -2868,7 +2868,7 @@ static qboolean FS_InitInterface( int version, fs_interface_t *engfuncs )
return true; return true;
} }
static fs_api_t g_api = fs_api_t g_api =
{ {
FS_InitStdio, FS_InitStdio,
FS_ShutdownStdio, FS_ShutdownStdio,

1
filesystem/filesystem.h

@ -29,6 +29,7 @@ extern "C"
#endif // __cplusplus #endif // __cplusplus
#define FS_API_VERSION 1 // not stable yet! #define FS_API_VERSION 1 // not stable yet!
#define FS_API_CREATEINTERFACE_TAG "XashFileSystem001" // follow FS_API_VERSION!!!
// search path flags // search path flags
enum enum

1
filesystem/filesystem_internal.h

@ -86,6 +86,7 @@ extern qboolean fs_ext_path;
extern char fs_rodir[MAX_SYSPATH]; extern char fs_rodir[MAX_SYSPATH];
extern char fs_rootdir[MAX_SYSPATH]; extern char fs_rootdir[MAX_SYSPATH];
extern char fs_writedir[MAX_SYSPATH]; extern char fs_writedir[MAX_SYSPATH];
extern fs_api_t g_api;
#define GI FI.GameInfo #define GI FI.GameInfo

Loading…
Cancel
Save