mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-26 06:08:20 +00:00
score: Limit the CLOCK_REALTIME setting
Limit the CLOCK_REALTIME setting to ensure that the CLOCK_REALTIME is defined for a system uptime of at least 114 years.
This commit is contained in:
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -131,6 +131,20 @@ static rtems_task Init(
|
||||
rtems_test_assert( sc == -1 );
|
||||
rtems_test_assert( errno == EINVAL );
|
||||
|
||||
puts( "Init: clock_settime - 2400-01-01T00:00:00.999999999Z SUCCESSFUL" );
|
||||
tv.tv_sec = 13569465600;
|
||||
tv.tv_nsec = 999999999;
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user