diff --git a/tools/quake3/common/vfs.c b/tools/quake3/common/vfs.c index 52595be5..254babbe 100644 --- a/tools/quake3/common/vfs.c +++ b/tools/quake3/common/vfs.c @@ -133,6 +133,7 @@ static void vfsInitPakFile( const char *filename ){ for ( i = 0; i < gi.number_entry; i++ ) { char filename_inzip[NAME_MAX]; + char *filename_lower; unz_file_info file_info; VFS_PAKFILE* file; @@ -145,9 +146,9 @@ static void vfsInitPakFile( const char *filename ){ g_pakFiles = g_slist_append( g_pakFiles, file ); vfsFixDOSName( filename_inzip ); - g_ascii_strdown( filename_inzip, -1 );//-1 null terminated string + filename_lower = g_ascii_strdown( filename_inzip, -1 );//-1 null terminated string - file->name = strdup( filename_inzip ); + file->name = strdup( filename_lower ); file->size = file_info.uncompressed_size; file->zipfile = uf; memcpy( &file->zipinfo, uf, sizeof( unz_s ) ); @@ -158,6 +159,7 @@ static void vfsInitPakFile( const char *filename ){ break; } } + g_free( filename_lower ); } } @@ -232,17 +234,18 @@ void vfsShutdown(){ int vfsGetFileCount( const char *filename ){ int i, count = 0; char fixed[NAME_MAX], tmp[NAME_MAX]; + char *lower; GSList *lst; strcpy( fixed, filename ); vfsFixDOSName( fixed ); - g_ascii_strdown( fixed, -1 ); + lower = g_ascii_strdown( fixed, -1 ); for ( lst = g_pakFiles; lst != NULL; lst = g_slist_next( lst ) ) { VFS_PAKFILE* file = (VFS_PAKFILE*)lst->data; - if ( strcmp( file->name, fixed ) == 0 ) { + if ( strcmp( file->name, lower ) == 0 ) { count++; } } @@ -250,12 +253,12 @@ int vfsGetFileCount( const char *filename ){ for ( i = 0; i < g_numDirs; i++ ) { strcpy( tmp, g_strDirs[i] ); - strcat( tmp, fixed ); + strcat( tmp, lower ); if ( access( tmp, R_OK ) == 0 ) { count++; } } - + g_free( lower ); return count; } @@ -263,6 +266,7 @@ int vfsGetFileCount( const char *filename ){ int vfsLoadFile( const char *filename, void **bufferptr, int index ){ int i, count = 0; char tmp[NAME_MAX], fixed[NAME_MAX]; + char *lower; GSList *lst; // filename is a full path @@ -296,7 +300,7 @@ int vfsLoadFile( const char *filename, void **bufferptr, int index ){ *bufferptr = NULL; strcpy( fixed, filename ); vfsFixDOSName( fixed ); - g_ascii_strdown( fixed, -1 ); + lower = g_ascii_strdown( fixed, -1 ); for ( i = 0; i < g_numDirs; i++ ) { @@ -338,7 +342,7 @@ int vfsLoadFile( const char *filename, void **bufferptr, int index ){ { VFS_PAKFILE* file = (VFS_PAKFILE*)lst->data; - if ( strcmp( file->name, fixed ) != 0 ) { + if ( strcmp( file->name, lower ) != 0 ) { continue; } @@ -359,12 +363,13 @@ int vfsLoadFile( const char *filename, void **bufferptr, int index ){ return -1; } else{ + g_free( lower ); return file->size; } } count++; } - + g_free( lower ); return -1; }