Skip to content

Commit

Permalink
Merge "which" command upstream from Tremulous, patch provided by Chri…
Browse files Browse the repository at this point in the history
…s Schwarz
  • Loading branch information
Thilo Schulz committed Feb 10, 2011
1 parent 2c57226 commit 4dc750a
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 0 deletions.
2 changes: 2 additions & 0 deletions README
Expand Up @@ -236,6 +236,8 @@ New commands
net_restart - restart network subsystem to change latched settings
game_restart <fs_game> - Switch to another mod

which <filename/path> - print out the path on disk to a loaded item

------------------------------------------------------------ Miscellaneous -----

Using shared libraries instead of qvm
Expand Down
70 changes: 70 additions & 0 deletions code/qcommon/files.c
Expand Up @@ -2440,6 +2440,74 @@ void FS_TouchFile_f( void ) {
}
}

/*
============
FS_Which_f
============
*/
void FS_Which_f( void ) {
searchpath_t *search;
char *netpath;
pack_t *pak;
fileInPack_t *pakFile;
directory_t *dir;
long hash;
FILE *temp;
char *filename;
char buf[ MAX_OSPATH ];

hash = 0;
filename = Cmd_Argv(1);

if ( !filename[0] ) {
Com_Printf( "Usage: which <file>\n" );
return;
}

// qpaths are not supposed to have a leading slash
if ( filename[0] == '/' || filename[0] == '\\' ) {
filename++;
}

// just wants to see if file is there
for ( search = fs_searchpaths ; search ; search = search->next ) {
if ( search->pack ) {
hash = FS_HashFileName(filename, search->pack->hashSize);
}
// is the element a pak file?
if ( search->pack && search->pack->hashTable[hash] ) {
// look through all the pak file elements
pak = search->pack;
pakFile = pak->hashTable[hash];
do {
// case and separator insensitive comparisons
if ( !FS_FilenameCompare( pakFile->name, filename ) ) {
// found it!
Com_Printf( "File \"%s\" found in \"%s\"\n", filename, pak->pakFilename );
return;
}
pakFile = pakFile->next;
} while(pakFile != NULL);
} else if ( search->dir ) {
dir = search->dir;

netpath = FS_BuildOSPath( dir->path, dir->gamedir, filename );
temp = fopen (netpath, "rb");
if ( !temp ) {
continue;
}
fclose(temp);
Com_sprintf( buf, sizeof( buf ), "%s/%s", dir->path, dir->gamedir );
FS_ReplaceSeparators( buf );
Com_Printf( "File \"%s\" found at \"%s\"\n", filename, buf );
return;
}
}
Com_Printf( "File not found: \"%s\"\n", filename );
return;
}


//===========================================================================


Expand Down Expand Up @@ -2719,6 +2787,7 @@ void FS_Shutdown( qboolean closemfp ) {
Cmd_RemoveCommand( "dir" );
Cmd_RemoveCommand( "fdir" );
Cmd_RemoveCommand( "touchFile" );
Cmd_RemoveCommand( "which" );

#ifdef FS_MISSING
if (closemfp) {
Expand Down Expand Up @@ -2852,6 +2921,7 @@ static void FS_Startup( const char *gameName )
Cmd_AddCommand ("dir", FS_Dir_f );
Cmd_AddCommand ("fdir", FS_NewDir_f );
Cmd_AddCommand ("touchFile", FS_TouchFile_f );
Cmd_AddCommand ("which", FS_Which_f );

// https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=506
// reorder the pure pk3 files according to server order
Expand Down
3 changes: 3 additions & 0 deletions code/qcommon/vm.c
Expand Up @@ -384,6 +384,9 @@ vmHeader_t *VM_LoadQVM( vm_t *vm, qboolean alloc ) {
return NULL;
}

// show where the qvm was loaded from
Cmd_ExecuteString( va( "which %s\n", filename ) );

if( LittleLong( header.h->vmMagic ) == VM_MAGIC_VER2 ) {
Com_Printf( "...which has vmMagic VM_MAGIC_VER2\n" );

Expand Down

0 comments on commit 4dc750a

Please sign in to comment.