#include <sys/stat.h>
#include "cmdlib.h"
+#include "filematch.h"
#include "mathlib.h"
#include "inout.h"
#include "vfs.h"
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])))
+ char* dbuf = g_strdup(path);
+ if(*dbuf && dbuf[strlen(dbuf)-1] == '/')
+ dbuf[strlen(dbuf)-1] = 0;
+ const char *p = strrchr(dbuf, '/');
+ p = (p ? (p+1) : dbuf);
+ if(matchpattern(p, g_strForbiddenDirs[j], TRUE))
+ {
+ g_free(dbuf);
break;
+ }
+ g_free(dbuf);
}
if(j < g_numForbiddenDirs)
return;
break;
for(j = 0; j < g_numForbiddenDirs; ++j)
- if(!Q_stricmp(name, g_strForbiddenDirs[j]))
+ {
+ const char *p = strrchr(name, '/');
+ p = (p ? (p+1) : name);
+ if(matchpattern(p, g_strForbiddenDirs[j], TRUE))
break;
+ }
if(j < g_numForbiddenDirs)
continue;
*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