summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarkvater <darkvater@openttd.org>2007-02-17 16:41:56 +0000
committerDarkvater <darkvater@openttd.org>2007-02-17 16:41:56 +0000
commit1aab4a368bbdc7678f18058d305290f7f8814387 (patch)
tree22fe51ee61d92870cae04b51042ef3d669ee2bbe
parentf731d7ffc410e5075ebf16d1129f4318d151f89a (diff)
downloadopenttd-1aab4a368bbdc7678f18058d305290f7f8814387.tar.xz
(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.
-rw-r--r--src/fios.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/fios.cpp b/src/fios.cpp
index 7c736331d..615570742 100644
--- a/src/fios.cpp
+++ b/src/fios.cpp
@@ -212,6 +212,7 @@ static FiosItem *FiosGetFileList(int mode, fios_getlist_callback_proc *callback_
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 @@ static FiosItem *FiosGetFileList(int mode, fios_getlist_callback_proc *callback_
/* 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 @@ static FiosItem *FiosGetFileList(int mode, fios_getlist_callback_proc *callback_
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 @@ static FiosItem *FiosGetFileList(int mode, fios_getlist_callback_proc *callback_
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;