summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-06-12 15:46:34 +0000
committerrubidium <rubidium@openttd.org>2007-06-12 15:46:34 +0000
commit73790d9cd6de5b704f006b20b7fd5e150368fd55 (patch)
tree807df3145b0384aac9a4c04c5103b8164bf210cd
parent4df44a4dffbe6d537bbea91ce99cc30ba131606a (diff)
downloadopenttd-73790d9cd6de5b704f006b20b7fd5e150368fd55.tar.xz
(svn r10116) -Fix [FS#850]: remove invalid characters (for the file system) from savegame names. Based on a patch by TheJosh.
-rw-r--r--src/fileio.cpp17
-rw-r--r--src/fileio.h1
-rw-r--r--src/misc_gui.cpp2
-rw-r--r--src/screenshot.cpp2
4 files changed, 22 insertions, 0 deletions
diff --git a/src/fileio.cpp b/src/fileio.cpp
index ba3abb21a..171f6bfcd 100644
--- a/src/fileio.cpp
+++ b/src/fileio.cpp
@@ -394,3 +394,20 @@ void DeterminePaths(const char *exe)
FioCreateDirectory(_paths.scenario_dir);
FioCreateDirectory(_paths.heightmap_dir);
}
+
+/**
+ * Sanitizes a filename, i.e. removes all illegal characters from it.
+ * @param filename the "\0" terminated filename
+ */
+void SanitizeFilename(char *filename)
+{
+ for (; *filename != '\0'; filename++) {
+ switch (*filename) {
+ /* The following characters are not allowed in filenames
+ * on at least one of the supported operating systems: */
+ case ':': case '\\': case '*': case '?': case '/':
+ *filename = '_';
+ break;
+ }
+ }
+}
diff --git a/src/fileio.h b/src/fileio.h
index c3db610d7..7835a5c8a 100644
--- a/src/fileio.h
+++ b/src/fileio.h
@@ -20,6 +20,7 @@ FILE *FioFOpenFile(const char *filename);
bool FioCheckFileExists(const char *filename);
void FioCreateDirectory(const char *filename);
+void SanitizeFilename(char *filename);
void AppendPathSeparator(char *buf, size_t buflen);
void DeterminePaths(const char *exe);
diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp
index 92c7ac9ce..276542cf9 100644
--- a/src/misc_gui.cpp
+++ b/src/misc_gui.cpp
@@ -35,6 +35,7 @@
#include "date.h"
#include "cargotype.h"
#include "player_face.h"
+#include "fileio.h"
#include "fios.h"
/* Variables to display file lists */
@@ -1396,6 +1397,7 @@ static void GenerateFileName()
SetDParam(1, p->name_2);
SetDParam(2, _date);
GetString(_edit_str_buf, STR_4004, lastof(_edit_str_buf));
+ SanitizeFilename(_edit_str_buf);
}
extern void StartupEngines();
diff --git a/src/screenshot.cpp b/src/screenshot.cpp
index 5948f29d3..738f28a68 100644
--- a/src/screenshot.cpp
+++ b/src/screenshot.cpp
@@ -14,6 +14,7 @@
#include "variables.h"
#include "date.h"
#include "helpers.hpp"
+#include "fileio.h"
char _screenshot_format_name[8];
uint _num_screenshot_formats;
@@ -505,6 +506,7 @@ static char *MakeScreenshotName(const char *ext)
GetString(_screenshot_name, STR_4004, lastof(_screenshot_name));
}
+ SanitizeFilename(_screenshot_name);
base = strchr(_screenshot_name, 0);
base[0] = '.'; strcpy(base + 1, ext);