// Leonardo Zide (leo@lokigames.com)
//
-#include <stdio.h>
-
-#if defined (__linux__) || defined (__APPLE__)
-#include <dirent.h>
-#include <unistd.h>
-#else
-#include <wtypes.h>
-#include <io.h>
-#define R_OK 04
-#define S_ISDIR(mode) (mode & _S_IFDIR)
-#define PATH_MAX 260
-#endif
-
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include "cmdlib.h"
#include "mathlib.h"
-#include <glib.h>
#include "inout.h"
#include "vfs.h"
#include "unzip.h"
static GSList* g_unzFiles;
static GSList* g_pakFiles;
-static char g_strDirs[VFS_MAXDIRS][PATH_MAX];
+static char g_strDirs[VFS_MAXDIRS][PATH_MAX+1];
static int g_numDirs;
+char g_strForbiddenDirs[VFS_MAXDIRS][PATH_MAX+1];
+int g_numForbiddenDirs = 0;
static gboolean g_bUsePak = TRUE;
// =============================================================================
char filename[PATH_MAX];
char *dirlist;
GDir *dir;
+ int j;
+
+ for(j = 0; j < g_numForbiddenDirs; ++j)
+ {
+ if(!Q_stricmp(path, g_strForbiddenDirs[j])
+ || (strlen(path) > strlen(g_strForbiddenDirs[j]) && path[strlen(path) - strlen(g_strForbiddenDirs[j]) - 1] == '/' && !Q_stricmp(path + strlen(path) - strlen(g_strForbiddenDirs[j]), g_strForbiddenDirs[j])))
+ break;
+ }
+ if(j < g_numForbiddenDirs)
+ return;
if (g_numDirs == VFS_MAXDIRS)
return;
Sys_Printf ("VFS Init: %s\n", path);
- strcpy (g_strDirs[g_numDirs], path);
+ strncpy (g_strDirs[g_numDirs], path, PATH_MAX);
+ g_strDirs[g_numDirs][PATH_MAX] = 0;
vfsFixDOSName (g_strDirs[g_numDirs]);
vfsAddSlash (g_strDirs[g_numDirs]);
g_numDirs++;
if(name == NULL)
break;
+ for(j = 0; j < g_numForbiddenDirs; ++j)
+ if(!Q_stricmp(name, g_strForbiddenDirs[j]))
+ break;
+ if(j < g_numForbiddenDirs)
+ continue;
+
dirlist = g_strdup(name);
{
*bufferptr = safe_malloc (len+1);
if (*bufferptr == NULL)
- return -1;
+ {
+ fclose(f);
+ return -1;
+ }
- fread (*bufferptr, 1, len, f);
+ if(fread (*bufferptr, 1, len, f) != (size_t) len)
+ {
+ fclose(f);
+ return -1;
+ }
fclose (f);
// we need to end the buffer with a 0
*bufferptr = safe_malloc (len+1);
if (*bufferptr == NULL)
+ {
+ fclose(f);
return -1;
+ }
- fread (*bufferptr, 1, len, f);
+ if(fread (*bufferptr, 1, len, f) != (size_t) len)
+ {
+ fclose(f);
+ return -1;
+ }
fclose (f);
// we need to end the buffer with a 0