Limit the CLOCK_REALTIME setting to ensure that the CLOCK_REALTIME is defined for a system uptime of at least 114 years. --- cpukit/include/rtems/score/todimpl.h | 9 +++++++++ cpukit/score/src/coretodcheck.c | 2 +- testsuites/psxtests/psxclock/init.c | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/cpukit/include/rtems/score/todimpl.h b/cpukit/include/rtems/score/todimpl.h index ceeef2e21b..f85689fd9c 100644 --- a/cpukit/include/rtems/score/todimpl.h +++ b/cpukit/include/rtems/score/todimpl.h @@ -115,6 +115,15 @@ extern "C" { (((1987 - 1970 + 1) * TOD_SECONDS_PER_NON_LEAP_YEAR) + \ (4 * TOD_SECONDS_PER_DAY)) +/** + * @brief Seconds from 1970-01-01T00:00:00Z to 2400-01-01T00:00:00Z. + * + * This is the latest time of day which should be set by _TOD_Set(). The year + * 2400 was chosen to guarantee a defined CLOCK_REALTIME within the range of a + * system uptime of about 114 years. + */ +#define TOD_SECONDS_1970_THROUGH_2400 13569465600 + /** * @brief Earliest year to which an time of day can be initialized. * diff --git a/cpukit/score/src/coretodcheck.c b/cpukit/score/src/coretodcheck.c index b42435aa43..8c012c5070 100644 --- a/cpukit/score/src/coretodcheck.c +++ b/cpukit/score/src/coretodcheck.c @@ -51,7 +51,7 @@ Status_Control _TOD_Is_valid_new_time_of_day( const struct timespec *tod ) return STATUS_INVALID_NUMBER; } - if ( _Watchdog_Is_far_future_timespec( tod ) ) { + if ( tod->tv_sec > TOD_SECONDS_1970_THROUGH_2400 ) { return STATUS_INVALID_NUMBER; } diff --git a/testsuites/psxtests/psxclock/init.c b/testsuites/psxtests/psxclock/init.c index 778637b4fd..3f88f1d401 100644 --- a/testsuites/psxtests/psxclock/init.c +++ b/testsuites/psxtests/psxclock/init.c @@ -131,6 +131,21 @@ static rtems_task Init( rtems_test_assert( sc == -1 ); rtems_test_assert( errno == EINVAL ); + puts( "Init: clock_settime - 2400-01-01T00:00:00Z SUCCESSFUL" ); + tv.tv_sec = 13569465600; + tv.tv_nsec = 0; + errno = 0; + sc = clock_settime( CLOCK_REALTIME, &tv ); + rtems_test_assert( sc == 0 ); + + puts( "Init: clock_settime - 2400-01-01T00:00:01Z EINVAL" ); + tv.tv_sec = 13569465601; + tv.tv_nsec = 0; + errno = 0; + sc = clock_settime( CLOCK_REALTIME, &tv ); + rtems_test_assert( sc == -1 ); + rtems_test_assert( errno == EINVAL ); + puts( "Init: clock_settime - far future EINVAL" ); tv.tv_sec = 17179869184; tv.tv_nsec = 0; -- 2.26.2 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel