Make fgets always return the null string on error.
authorblack <black@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 28 Jan 2008 01:02:56 +0000 (01:02 +0000)
committerblack <black@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 28 Jan 2008 01:02:56 +0000 (01:02 +0000)
Add code to FS_Open to fix bad paths (replaces \ with /). The code is nasty and #ifdefed out - #define FS_FIX_PATHS to use it.

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@8028 d7cf8633-e32d-0410-b094-e92efae38249

fs.c
prvm_cmds.c

diff --git a/fs.c b/fs.c
index 8fd5d61..8571aed 100644 (file)
--- a/fs.c
+++ b/fs.c
@@ -1819,6 +1819,19 @@ Open a file. The syntax is the same as fopen
 */
 qfile_t* FS_Open (const char* filepath, const char* mode, qboolean quiet, qboolean nonblocking)
 {
+#ifdef FS_FIX_PATHS
+       char fixedFileName[MAX_QPATH];
+       char *d = fixedFileName;
+       // try to fix common mistakes (\ instead of /)
+       for( ; *filepath ; filepath++, d++ )
+               if( *filepath != '\\' )
+                       *d = *filepath;
+               else
+                       *d = '/';
+       *d = '\0';
+       filepath = fixedFileName;
+#endif
+
        if (FS_CheckNastyPath(filepath, false))
        {
                Con_Printf("FS_Open(\"%s\", \"%s\", %s): nasty filename rejected\n", filepath, mode, quiet ? "true" : "false");
index bfa74e5..236ffc4 100644 (file)
@@ -1596,6 +1596,9 @@ void VM_fgets(void)
 
        VM_SAFEPARMCOUNT(1,VM_fgets);
 
+       // set the return value regardless of any possible errors
+       PRVM_G_INT(OFS_RETURN) = OFS_NULL;
+
        filenum = (int)PRVM_G_FLOAT(OFS_PARM0);
        if (filenum < 0 || filenum >= PRVM_MAX_OPENFILES)
        {
@@ -1628,8 +1631,6 @@ void VM_fgets(void)
                Con_Printf("fgets: %s: %s\n", PRVM_NAME, string);
        if (c >= 0 || end)
                PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(string);
-       else
-               PRVM_G_INT(OFS_RETURN) = OFS_NULL;
 }
 
 /*