summaryrefslogtreecommitdiff
path: root/cpp/src/IceUtil/Time.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2012-02-21 16:29:02 +0100
committerBenoit Foucher <benoit@zeroc.com>2012-02-23 11:57:32 +0100
commit7748f03ef59fe0cbb0fac6781c07297a59572625 (patch)
treecf3379181ac77c2a67ec6fbdc7fcb3313c22f958 /cpp/src/IceUtil/Time.cpp
parentICE-4747 - iceserviceinstall fails for SSL endpoint (diff)
downloadice-7748f03ef59fe0cbb0fac6781c07297a59572625.tar.bz2
ice-7748f03ef59fe0cbb0fac6781c07297a59572625.tar.xz
ice-7748f03ef59fe0cbb0fac6781c07297a59572625.zip
Fix to prevent overflows
Diffstat (limited to 'cpp/src/IceUtil/Time.cpp')
-rw-r--r--cpp/src/IceUtil/Time.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/cpp/src/IceUtil/Time.cpp b/cpp/src/IceUtil/Time.cpp
index b42b49c2927..29820316070 100644
--- a/cpp/src/IceUtil/Time.cpp
+++ b/cpp/src/IceUtil/Time.cpp
@@ -20,7 +20,6 @@
#endif
#ifdef __APPLE__
-# include <CoreServices/CoreServices.h>
# include <mach/mach.h>
# include <mach/mach_time.h>
#endif
@@ -68,14 +67,16 @@ InitializeFrequency frequencyInitializer;
namespace
{
-mach_timebase_info_data_t initTimeBase = {0, 0};
+double machMultiplier = 1.0;
class InitializeTime
{
public:
InitializeTime()
{
+ mach_timebase_info_data_t initTimeBase = { 0, 0 };
mach_timebase_info(&initTimeBase);
+ machMultiplier = static_cast<double>(initTimeBase.numer) / initTimeBase.denom / ICE_INT64(1000);
}
};
InitializeTime initializeTime;
@@ -148,7 +149,7 @@ IceUtil::Time::now(Clock clock)
}
return Time(tv.tv_sec * ICE_INT64(1000000) + tv.tv_usec);
#elif defined(__APPLE__)
- return Time((mach_absolute_time() * initTimeBase.numer / initTimeBase.denom) / ICE_INT64(1000));
+ return Time(mach_absolute_time() * machMultiplier);
#else
struct timespec ts;
if(clock_gettime(CLOCK_MONOTONIC, &ts) < 0)