(svn r10116) -Fix [FS#850]: remove invalid characters (for the file system) from savegame names. Based on a patch by TheJosh.

This commit is contained in:
rubidium 2007-06-12 15:46:34 +00:00
parent 443db4bb2e
commit 60d738f23a
4 changed files with 22 additions and 0 deletions

View File

@ -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;
}
}
}

View File

@ -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);

View File

@ -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();

View File

@ -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);