]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
get rid of FS_DefaultExtension, add FS_SetExtension which may set if missing, or...
authorRudolf Polzer <divverent@xonotic.org>
Wed, 1 Aug 2012 07:47:43 +0000 (09:47 +0200)
committerRudolf Polzer <divverent@xonotic.org>
Wed, 1 Aug 2012 07:49:26 +0000 (09:49 +0200)
cl_demo.c
fs.c
fs.h
host_cmd.c
sv_demo.c

index 1584cb7bf19e59f462b4390be656e0637a5c7a97..9adb0de5dcc8ae836c9abb68646f3dac41f29d3d 100644 (file)
--- a/cl_demo.c
+++ b/cl_demo.c
@@ -370,7 +370,7 @@ void CL_Record_f (void)
 
        // get the demo name
        strlcpy (name, Cmd_Argv(1), sizeof (name));
-       FS_DefaultExtension (name, ".dem", sizeof (name));
+       FS_SetExtension (name, ".dem", sizeof (name), true);
 
        // start the map up
        if (c > 2)
@@ -417,7 +417,7 @@ void CL_PlayDemo_f (void)
 
        // open the demo file
        strlcpy (name, Cmd_Argv(1), sizeof (name));
-       FS_DefaultExtension (name, ".dem", sizeof (name));
+       FS_SetExtension (name, ".dem", sizeof (name), true);
        f = FS_OpenVirtualFile(name, false);
        if (!f)
        {
diff --git a/fs.c b/fs.c
index e21a58395b99b6c775903f96bdda2ce20e5f8234..927b198aea2be43c82aa0f09c3bd506ee766996e 100644 (file)
--- a/fs.c
+++ b/fs.c
@@ -3266,10 +3266,10 @@ void FS_StripExtension (const char *in, char *out, size_t size_out)
 
 /*
 ==================
-FS_DefaultExtension
+FS_SetExtension
 ==================
 */
-void FS_DefaultExtension (char *path, const char *extension, size_t size_path)
+void FS_SetExtension (char *path, const char *extension, size_t size_path, qboolean forceextension)
 {
        const char *src;
 
@@ -3277,12 +3277,12 @@ void FS_DefaultExtension (char *path, const char *extension, size_t size_path)
        // (extension should include the .)
        src = path + strlen(path) - 1;
 
-       while (*src != '/' && src != path)
-       {
-               if (*src == '.')
-                       return;                 // it has an extension
+       while (*src != '/' && *src != '.' && src != path)
                src--;
-       }
+
+       if (*src == '.')
+               if(!forceextension || !strcasecmp(src, extension))
+                       return;                 // it has an (or the) extension
 
        strlcat (path, extension, size_path);
 }
diff --git a/fs.h b/fs.h
index cd1979a2939bb424550931e285cc1d1c8ed69200..f38ddbaebcb08971583c4c0d330292079e2891f4 100644 (file)
--- a/fs.h
+++ b/fs.h
@@ -118,7 +118,7 @@ qboolean FS_WriteFile (const char *filename, const void *data, fs_offset_t len);
 // ------ Other functions ------ //
 
 void FS_StripExtension (const char *in, char *out, size_t size_out);
-void FS_DefaultExtension (char *path, const char *extension, size_t size_path);
+void FS_SetExtension (char *path, const char *extension, size_t size_path, qboolean forceextension);
 
 #define FS_FILETYPE_NONE 0
 #define FS_FILETYPE_FILE 1
index d25f61e5b2f713496863cfb28d1d234e6917e1a3..1a8112b871e640f0d5b3e910371e146474429a71 100644 (file)
@@ -741,7 +741,7 @@ static void Host_Savegame_f (void)
        }
 
        strlcpy (name, Cmd_Argv(1), sizeof (name));
-       FS_DefaultExtension (name, ".sav", sizeof (name));
+       FS_SetExtension (name, ".sav", sizeof (name), true);
 
        Host_Savegame_to(prog, name);
 }
@@ -778,7 +778,7 @@ static void Host_Loadgame_f (void)
        }
 
        strlcpy (filename, Cmd_Argv(1), sizeof(filename));
-       FS_DefaultExtension (filename, ".sav", sizeof (filename));
+       FS_SetExtension (filename, ".sav", sizeof (filename), true);
 
        Con_Printf("Loading game from %s...\n", filename);
 
index cc94a2c05aa5d1e6d41b04031651060d41bdc77e..63d919a48060f295d50e78ffe4ab74d2a7f5358b 100644 (file)
--- a/sv_demo.c
+++ b/sv_demo.c
@@ -12,7 +12,7 @@ void SV_StartDemoRecording(client_t *client, const char *filename, int forcetrac
                return; // we already have a demo
 
        strlcpy(name, filename, sizeof(name));
-       FS_DefaultExtension(name, ".dem", sizeof(name));
+       FS_SetExtension(name, ".dem", sizeof(name), true);
 
        Con_Printf("Recording demo for # %d (%s) to %s\n", PRVM_NUM_FOR_EDICT(client->edict), client->netaddress, name);