diff options
author | rubidium <rubidium@openttd.org> | 2013-11-23 13:17:45 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2013-11-23 13:17:45 +0000 |
commit | 78a316d349f02c76b89c6fd7597e7013c062133a (patch) | |
tree | f9ed8c8d687f7081d6de04c70a82060d4ed2f040 | |
parent | 29ef70c246293ebde72f36e0a01483eeac6f7fdf (diff) | |
download | openttd-78a316d349f02c76b89c6fd7597e7013c062133a.tar.xz |
(svn r26061) -Fix: negative result of ftell wasn't handled correctly in some cases
-rw-r--r-- | src/fileio.cpp | 5 | ||||
-rw-r--r-- | src/newgrf_config.cpp | 4 | ||||
-rw-r--r-- | src/smallmap_gui.cpp | 4 |
3 files changed, 8 insertions, 5 deletions
diff --git a/src/fileio.cpp b/src/fileio.cpp index e17eaf654..851090c07 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -254,7 +254,8 @@ void FioOpenFile(int slot, const char *filename, Subdirectory subdir) #endif /* LIMITED_FDS */ f = FioFOpenFile(filename, "rb", subdir); if (f == NULL) usererror("Cannot open file '%s'", filename); - uint32 pos = ftell(f); + long pos = ftell(f); + if (pos < 0) usererror("Cannot read file '%s'", filename); FioCloseFile(slot); // if file was opened before, close it _fio.handles[slot] = f; @@ -271,7 +272,7 @@ void FioOpenFile(int slot, const char *filename, Subdirectory subdir) _fio.usage_count[slot] = 0; _fio.open_handles++; #endif /* LIMITED_FDS */ - FioSeekToFile(slot, pos); + FioSeekToFile(slot, (uint32)pos); } static const char * const _subdirs[] = { diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index bbd670a71..df8685030 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -360,10 +360,10 @@ static bool CalcGRFMD5Sum(GRFConfig *config, Subdirectory subdir) f = FioFOpenFile(config->filename, "rb", subdir, &size); if (f == NULL) return false; - size_t start = ftell(f); + long start = ftell(f); size = min(size, GRFGetSizeOfDataSection(f)); - if (fseek(f, start, SEEK_SET) < 0) { + if (start < 0 || fseek(f, start, SEEK_SET) < 0) { FioFCloseFile(f); return false; } diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 8e53ade6f..85a123626 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -1418,10 +1418,12 @@ int SmallMapWindow::GetPositionOnLegend(Point pt) case WID_SM_LEGEND: // Legend if (this->map_type == SMT_INDUSTRY || this->map_type == SMT_LINKSTATS || this->map_type == SMT_OWNER) { int click_pos = this->GetPositionOnLegend(pt); + if (click_pos < 0) break; + /* If industry type small map*/ if (this->map_type == SMT_INDUSTRY) { /* If click on industries label, find right industry type and enable/disable it. */ - if (click_pos >= 0 && click_pos < _smallmap_industry_count) { + if (click_pos < _smallmap_industry_count) { this->SelectLegendItem(click_pos, _legend_from_industries, _smallmap_industry_count); } } else if (this->map_type == SMT_LINKSTATS) { |