If the input is older than "1970-01-01 UTC", then `parse_timestamp()`
fails and returns -EINVAL. However, if the input is e.g. `-100years`,
then the function succeeds and sets `usec = 0`.
This commit makes the function also succeed for old dates and set
`usec = 0`.
Fixes #6290.
from_tm:
x = mktime_or_timegm(&tm, utc);
- if (x < 0)
- return -EINVAL;
+ if (x == (time_t) -1)
+ return -EOVERFLOW;
if (weekday >= 0 && tm.tm_wday != weekday)
return -EINVAL;
- ret = (usec_t) x * USEC_PER_SEC + x_usec;
+ if (x < 0)
+ ret = 0;
+ else
+ ret = (usec_t) x * USEC_PER_SEC + x_usec;
+
if (ret > USEC_TIMESTAMP_FORMATTABLE_MAX)
return -EINVAL;
finish:
if (ret + plus < ret) /* overflow? */
- return -EINVAL;
+ return -EOVERFLOW;
ret += plus;
if (ret > USEC_TIMESTAMP_FORMATTABLE_MAX)
return -EINVAL;