changeset 6054:2822a4a9c4f7 draft

(svn r8784) -Regression (r7274 most likely): Unable to load TTDP (on *NIX) games because the static buffer used for name conversion is overwritten in the callback function.
author Darkvater <Darkvater@openttd.org>
date Sat, 17 Feb 2007 16:41:56 +0000
parents 440f803862fb
children 2a2f9602c282
files src/fios.cpp
diffstat 1 files changed, 4 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/fios.cpp
+++ b/src/fios.cpp
@@ -212,6 +212,7 @@
 	DIR *dir;
 	FiosItem *fios;
 	int sort_start;
+	char d_name[sizeof(fios->name)];
 
 	/* A parent directory link exists if we are not in the root directory */
 	if (!FiosIsRoot(_fios_path) && mode != SLD_NEW_GAME) {
@@ -225,7 +226,7 @@
 	/* Show subdirectories */
 	if (mode != SLD_NEW_GAME && (dir = opendir(_fios_path)) != NULL) {
 		while ((dirent = readdir(dir)) != NULL) {
-			const char *d_name = FS2OTTD(dirent->d_name);
+			ttd_strlcpy(d_name, FS2OTTD(dirent->d_name), sizeof(d_name));
 
 			/* found file must be directory, but not '.' or '..' */
 			if (FiosIsValidFile(_fios_path, dirent, &sb) && (sb.st_mode & S_IFDIR) &&
@@ -258,8 +259,7 @@
 		while ((dirent = readdir(dir)) != NULL) {
 			char fios_title[64];
 			char *t;
-			char *d_name = (char*)FS2OTTD(dirent->d_name);
-			byte type;
+			ttd_strlcpy(d_name, FS2OTTD(dirent->d_name), sizeof(d_name));
 
 			if (!FiosIsValidFile(_fios_path, dirent, &sb) || !(sb.st_mode & S_IFREG)) continue;
 
@@ -267,7 +267,7 @@
 			if ((t = strrchr(d_name, '.')) == NULL) continue;
 			fios_title[0] = '\0'; // reset the title;
 
-			type = callback_proc(mode, d_name, t, fios_title);
+			byte type = callback_proc(mode, d_name, t, fios_title);
 			if (type != FIOS_TYPE_INVALID) {
 				fios = FiosAlloc();
 				fios->mtime = sb.st_mtime;