@@ -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;
@@ -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);
@@ -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();
@@ -14,6 +14,7 @@
#include "variables.h"
#include "helpers.hpp"
char _screenshot_format_name[8];
uint _num_screenshot_formats;
@@ -505,6 +506,7 @@ static char *MakeScreenshotName(const ch
GetString(_screenshot_name, STR_4004, lastof(_screenshot_name));
SanitizeFilename(_screenshot_name);
base = strchr(_screenshot_name, 0);
base[0] = '.'; strcpy(base + 1, ext);
Status change: