summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-05-30 18:24:54 +0000
committerrubidium <rubidium@openttd.org>2007-05-30 18:24:54 +0000
commitb17a89c53d13c95375be9e5f37d40585dd13a1fa (patch)
treed76a78317ffb96c698f89d9e5f89a731714c31b7
parent2bfc36c1ba22d186bfc013a06e3fd1cc9cfcd852 (diff)
downloadopenttd-b17a89c53d13c95375be9e5f37d40585dd13a1fa.tar.xz
(svn r9990) -Fix: MorphOS and AmigaOS do not like "//" in filenames as that means the same as "/../" in means in Unix.
-rw-r--r--src/fileio.cpp8
-rw-r--r--src/fios.cpp15
-rw-r--r--src/unix.cpp5
3 files changed, 15 insertions, 13 deletions
diff --git a/src/fileio.cpp b/src/fileio.cpp
index 3a5a02322..da64e5b7f 100644
--- a/src/fileio.cpp
+++ b/src/fileio.cpp
@@ -359,10 +359,10 @@ void DeterminePaths(const char *exe)
{
DetermineBasePaths(exe);
- _paths.save_dir = str_fmt("%ssave", _paths.personal_dir);
- _paths.autosave_dir = str_fmt("%s" PATHSEP "autosave", _paths.save_dir);
- _paths.scenario_dir = str_fmt("%sscenario", _paths.personal_dir);
- _paths.heightmap_dir = str_fmt("%s" PATHSEP "heightmap", _paths.scenario_dir);
+ _paths.save_dir = str_fmt("%ssave" PATHSEP, _paths.personal_dir);
+ _paths.autosave_dir = str_fmt("%s" PATHSEP "autosave" PATHSEP, _paths.save_dir);
+ _paths.scenario_dir = str_fmt("%sscenario" PATHSEP, _paths.personal_dir);
+ _paths.heightmap_dir = str_fmt("%s" PATHSEP "heightmap" PATHSEP, _paths.scenario_dir);
_paths.gm_dir = str_fmt("%sgm" PATHSEP, _paths.game_data_dir);
_paths.data_dir = str_fmt("%sdata" PATHSEP, _paths.game_data_dir);
#if defined(CUSTOM_LANG_DIR)
diff --git a/src/fios.cpp b/src/fios.cpp
index 73e2b3ad5..3d475676e 100644
--- a/src/fios.cpp
+++ b/src/fios.cpp
@@ -114,9 +114,10 @@ char *FiosBrowseTo(const FiosItem *item)
case FIOS_TYPE_PARENT:
/* Check for possible NULL ptr (not required for UNIXes, but AmigaOS-alikes) */
- if ((s = strrchr(path, PATHSEPCHAR)) != NULL) {
- s[1] = '\0'; // go up a directory
- if (!FiosIsRoot(path)) s[0] = '\0';
+ if ((s = strrchr(path, PATHSEPCHAR)) != path) {
+ s[0] = '\0'; // Remove last path separator character, so we can go up one level.
+ s = strrchr(path, PATHSEPCHAR);
+ if (s != NULL) s[1] = '\0'; // go up a directory
}
#if defined(__MORPHOS__) || defined(__AMIGAOS__)
/* On MorphOS or AmigaOS paths look like: "Volume:directory/subdirectory" */
@@ -125,14 +126,12 @@ char *FiosBrowseTo(const FiosItem *item)
break;
case FIOS_TYPE_DIR:
- if (!FiosIsRoot(path)) strcat(path, PATHSEP);
strcat(path, item->name);
+ strcat(path, PATHSEP);
break;
case FIOS_TYPE_DIRECT:
- sprintf(path, "%s" PATHSEP, item->name);
- s = strrchr(path, PATHSEPCHAR);
- if (s != NULL && s[1] == '\0') s[0] = '\0'; // strip trailing slash
+ sprintf(path, "%s", item->name);
break;
case FIOS_TYPE_FILE:
@@ -150,7 +149,7 @@ char *FiosBrowseTo(const FiosItem *item)
snprintf(str_buffr, lengthof(str_buffr), "%s:%s", path, item->name);
} else // XXX - only next line!
#endif
- snprintf(str_buffr, lengthof(str_buffr), "%s" PATHSEP "%s", path, item->name);
+ snprintf(str_buffr, lengthof(str_buffr), "%s%s", path, item->name);
return str_buffr;
}
diff --git a/src/unix.cpp b/src/unix.cpp
index 43429778d..9808503dd 100644
--- a/src/unix.cpp
+++ b/src/unix.cpp
@@ -87,8 +87,11 @@ bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb
if (FiosIsRoot(path)) {
snprintf(filename, lengthof(filename), "%s:%s", path, ent->d_name);
} else // XXX - only next line!
+#else
+ assert(path[strlen(path) - 1] == PATHSEPCHAR);
+ if (strlen(path) > 2) assert(path[strlen(path) - 2] != PATHSEPCHAR);
#endif
- snprintf(filename, lengthof(filename), "%s" PATHSEP "%s", path, ent->d_name);
+ snprintf(filename, lengthof(filename), "%s%s", path, ent->d_name);
return stat(filename, sb) == 0;
}