From 2e45edb550b6c3a4d6ddbe72e0c76eb774d0c800 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Fri, 15 Feb 2013 21:08:47 -0600 Subject: [PATCH] 5717 - Gamecode can open file "" for reading --- code/null/null_main.c | 4 ++++ code/qcommon/files.c | 18 +++++++++--------- code/qcommon/qcommon.h | 1 + code/sys/sys_unix.c | 15 +++++++++++++++ code/sys/sys_win32.c | 9 +++++++++ 5 files changed, 38 insertions(+), 9 deletions(-) diff --git a/code/null/null_main.c b/code/null/null_main.c index f2d9a2d5..4043eb97 100644 --- a/code/null/null_main.c +++ b/code/null/null_main.c @@ -82,6 +82,10 @@ int Sys_Milliseconds (void) { return 0; } +FILE *Sys_FOpen(const char *ospath, const char *mode) { + return fopen( ospath, mode ); +} + void Sys_Mkdir (char *path) { } diff --git a/code/qcommon/files.c b/code/qcommon/files.c index 79fa7fa4..cb2a165b 100644 --- a/code/qcommon/files.c +++ b/code/qcommon/files.c @@ -600,7 +600,7 @@ qboolean FS_FileInPathExists(const char *testpath) { FILE *filep; - filep = fopen(testpath, "rb"); + filep = Sys_FOpen(testpath, "rb"); if(filep) { @@ -675,7 +675,7 @@ fileHandle_t FS_SV_FOpenFileWrite( const char *filename ) { } Com_DPrintf( "writing to: %s\n", ospath ); - fsh[f].handleFiles.file.o = fopen( ospath, "wb" ); + fsh[f].handleFiles.file.o = Sys_FOpen( ospath, "wb" ); Q_strncpyz( fsh[f].name, filename, sizeof( fsh[f].name ) ); @@ -720,7 +720,7 @@ long FS_SV_FOpenFileRead(const char *filename, fileHandle_t *fp) Com_Printf( "FS_SV_FOpenFileRead (fs_homepath): %s\n", ospath ); } - fsh[f].handleFiles.file.o = fopen( ospath, "rb" ); + fsh[f].handleFiles.file.o = Sys_FOpen( ospath, "rb" ); fsh[f].handleSync = qfalse; if (!fsh[f].handleFiles.file.o) { @@ -736,7 +736,7 @@ long FS_SV_FOpenFileRead(const char *filename, fileHandle_t *fp) Com_Printf( "FS_SV_FOpenFileRead (fs_basepath): %s\n", ospath ); } - fsh[f].handleFiles.file.o = fopen( ospath, "rb" ); + fsh[f].handleFiles.file.o = Sys_FOpen( ospath, "rb" ); fsh[f].handleSync = qfalse; } @@ -878,7 +878,7 @@ fileHandle_t FS_FOpenFileWrite( const char *filename ) { // enabling the following line causes a recursive function call loop // when running with +set logfile 1 +set developer 1 //Com_DPrintf( "writing to: %s\n", ospath ); - fsh[f].handleFiles.file.o = fopen( ospath, "wb" ); + fsh[f].handleFiles.file.o = Sys_FOpen( ospath, "wb" ); Q_strncpyz( fsh[f].name, filename, sizeof( fsh[f].name ) ); @@ -923,7 +923,7 @@ fileHandle_t FS_FOpenFileAppend( const char *filename ) { return 0; } - fsh[f].handleFiles.file.o = fopen( ospath, "ab" ); + fsh[f].handleFiles.file.o = Sys_FOpen( ospath, "ab" ); fsh[f].handleSync = qfalse; if (!fsh[f].handleFiles.file.o) { f = 0; @@ -1162,7 +1162,7 @@ long FS_FOpenFileReadDir(const char *filename, searchpath_t *search, fileHandle_ dir = search->dir; netpath = FS_BuildOSPath(dir->path, dir->gamedir, filename); - filep = fopen (netpath, "rb"); + filep = Sys_FOpen(netpath, "rb"); if(filep) { @@ -1296,7 +1296,7 @@ long FS_FOpenFileReadDir(const char *filename, searchpath_t *search, fileHandle_ dir = search->dir; netpath = FS_BuildOSPath(dir->path, dir->gamedir, filename); - filep = fopen(netpath, "rb"); + filep = Sys_FOpen(netpath, "rb"); if (filep == NULL) { @@ -3312,7 +3312,7 @@ static void FS_Startup( const char *gameName ) #ifdef FS_MISSING if (missingFiles == NULL) { - missingFiles = fopen( "\\missing.txt", "ab" ); + missingFiles = Sys_FOpen( "\\missing.txt", "ab" ); } #endif Com_Printf( "%d files in pk3 files\n", fs_packFiles ); diff --git a/code/qcommon/qcommon.h b/code/qcommon/qcommon.h index ad7e900a..195e4986 100644 --- a/code/qcommon/qcommon.h +++ b/code/qcommon/qcommon.h @@ -1107,6 +1107,7 @@ qboolean Sys_StringToAdr( const char *s, netadr_t *a, netadrtype_t family ); qboolean Sys_IsLANAddress (netadr_t adr); void Sys_ShowIP(void); +FILE *Sys_FOpen( const char *ospath, const char *mode ); qboolean Sys_Mkdir( const char *path ); FILE *Sys_Mkfifo( const char *ospath ); char *Sys_Cwd( void ); diff --git a/code/sys/sys_unix.c b/code/sys/sys_unix.c index 508383dd..7dfcd563 100644 --- a/code/sys/sys_unix.c +++ b/code/sys/sys_unix.c @@ -192,6 +192,21 @@ const char *Sys_Dirname( char *path ) return dirname( path ); } +/* +============== +Sys_FOpen +============== +*/ +FILE *Sys_FOpen( const char *ospath, const char *mode ) { + struct stat buf; + + // check if path exists and is a directory + if ( !stat( ospath, &buf ) && S_ISDIR( buf.st_mode ) ) + return NULL; + + return fopen( ospath, mode ); +} + /* ================== Sys_Mkdir diff --git a/code/sys/sys_win32.c b/code/sys/sys_win32.c index 47b2dae1..bbb8ead0 100644 --- a/code/sys/sys_win32.c +++ b/code/sys/sys_win32.c @@ -283,6 +283,15 @@ const char *Sys_Dirname( char *path ) return dir; } +/* +============== +Sys_FOpen +============== +*/ +FILE *Sys_FOpen( const char *ospath, const char *mode ) { + return fopen( ospath, mode ); +} + /* ============== Sys_Mkdir