diff --git a/os2.c b/os2.c index 064dac66bd..2764c3454e 100644 --- a/os2.c +++ b/os2.c @@ -392,10 +392,19 @@ StringID FiosGetDescText(const char **path) void FiosMakeSavegameName(char *buf, const char *name) { + const char* extension; + const char* period; + if (_game_mode == GM_EDITOR) - sprintf(buf, "%s\\%s.scn", _fios_path, name); + extension = ".scn"; else - sprintf(buf, "%s\\%s.sav", _fios_path, name); + extension = ".sav"; + + // Don't append the extension, if it is already there + period = strrchr(name, '.'); + if (period != NULL && strcasecmp(period, extension) == 0) extension = ""; + + sprintf(buf, "%s\\%s%s", _fios_path, name, extension); } void FiosDelete(const char *name) diff --git a/unix.c b/unix.c index 529c57d9e6..d24255b8ba 100644 --- a/unix.c +++ b/unix.c @@ -324,10 +324,19 @@ StringID FiosGetDescText(const char **path) void FiosMakeSavegameName(char *buf, const char *name) { + const char* extension; + const char* period; + if (_game_mode == GM_EDITOR) - sprintf(buf, "%s/%s.scn", _fios_path, name); + extension = ".scn"; else - sprintf(buf, "%s/%s.sav", _fios_path, name); + extension = ".sav"; + + // Don't append the extension, if it is already there + period = strrchr(name, '.'); + if (period != NULL && strcasecmp(period, extension) == 0) extension = ""; + + sprintf(buf, "%s/%s%s", _fios_path, name, extension); } void FiosDelete(const char *name) diff --git a/win32.c b/win32.c index 8f1e124d3c..7003e7aeff 100644 --- a/win32.c +++ b/win32.c @@ -1848,10 +1848,19 @@ StringID FiosGetDescText(const char **path) void FiosMakeSavegameName(char *buf, const char *name) { + const char* extension; + const char* period; + if (_game_mode == GM_EDITOR) - sprintf(buf, "%s\\%s.scn", _fios_path, name); + extension = ".scn"; else - sprintf(buf, "%s\\%s.sav", _fios_path, name); + extension = ".sav"; + + // Don't append the extension, if it is already there + period = strrchr(name, '.'); + if (period != NULL && strcasecmp(period, extension) == 0) extension = ""; + + sprintf(buf, "%s\\%s%s", _fios_path, name, extension); } void FiosDelete(const char *name)