]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
make fr_time_from_str() use fr_time_t
authorAlan T. DeKok <aland@freeradius.org>
Wed, 21 Aug 2019 11:50:47 +0000 (07:50 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 21 Aug 2019 11:50:47 +0000 (07:50 -0400)
In preparation for parsing RFC 3339 dates.

src/lib/util/misc.c
src/lib/util/misc.h
src/lib/util/value.c

index db635dfa2df2fef82f5fe9be08d0ca09486dd555..e0c002046c48fb6fbc0827935c9075839d528abc 100644 (file)
@@ -716,7 +716,7 @@ static char *mystrtok(char **ptr, char const *sep)
  *     - 0 on success.
  *     - -1 on failure.
  */
-int fr_time_from_str(time_t *date, char const *date_str)
+int fr_time_from_str(fr_time_t *date, char const *date_str)
 {
        int             i;
        time_t          t;
@@ -727,10 +727,12 @@ int fr_time_from_str(time_t *date, char const *date_str)
        char            *tail = NULL;
 
        /*
-        * Test for unix timestamp date
+        *      Test for unix timestamp, which is just a number and
+        *      nothing else.
         */
-       *date = strtoul(date_str, &tail, 10);
+       t = strtoul(date_str, &tail, 10);
        if (*tail == '\0') {
+               *date = fr_time_from_timeval(&(struct timeval) { .tv_sec = t });
                return 0;
        }
 
@@ -846,7 +848,7 @@ int fr_time_from_str(time_t *date, char const *date_str)
        t = mktime(tm);
        if (t == (time_t) -1) return -1;
 
-       *date = t;
+       *date = fr_time_from_timeval(&(struct timeval) { .tv_sec = t });
 
        return 0;
 }
index c267e079b7a1255eba1e2bb680bf830a0b1109b7..682108a2e540bbf34726b9b24edb0b6433304084 100644 (file)
@@ -161,7 +161,7 @@ int         fr_blocking(int fd);
 ssize_t                fr_writev(int fd, struct iovec vector[], int iovcnt, fr_time_delta_t timeout);
 ssize_t                fr_utf8_to_ucs2(uint8_t *out, size_t outlen, char const *in, size_t inlen);
 size_t         fr_snprint_uint128(char *out, size_t outlen, uint128_t const num);
-int            fr_time_from_str(time_t *date, char const *date_str);
+int            fr_time_from_str(fr_time_t *date, char const *date_str);
 
 bool           fr_multiply(uint64_t *result, uint64_t lhs, uint64_t rhs);
 int            fr_size_from_str(size_t *out, char const *str);
index 09eeb81db32c956b89f9d2168c01f64d9766d267..2d6f9d5dafc40ed6c1dcaf13fb7a624a53843d4d 100644 (file)
@@ -4021,18 +4021,11 @@ parse:
 
        case FR_TYPE_DATE:
        {
-               /*
-                *      Admins use strings like "Jan 1 1970", but we use something
-                *      rather stranger internally.
-                */
-               time_t date;
-
-               if (fr_time_from_str(&date, in) < 0) {
+               if (fr_time_from_str(&dst->vb_date, in) < 0) {
                        fr_strerror_printf("failed to parse time string \"%s\"", in);
                        return -1;
                }
 
-               dst->vb_date = fr_time_from_timeval(&(struct timeval) {.tv_sec = date});
                dst->enumv = dst_enumv;
        }
                break;