diff options
author | rubidium <rubidium@openttd.org> | 2007-05-30 18:24:54 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-05-30 18:24:54 +0000 |
commit | b17a89c53d13c95375be9e5f37d40585dd13a1fa (patch) | |
tree | d76a78317ffb96c698f89d9e5f89a731714c31b7 | |
parent | 2bfc36c1ba22d186bfc013a06e3fd1cc9cfcd852 (diff) | |
download | openttd-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.cpp | 8 | ||||
-rw-r--r-- | src/fios.cpp | 15 | ||||
-rw-r--r-- | src/unix.cpp | 5 |
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; } |