In preparation for parsing RFC 3339 dates.
* - 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;
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;
}
t = mktime(tm);
if (t == (time_t) -1) return -1;
- *date = t;
+ *date = fr_time_from_timeval(&(struct timeval) { .tv_sec = t });
return 0;
}
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);
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;