Skip to content

Commit

Permalink
5717 - Gamecode can open file "" for reading
Browse files Browse the repository at this point in the history
  • Loading branch information
zturtleman committed Feb 16, 2013
1 parent 9257327 commit 2e45edb
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 9 deletions.
4 changes: 4 additions & 0 deletions code/null/null_main.c
Expand Up @@ -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) {
}

Expand Down
18 changes: 9 additions & 9 deletions code/qcommon/files.c
Expand Up @@ -600,7 +600,7 @@ qboolean FS_FileInPathExists(const char *testpath)
{
FILE *filep;

filep = fopen(testpath, "rb");
filep = Sys_FOpen(testpath, "rb");

if(filep)
{
Expand Down Expand Up @@ -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 ) );

Expand Down Expand Up @@ -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)
{
Expand All @@ -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;
}

Expand Down Expand Up @@ -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 ) );

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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)
{
Expand Down Expand Up @@ -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)
{
Expand Down Expand Up @@ -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 );
Expand Down
1 change: 1 addition & 0 deletions code/qcommon/qcommon.h
Expand Up @@ -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 );
Expand Down
15 changes: 15 additions & 0 deletions code/sys/sys_unix.c
Expand Up @@ -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
Expand Down
9 changes: 9 additions & 0 deletions code/sys/sys_win32.c
Expand Up @@ -283,6 +283,15 @@ const char *Sys_Dirname( char *path )
return dir;
}

/*
==============
Sys_FOpen
==============
*/

This comment has been minimized.

Copy link
@ensiform

ensiform Oct 27, 2015

Pretty sure you can use the stat check on windows as well.

The latter portion just needs to be (buf.st_mode & _S_IFDIR).

I don't know how reliable it is though considering its just posix code and not full filesytem access on win32.

This comment has been minimized.

Copy link
@zturtleman

zturtleman Oct 28, 2015

Author Member

iirc when I tested this on Windows XP it didn't open directories in fopen so the check wasn't required. I guess it might be a good idea to add it in case Windows adds support for opening directories with fopen in the future.

FILE *Sys_FOpen( const char *ospath, const char *mode ) {
return fopen( ospath, mode );
}

/*
==============
Sys_Mkdir
Expand Down

0 comments on commit 2e45edb

Please sign in to comment.