From ec52467188b876c4f21f2528d99730827a27b76e Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 25 Sep 2005 23:57:38 +0000 Subject: [PATCH] fixed warnings about truncating 64 bit integers git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35710 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/imagtiff.cpp | 55 +++++++++++----- src/generic/filedlgg.cpp | 137 +++++++++++++++++++++++---------------- 2 files changed, 117 insertions(+), 75 deletions(-) diff --git a/src/common/imagtiff.cpp b/src/common/imagtiff.cpp index b03666fa16..d824f32073 100644 --- a/src/common/imagtiff.cpp +++ b/src/common/imagtiff.cpp @@ -45,6 +45,39 @@ IMPLEMENT_DYNAMIC_CLASS(wxTIFFHandler,wxImageHandler) #if wxUSE_STREAMS +// helper to translate our, possibly 64 bit, wxFileOffset to TIFF, always 32 +// bit, toff_t +static toff_t wxFileOffsetToTIFF(wxFileOffset ofs) +{ + if ( ofs == wxInvalidOffset ) + return (toff_t)-1; + + toff_t tofs = wx_truncate_cast(toff_t, ofs); + wxCHECK_MSG( tofs == ofs, (toff_t)-1, + _T("TIFF library doesn't support large files") ); + + return tofs; +} + +// another helper to convert standard seek mode to our +static wxSeekMode wxSeekModeFromTIFF(int whence) +{ + switch ( whence ) + { + case SEEK_SET: + return wxFromStart; + + case SEEK_CUR: + return wxFromCurrent; + + case SEEK_END: + return wxFromEnd; + + default: + return wxFromCurrent; + } +} + extern "C" { @@ -76,32 +109,18 @@ toff_t TIFFLINKAGEMODE _tiffSeekIProc(thandle_t handle, toff_t off, int whence) { wxInputStream *stream = (wxInputStream*) handle; - wxSeekMode mode; - switch (whence) - { - case SEEK_SET: mode = wxFromStart; break; - case SEEK_CUR: mode = wxFromCurrent; break; - case SEEK_END: mode = wxFromEnd; break; - default: mode = wxFromCurrent; break; - } - return (toff_t)stream->SeekI( (wxFileOffset)off, mode ); + return wxFileOffsetToTIFF(stream->SeekI((wxFileOffset)off, + wxSeekModeFromTIFF(whence))); } toff_t TIFFLINKAGEMODE _tiffSeekOProc(thandle_t handle, toff_t off, int whence) { wxOutputStream *stream = (wxOutputStream*) handle; - wxSeekMode mode; - switch (whence) - { - case SEEK_SET: mode = wxFromStart; break; - case SEEK_CUR: mode = wxFromCurrent; break; - case SEEK_END: mode = wxFromEnd; break; - default: mode = wxFromCurrent; break; - } - return (toff_t)stream->SeekO( (wxFileOffset)off, mode ); + return wxFileOffsetToTIFF(stream->SeekO((wxFileOffset)off, + wxSeekModeFromTIFF(whence))); } int TIFFLINKAGEMODE diff --git a/src/generic/filedlgg.cpp b/src/generic/filedlgg.cpp index 00435882e3..4c4be29a2b 100644 --- a/src/generic/filedlgg.cpp +++ b/src/generic/filedlgg.cpp @@ -30,6 +30,7 @@ #include "wx/stattext.h" #include "wx/debug.h" #include "wx/log.h" +#include "wx/longlong.h" #include "wx/intl.h" #include "wx/msgdlg.h" #include "wx/sizer.h" @@ -79,56 +80,83 @@ // ---------------------------------------------------------------------------- static -int wxCALLBACK wxFileDataNameCompare( long data1, long data2, long data) +int wxCALLBACK wxFileDataNameCompare( long data1, long data2, long sortOrder) { - wxFileData *fd1 = (wxFileData*)data1; - wxFileData *fd2 = (wxFileData*)data2; - if (fd1->GetFileName() == wxT("..")) return -data; - if (fd2->GetFileName() == wxT("..")) return data; - if (fd1->IsDir() && !fd2->IsDir()) return -data; - if (fd2->IsDir() && !fd1->IsDir()) return data; - return data*wxStrcmp( fd1->GetFileName(), fd2->GetFileName() ); + wxFileData *fd1 = (wxFileData *)wxUIntToPtr(data1); + wxFileData *fd2 = (wxFileData *)wxUIntToPtr(data2); + + if (fd1->GetFileName() == wxT("..")) + return -sortOrder; + if (fd2->GetFileName() == wxT("..")) + return sortOrder; + if (fd1->IsDir() && !fd2->IsDir()) + return -sortOrder; + if (fd2->IsDir() && !fd1->IsDir()) + return sortOrder; + + return sortOrder*wxStrcmp( fd1->GetFileName(), fd2->GetFileName() ); } static -int wxCALLBACK wxFileDataSizeCompare( long data1, long data2, long data) +int wxCALLBACK wxFileDataSizeCompare(long data1, long data2, long sortOrder) { - wxFileData *fd1 = (wxFileData*)data1; - wxFileData *fd2 = (wxFileData*)data2; - if (fd1->GetFileName() == wxT("..")) return -data; - if (fd2->GetFileName() == wxT("..")) return data; - if (fd1->IsDir() && !fd2->IsDir()) return -data; - if (fd2->IsDir() && !fd1->IsDir()) return data; - if (fd1->IsLink() && !fd2->IsLink()) return -data; - if (fd2->IsLink() && !fd1->IsLink()) return data; - return data*(fd1->GetSize() - fd2->GetSize()); + wxFileData *fd1 = (wxFileData *)wxUIntToPtr(data1); + wxFileData *fd2 = (wxFileData *)wxUIntToPtr(data2); + + if (fd1->GetFileName() == wxT("..")) + return -sortOrder; + if (fd2->GetFileName() == wxT("..")) + return sortOrder; + if (fd1->IsDir() && !fd2->IsDir()) + return -sortOrder; + if (fd2->IsDir() && !fd1->IsDir()) + return sortOrder; + if (fd1->IsLink() && !fd2->IsLink()) + return -sortOrder; + if (fd2->IsLink() && !fd1->IsLink()) + return sortOrder; + + return fd1->GetSize() > fd2->GetSize() ? sortOrder : -sortOrder; } static -int wxCALLBACK wxFileDataTypeCompare( long data1, long data2, long data) +int wxCALLBACK wxFileDataTypeCompare(long data1, long data2, long sortOrder) { - wxFileData *fd1 = (wxFileData*)data1; - wxFileData *fd2 = (wxFileData*)data2; - if (fd1->GetFileName() == wxT("..")) return -data; - if (fd2->GetFileName() == wxT("..")) return data; - if (fd1->IsDir() && !fd2->IsDir()) return -data; - if (fd2->IsDir() && !fd1->IsDir()) return data; - if (fd1->IsLink() && !fd2->IsLink()) return -data; - if (fd2->IsLink() && !fd1->IsLink()) return data; - return data*wxStrcmp( fd1->GetFileType(), fd2->GetFileType() ); + wxFileData *fd1 = (wxFileData *)wxUIntToPtr(data1); + wxFileData *fd2 = (wxFileData *)wxUIntToPtr(data2); + + if (fd1->GetFileName() == wxT("..")) + return -sortOrder; + if (fd2->GetFileName() == wxT("..")) + return sortOrder; + if (fd1->IsDir() && !fd2->IsDir()) + return -sortOrder; + if (fd2->IsDir() && !fd1->IsDir()) + return sortOrder; + if (fd1->IsLink() && !fd2->IsLink()) + return -sortOrder; + if (fd2->IsLink() && !fd1->IsLink()) + return sortOrder; + + return sortOrder*wxStrcmp( fd1->GetFileType(), fd2->GetFileType() ); } static -int wxCALLBACK wxFileDataTimeCompare( long data1, long data2, long data) +int wxCALLBACK wxFileDataTimeCompare(long data1, long data2, long sortOrder) { - wxFileData *fd1 = (wxFileData*)data1; - wxFileData *fd2 = (wxFileData*)data2; - if (fd1->GetFileName() == wxT("..")) return -data; - if (fd2->GetFileName() == wxT("..")) return data; - if (fd1->IsDir() && !fd2->IsDir()) return -data; - if (fd2->IsDir() && !fd1->IsDir()) return data; + wxFileData *fd1 = (wxFileData *)wxUIntToPtr(data1); + wxFileData *fd2 = (wxFileData *)wxUIntToPtr(data2); - return fd1->GetDateTime().IsLaterThan(fd2->GetDateTime()) ? int(data) : -int(data); + if (fd1->GetFileName() == wxT("..")) + return -sortOrder; + if (fd2->GetFileName() == wxT("..")) + return sortOrder; + if (fd1->IsDir() && !fd2->IsDir()) + return -sortOrder; + if (fd2->IsDir() && !fd1->IsDir()) + return sortOrder; + + return fd1->GetDateTime().IsLaterThan(fd2->GetDateTime()) ? sortOrder : -sortOrder; } #if defined(__DOS__) || defined(__WINDOWS__) || defined (__OS2__) @@ -221,7 +249,7 @@ void wxFileData::ReadData() } } - m_size = (long)buff.st_size; + m_size = buff.st_size; m_dateTime = buff.st_mtime; @@ -281,7 +309,8 @@ wxString wxFileData::GetHint() const else if (IsDrive()) s += _(""); else // plain file - s += wxString::Format( _("%ld bytes"), m_size ); + s += wxString::Format(_("%ld bytes"), + wxLongLong(m_size).ToString().c_str()); s += wxT(' '); @@ -306,7 +335,7 @@ wxString wxFileData::GetEntry( fileListFieldType num ) const case FileList_Size: if (!IsDir() && !IsLink() && !IsDrive()) - s.Printf(_T("%ld"), m_size); + s = wxLongLong(m_size).ToString(); break; case FileList_Type: @@ -792,35 +821,29 @@ void wxFileCtrl::OnListColClick( wxListEvent &event ) SortItems(m_sort_field, m_sort_foward); } -void wxFileCtrl::SortItems(wxFileData::fileListFieldType field, bool foward) +void wxFileCtrl::SortItems(wxFileData::fileListFieldType field, bool forward) { m_sort_field = field; - m_sort_foward = foward; - long sort_dir = foward ? 1 : -1; + m_sort_foward = forward; + const long sort_dir = forward ? 1 : -1; switch (m_sort_field) { case wxFileData::FileList_Name : - { - wxListCtrl::SortItems((wxListCtrlCompare)wxFileDataNameCompare, sort_dir); + wxListCtrl::SortItems(wxFileDataNameCompare, sort_dir); break; - } + case wxFileData::FileList_Size : - { - wxListCtrl::SortItems((wxListCtrlCompare)wxFileDataSizeCompare, sort_dir); + wxListCtrl::SortItems(wxFileDataSizeCompare, sort_dir); break; - } + case wxFileData::FileList_Type : - { - wxListCtrl::SortItems((wxListCtrlCompare)wxFileDataTypeCompare, sort_dir); - break; - } + wxListCtrl::SortItems(wxFileDataTypeCompare, sort_dir); + break; + case wxFileData::FileList_Time : - { - wxListCtrl::SortItems((wxListCtrlCompare)wxFileDataTimeCompare, sort_dir); - break; - } - default : break; + wxListCtrl::SortItems(wxFileDataTimeCompare, sort_dir); + break; } }