added wx_truncate_cast and use it (sometimes instead of wx_static_cast) to explicitely show int truncation

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35539 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-09-17 21:03:45 +00:00
parent 17d8a88795
commit c781c31638
4 changed files with 18 additions and 5 deletions

View File

@@ -292,6 +292,13 @@ typedef int wxWindowID;
#define wx_reinterpret_cast(t, x) ((t)(x)) #define wx_reinterpret_cast(t, x) ((t)(x))
#endif #endif
/*
This one is a wx invention: like static cast but used when we intentionally
truncate from a larger to smaller type, static_cast<> can't be used for it
as it results in warnings when using some compilers (SGI mipspro for example)
*/
#define wx_truncate_cast(t, x) ((t)(x))
/* for consistency with wxStatic/DynamicCast defined in wx/object.h */ /* for consistency with wxStatic/DynamicCast defined in wx/object.h */
#define wxConstCast(obj, className) wx_const_cast(className *, obj) #define wxConstCast(obj, className) wx_const_cast(className *, obj)

View File

@@ -316,10 +316,11 @@ bool wxRegExImpl::GetMatch(size_t *start, size_t *len, size_t index) const
const regmatch_t& match = m_Matches[index]; const regmatch_t& match = m_Matches[index];
// we need the casts because rm_so can be a 64 bit quantity
if ( start ) if ( start )
*start = match.rm_so; *start = wx_truncate_cast(size_t, match.rm_so);
if ( len ) if ( len )
*len = match.rm_eo - match.rm_so; *len = wx_truncate_cast(size_t, match.rm_eo - match.rm_so);
return true; return true;
} }

View File

@@ -93,10 +93,11 @@ wxFileOffset wxStringInputStream::OnSysSeek(wxFileOffset ofs, wxSeekMode mode)
return wxInvalidOffset; return wxInvalidOffset;
} }
if ( ofs < 0 || wx_static_cast(size_t, ofs) > m_len ) if ( ofs < 0 || ofs > wx_static_cast(wxFileOffset, m_len) )
return wxInvalidOffset; return wxInvalidOffset;
m_pos = wx_static_cast(size_t, ofs); // FIXME: this can't be right
m_pos = wx_truncate_cast(size_t, ofs);
return ofs; return ofs;
} }

View File

@@ -465,7 +465,11 @@ bool wxSound::Create(const wxString& fileName, bool isResource)
return false; return false;
} }
wxFileOffset len = fileWave.Length(); wxFileOffset lenOrig = fileWave.Length();
if ( lenOrig == wxInvalidOffset )
return false;
size_t len = wx_truncate_cast(size_t, lenOrig);
wxUint8 *data = new wxUint8[len]; wxUint8 *data = new wxUint8[len];
if (fileWave.Read(data, len) != len) if (fileWave.Read(data, len) != len)
{ {