X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=time64.c;h=1d43f3971710b0e1b3cdc32161f30428027d9f2c;hb=a4cc96117b620fea7c0739c9e20f017a5fdeeb52;hp=1453bd9de6765d97b06272577d06aa3fb0006307;hpb=7430375d1909c2b62c1fb3f9c6ed4b9d24dfcf32;p=p5sagit%2Fp5-mst-13.2.git diff --git a/time64.c b/time64.c old mode 100755 new mode 100644 index 1453bd9..1d43f39 --- a/time64.c +++ b/time64.c @@ -300,38 +300,6 @@ static void S_copy_little_tm_to_big_TM(const struct tm *src, struct TM *dest) { } -static void S_copy_big_TM_to_little_tm(const struct TM *src, struct tm *dest) { - if( src == NULL ) { - memset(dest, 0, sizeof(*dest)); - } - else { -# ifdef USE_TM64 - dest->tm_sec = src->tm_sec; - dest->tm_min = src->tm_min; - dest->tm_hour = src->tm_hour; - dest->tm_mday = src->tm_mday; - dest->tm_mon = src->tm_mon; - dest->tm_year = (int)src->tm_year; - dest->tm_wday = src->tm_wday; - dest->tm_yday = src->tm_yday; - dest->tm_isdst = src->tm_isdst; - -# ifdef HAS_TM_TM_GMTOFF - dest->tm_gmtoff = src->tm_gmtoff; -# endif - -# ifdef HAS_TM_TM_ZONE - dest->tm_zone = src->tm_zone; -# endif - -# else - /* They're the same type */ - memcpy(dest, src, sizeof(*dest)); -# endif - } -} - - #ifndef HAS_LOCALTIME_R /* Simulate localtime_r() to the best of our ability */ static struct tm * S_localtime_r(const time_t *clock, struct tm *result) { @@ -403,19 +371,19 @@ static struct TM *S_gmtime64_r (const Time64_T *in_time, struct TM *p) p->tm_zone = "UTC"; #endif - v_tm_sec = (int)(time % 60); - time /= 60; - v_tm_min = (int)(time % 60); - time /= 60; - v_tm_hour = (int)(time % 24); - time /= 24; + v_tm_sec = (int)fmod(time, 60.0); + time = time >= 0 ? floor(time / 60.0) : ceil(time / 60.0); + v_tm_min = (int)fmod(time, 60.0); + time = time >= 0 ? floor(time / 60.0) : ceil(time / 60.0); + v_tm_hour = (int)fmod(time, 24.0); + time = time >= 0 ? floor(time / 24.0) : ceil(time / 24.0); v_tm_tday = time; WRAP (v_tm_sec, v_tm_min, 60); WRAP (v_tm_min, v_tm_hour, 60); WRAP (v_tm_hour, v_tm_tday, 24); - v_tm_wday = (int)((v_tm_tday + 4) % 7); + v_tm_wday = (int)fmod((v_tm_tday + 4.0), 7.0); if (v_tm_wday < 0) v_tm_wday += 7; m = v_tm_tday; @@ -427,7 +395,7 @@ static struct TM *S_gmtime64_r (const Time64_T *in_time, struct TM *p) if (m >= 0) { /* Gregorian cycles, this is huge optimization for distant times */ - cycles = (int)(m / (Time64_T) days_in_gregorian_cycle); + cycles = (int)floor(m / (Time64_T) days_in_gregorian_cycle); if( cycles ) { m -= (cycles * (Time64_T) days_in_gregorian_cycle); year += (cycles * years_in_gregorian_cycle); @@ -451,7 +419,7 @@ static struct TM *S_gmtime64_r (const Time64_T *in_time, struct TM *p) year--; /* Gregorian cycles */ - cycles = (int)((m / (Time64_T) days_in_gregorian_cycle) + 1); + cycles = (int)ceil((m / (Time64_T) days_in_gregorian_cycle) + 1); if( cycles ) { m -= (cycles * (Time64_T) days_in_gregorian_cycle); year += (cycles * years_in_gregorian_cycle); @@ -497,7 +465,7 @@ static struct TM *S_gmtime64_r (const Time64_T *in_time, struct TM *p) } -struct TM *S_localtime64_r (const Time64_T *time, struct TM *local_tm) +static struct TM *S_localtime64_r (const Time64_T *time, struct TM *local_tm) { time_t safe_time; struct tm safe_date;