/* * SV_ReloadPureList */ static void SV_ReloadPureList( void ) { char **paks; int i, numpaks; Com_FreePureList( &svs.purelist ); // game modules if( sv_pure_forcemodulepk3->string[0] ) { if( Q_strnicmp( COM_FileBase( sv_pure_forcemodulepk3->string ), "modules", strlen( "modules" ) ) || !FS_IsPakValid( sv_pure_forcemodulepk3->string, NULL ) ) { Com_Printf( "Warning: Invalid value for sv_pure_forcemodulepk3, disabling\n" ); Cvar_ForceSet( "sv_pure_forcemodulepk3", "" ); } else { SV_AddPurePak( sv_pure_forcemodulepk3->string ); } } if( !sv_pure_forcemodulepk3->string[0] ) { char *libname; int libname_size; libname_size = strlen( LIB_PREFIX ) + 5 + strlen( ARCH ) + strlen( LIB_SUFFIX ) + 1; libname = Mem_TempMalloc( libname_size ); Q_snprintfz( libname, libname_size, LIB_PREFIX "game_" ARCH LIB_SUFFIX ); if( !FS_PakNameForFile( libname ) ) { if( sv_pure->integer ) { Com_Printf( "Warning: Game module not in pk3, disabling pure mode\n" ); Com_Printf( "sv_pure_forcemodulepk3 can be used to force the pure system to use a different module\n" ); Cvar_ForceSet( "sv_pure", "0" ); } } else { SV_AddPureFile( libname ); } Mem_TempFree( libname ); libname = NULL; } // *pure.(pk3|pak) paks = NULL; numpaks = FS_GetExplicitPurePakList( &paks ); if( numpaks ) { for( i = 0; i < numpaks; i++ ) { SV_AddPurePak( paks[i] ); Mem_ZoneFree( paks[i] ); } Mem_ZoneFree( paks ); } }
/* * SV_AddPureFile */ void SV_AddPureFile( const char *filename ) { const char *pakname; if( !filename || !strlen( filename ) ) { return; } pakname = FS_PakNameForFile( filename ); if( pakname ) { Com_DPrintf( "Pure file: %s (%s)\n", pakname, filename ); SV_AddPurePak( pakname ); } }
static qboolean SV_FilenameForDownloadRequest( const char *requestname, qboolean requestpak, const char **uploadname, const char **errormsg ) { if( FS_CheckPakExtension( requestname ) ) { if( !requestpak ) { *errormsg = "Pak file requested as a non pak file"; return qfalse; } if( FS_FOpenBaseFile( requestname, NULL, FS_READ ) == -1 ) { *errormsg = "File not found"; return qfalse; } *uploadname = requestname; } else { if( FS_FOpenFile( requestname, NULL, FS_READ ) == -1 ) { *errormsg = "File not found"; return qfalse; } // check if file is inside a PAK if( requestpak ) { *uploadname = FS_PakNameForFile( requestname ); if( !*uploadname ) { *errormsg = "File not available in pack"; return qfalse; } } else { *uploadname = FS_BaseNameForFile( requestname ); if( !*uploadname ) { *errormsg = "File only available in pack"; return qfalse; } } } return qtrue; }