summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThilo Schulz <arny@ats.s.bawue.de>2012-07-02 01:03:55 +0000
committerTim Angus <tim@ngus.net>2013-01-12 20:46:30 +0000
commit91bdb0958201702e3d154ec6a0ffdd9e64266c0a (patch)
treecc9b1fd983a4a19293da0642a0b7357a02f8ca89 /src
parent3ad20cf60a135274fb73675ff176f7f80e4e9bf7 (diff)
Revert pk3dir patch because some users report the code gets stuck in an infinite loop in the new code
Diffstat (limited to 'src')
-rw-r--r--src/qcommon/files.c95
1 files changed, 14 insertions, 81 deletions
diff --git a/src/qcommon/files.c b/src/qcommon/files.c
index b34101ca..ff5ab8e2 100644
--- a/src/qcommon/files.c
+++ b/src/qcommon/files.c
@@ -2784,20 +2784,12 @@ then loads the zip headers
*/
void FS_AddGameDirectory( const char *path, const char *dir ) {
searchpath_t *sp;
+ int i;
searchpath_t *search;
pack_t *pak;
char curpath[MAX_OSPATH + 1], *pakfile;
int numfiles;
char **pakfiles;
- int pakfilesi;
- char **pakfilestmp;
- int numdirs;
- char **pakdirs;
- int pakdirsi;
- char **pakdirstmp;
-
- int pakwhich;
- int len;
// Unique
for ( sp = fs_searchpaths ; sp ; sp = sp->next ) {
@@ -2812,84 +2804,25 @@ void FS_AddGameDirectory( const char *path, const char *dir ) {
Q_strncpyz(curpath, FS_BuildOSPath(path, dir, ""), sizeof(curpath));
curpath[strlen(curpath) - 1] = '\0'; // strip the trailing slash
- // Get .pk3 files
pakfiles = Sys_ListFiles(curpath, ".pk3", NULL, &numfiles, qfalse);
- // Get top level directories (we'll filter them later since the Sys_ListFiles filtering is terrible)
- pakdirs = Sys_ListFiles(curpath, "/", NULL, &numdirs, qfalse);
-
qsort( pakfiles, numfiles, sizeof(char*), paksort );
- qsort(pakdirs, numdirs, sizeof(char *), paksort);
-
- pakfilesi = 0;
- pakdirsi = 0;
-
- // Log may not be initialized at this point, but it will still show in the console.
-
- while((pakfilesi + pakdirsi) < (numfiles + numdirs))
- {
- // Check if a pakfile or pakdir comes next
- if (pakfilesi >= numfiles) {
- // We've used all the pakfiles, it must be a pakdir.
- pakwhich = 0;
- }
- else if (pakdirsi >= numdirs) {
- // We've used all the pakdirs, it must be a pakfile.
- pakwhich = 1;
- }
- else {
- // Could be either, compare to see which name comes first
- // Need tmp variables for appropriate indirection for paksort()
- pakfilestmp = &pakfiles[pakfilesi];
- pakdirstmp = &pakdirs[pakdirsi];
- pakwhich = (paksort(pakfilestmp, pakdirstmp) < 0);
- }
-
- if (pakwhich) {
- // The next .pk3 file is before the next .pk3dir
- pakfile = FS_BuildOSPath(path, dir, pakfiles[pakfilesi]);
- if ((pak = FS_LoadZipFile(pakfile, pakfiles[pakfilesi])) == 0) {
- continue;
- }
- Q_strncpyz(pak->pakPathname, curpath, sizeof(pak->pakPathname));
- // store the game name for downloading
- Q_strncpyz(pak->pakGamename, dir, sizeof(pak->pakGamename));
-
- fs_packFiles += pak->numfiles;
-
- search = Z_Malloc(sizeof(searchpath_t));
- search->pack = pak;
- search->next = fs_searchpaths;
- fs_searchpaths = search;
-
- pakfilesi++;
- }
- else {
- // The next .pk3dir is before the next .pk3 file
- // But wait, this could be any directory, we're filtering to only ending with ".pk3dir" here.
- len = strlen(pakdirs[pakdirsi]);
- if (!FS_IsExt(pakdirs[pakdirsi], ".pk3dir", len)) {
- // This isn't a .pk3dir! Next!
- pakdirsi++;
- continue;
- }
-
- pakfile = FS_BuildOSPath(path, dir, pakdirs[pakdirsi]);
-
- // add the directory to the search path
- search = Z_Malloc(sizeof(searchpath_t));
- search->dir = Z_Malloc(sizeof(*search->dir));
-
- Q_strncpyz(search->dir->path, curpath, sizeof(search->dir->path)); // c:\xreal\base
- Q_strncpyz(search->dir->fullpath, pakfile, sizeof(search->dir->fullpath)); // c:\xreal\base\mypak.pk3dir
- Q_strncpyz(search->dir->gamedir, pakdirs[pakdirsi], sizeof(search->dir->gamedir)); // mypak.pk3dir
+ for ( i = 0 ; i < numfiles ; i++ ) {
+ pakfile = FS_BuildOSPath( path, dir, pakfiles[i] );
+ if ( ( pak = FS_LoadZipFile( pakfile, pakfiles[i] ) ) == 0 )
+ continue;
- search->next = fs_searchpaths;
- fs_searchpaths = search;
+ Q_strncpyz(pak->pakPathname, curpath, sizeof(pak->pakPathname));
+ // store the game name for downloading
+ Q_strncpyz(pak->pakGamename, dir, sizeof(pak->pakGamename));
+
+ fs_packFiles += pak->numfiles;
- pakdirsi++;
- }
+ search = Z_Malloc (sizeof(searchpath_t));
+ search->pack = pak;
+ search->next = fs_searchpaths;
+ fs_searchpaths = search;
}
// done