Index: src/ch/StatusDlg.cpp =================================================================== diff -u -N -ref313208b7c4a113907f2f72ee0b73406081501d -r1fa2eb7e39e2f8d84868d421fe1c4f0afc58d353 --- src/ch/StatusDlg.cpp (.../StatusDlg.cpp) (revision ef313208b7c4a113907f2f72ee0b73406081501d) +++ src/ch/StatusDlg.cpp (.../StatusDlg.cpp) (revision 1fa2eb7e39e2f8d84868d421fe1c4f0afc58d353) @@ -286,7 +286,7 @@ // transfer if (m_i64LastProcessed == 0) // if first time - show average - m_strTemp=GetSizeString( td.m_lTimeElapsed ? td.m_ullProcessedSize/td.m_lTimeElapsed : 0, m_szData, _MAX_PATH); // last avg + m_strTemp=GetSizeString( td.m_timeElapsed ? td.m_ullProcessedSize/td.m_timeElapsed : 0, m_szData, _MAX_PATH); // last avg else if ( (dwCurrentTime-m_dwLastUpdate) != 0) m_strTemp=GetSizeString( (static_cast(td.m_ullProcessedSize) - static_cast(m_i64LastProcessed))/(static_cast(dwCurrentTime-m_dwLastUpdate)/1000.0), m_szData, _MAX_PATH); @@ -295,14 +295,14 @@ // avg transfer GetDlgItem(IDC_TRANSFER_STATIC)->SetWindowText(m_strTemp+_T("/s (")+CString(GetResManager().LoadString(IDS_AVERAGEWORD_STRING)) - +CString(GetSizeString(td.m_lTimeElapsed ? td.m_ullProcessedSize/td.m_lTimeElapsed : 0, m_szData, _MAX_PATH))+_T("/s )") + +CString(GetSizeString(td.m_timeElapsed ? td.m_ullProcessedSize/td.m_timeElapsed : 0, m_szData, _MAX_PATH))+_T("/s )") ); // elapsed time / estimated total time (estimated time left) - FormatTime(td.m_lTimeElapsed, m_szTimeBuffer1, 40); - long lTotalTime = (td.m_ullProcessedSize == 0) ? 0 : (long)(td.m_ullSizeAll * td.m_lTimeElapsed / td.m_ullProcessedSize); - FormatTime(lTotalTime, m_szTimeBuffer2, 40); - FormatTime(std::max(0l, lTotalTime - td.m_lTimeElapsed), m_szTimeBuffer3, 40); + FormatTime(td.m_timeElapsed, m_szTimeBuffer1, 40); + time_t timeTotal = (td.m_ullProcessedSize == 0) ? 0 : (long)(td.m_ullSizeAll * td.m_timeElapsed / td.m_ullProcessedSize); + FormatTime(timeTotal, m_szTimeBuffer2, 40); + FormatTime(std::max((time_t)0l, timeTotal - td.m_timeElapsed), m_szTimeBuffer3, 40); _sntprintf(m_szData, _MAX_PATH, _T("%s / %s (%s)"), m_szTimeBuffer1, m_szTimeBuffer2, m_szTimeBuffer3); GetDlgItem(IDC_TIME_STATIC)->SetWindowText(m_szData); @@ -664,22 +664,24 @@ return 0; } -LPTSTR CStatusDlg::FormatTime(long lSeconds, LPTSTR lpszBuffer, size_t stMaxBufferSize) +LPTSTR CStatusDlg::FormatTime(time_t timeSeconds, LPTSTR lpszBuffer, size_t stMaxBufferSize) { - long lDays=lSeconds/86400; - lSeconds%=86400; - long lHours=lSeconds/3600; - lSeconds%=3600; - long lMinutes=lSeconds/60; - lSeconds%=60; + long lDays = boost::numeric_cast(timeSeconds/86400); + timeSeconds %= 86400; + long lHours = boost::numeric_cast(timeSeconds/3600); + timeSeconds %= 3600; + long lMinutes = boost::numeric_cast(timeSeconds/60); + timeSeconds %= 60; - if (lDays != 0) - _sntprintf(lpszBuffer, stMaxBufferSize, _T("%02d:%02d:%02d:%02d"), lDays, lHours, lMinutes, lSeconds); + if(lDays != 0) + _sntprintf(lpszBuffer, stMaxBufferSize, _T("%02d:%02d:%02d:%02d"), lDays, lHours, lMinutes, timeSeconds); else + { if (lHours != 0) - _sntprintf(lpszBuffer, stMaxBufferSize, _T("%02d:%02d:%02d"), lHours, lMinutes, lSeconds); + _sntprintf(lpszBuffer, stMaxBufferSize, _T("%02d:%02d:%02d"), lHours, lMinutes, timeSeconds); else - _sntprintf(lpszBuffer, stMaxBufferSize, _T("%02d:%02d"), lMinutes, lSeconds); + _sntprintf(lpszBuffer, stMaxBufferSize, _T("%02d:%02d"), lMinutes, timeSeconds); + } return lpszBuffer; }