]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
More fr_time_from_utc fixes
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 25 Aug 2021 20:56:10 +0000 (15:56 -0500)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 25 Aug 2021 20:56:10 +0000 (15:56 -0500)
src/lib/util/misc.c
src/lib/util/time.c
src/lib/util/time.h

index fc0ebb168a0abe5b4a009ce0c60ef072e630ddff..f075372015d503d81d8f2a7f06c43d664aba44a3 100644 (file)
@@ -711,16 +711,15 @@ int fr_unix_time_from_str(fr_unix_time_t *date, char const *date_str, fr_time_re
                if (*tail == '-') tz *= -1;
 
        done:
-               t = fr_time_from_utc(tm);
+               *date = fr_unix_time_from_utc(tm);
 
                /*
                 *      Add in the time zone offset, which the posix
                 *      functions are too stupid to do.
                 */
-               t += tz;
-
-               *date = fr_unix_time_from_timeval(&(struct timeval) { .tv_sec = t });
+               *date += fr_unix_time_from_sec(tz);
                *date += subseconds;
+
                return 0;
        }
 
@@ -896,12 +895,7 @@ int fr_unix_time_from_str(fr_unix_time_t *date, char const *date_str, fr_time_re
                tm->tm_min = atoi(f[1]);
        }
 
-       t = fr_time_from_utc(tm);
-
-       /*
-        *      Get the UTC time, and manually add in the offset from GMT.
-        */
-       *date = fr_unix_time_from_timeval(&(struct timeval) { .tv_sec = t });
+       *date = fr_unix_time_from_utc(tm);
 
        /*
         *      Add in the time zone offset, which the posix
index 47e158f196398ce95eca35535f3dfd27c0edc737..6223262b1237767cdc5d475c76352926ee7bc628 100644 (file)
@@ -539,7 +539,7 @@ void fr_time_elapsed_fprint(FILE *fp, fr_time_elapsed_t const *elapsed, char con
 /*
  *     Based on https://blog.reverberate.org/2020/05/12/optimizing-date-algorithms.html
  */
-fr_unix_time_t fr_time_from_utc(struct tm *tm)
+fr_unix_time_t fr_unix_time_from_utc(struct tm *tm)
 {
        static const uint16_t month_yday[12] = {0,   31,  59,  90,  120, 151,
                                                181, 212, 243, 273, 304, 334};
@@ -553,5 +553,5 @@ fr_unix_time_t fr_time_from_utc(struct tm *tm)
         *      2472692 adjusts the days for Unix epoch.  It is calculated as
         *      (365.2425 * (4800 + 1970))
         */
-       return (days - 2472692) * 86400 + (tm->tm_hour * 3600) + (tm->tm_min * 60) + tm->tm_sec;
+       return fr_unix_time_from_sec((days - 2472692) * 86400 + (tm->tm_hour * 3600) + (tm->tm_min * 60) + tm->tm_sec);
 }
index 265db12452d85cb03307dbafbd6be50453dada60..2fed708d6807c3327657b30d616e1f3d24402804 100644 (file)
@@ -371,7 +371,7 @@ size_t              fr_time_strftime_utc(fr_sbuff_t *out, fr_time_t time, char const *fmt)
 
 void           fr_time_elapsed_update(fr_time_elapsed_t *elapsed, fr_time_t start, fr_time_t end) CC_HINT(nonnull);
 void           fr_time_elapsed_fprint(FILE *fp, fr_time_elapsed_t const *elapsed, char const *prefix, int tabs) CC_HINT(nonnull(1,2));
-fr_unix_time_t fr_time_from_utc(struct tm *tm) CC_HINT(nonnull);
+fr_unix_time_t fr_unix_time_from_utc(struct tm *tm) CC_HINT(nonnull);
 
 #ifdef __cplusplus
 }