diff options
author | Frank Kühndel <frank.kuehndel@embedded-brains.de> | 2021-05-11 16:26:55 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-05-12 06:41:10 +0200 |
commit | 3af2dc7802164d6c22dbef1f144c9bd945a35c30 (patch) | |
tree | 6c34fd16da24213f89fde232dd6a0f7ccf87cf35 /cpukit/rtems/src/clocktodvalidate.c | |
parent | rtems: Use _Objects_Free_nothing() for msg queues (diff) | |
download | rtems-3af2dc7802164d6c22dbef1f144c9bd945a35c30.tar.bz2 |
_TOD_Validate(): Fix incorrect return code
This patch fixes bug #4403. Directives
* rtems_timer_fire_when()
* rtems_timer_server_fire_when()
* rtems_task_wake_when()
are documented to return RTEMS_INVALID_ADDRESS when their time-of-day
argument is NULL. But actually they return RTEMS_INVALID_CLOCK. To fix
the issue this patch changes _TOD_Validate() to return a
status code instead of just true/false.
Close #4403
Diffstat (limited to 'cpukit/rtems/src/clocktodvalidate.c')
-rw-r--r-- | cpukit/rtems/src/clocktodvalidate.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/cpukit/rtems/src/clocktodvalidate.c b/cpukit/rtems/src/clocktodvalidate.c index 2685bfd6e7..d8e9d01382 100644 --- a/cpukit/rtems/src/clocktodvalidate.c +++ b/cpukit/rtems/src/clocktodvalidate.c @@ -35,17 +35,20 @@ const uint32_t _TOD_Days_per_month[ 2 ][ 13 ] = { { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } }; -bool _TOD_Validate( +rtems_status_code _TOD_Validate( const rtems_time_of_day *the_tod ) { uint32_t days_in_month; uint32_t ticks_per_second; + if ( the_tod == NULL ) { + return RTEMS_INVALID_ADDRESS; + } + ticks_per_second = TOD_MICROSECONDS_PER_SECOND / rtems_configuration_get_microseconds_per_tick(); - if ((!the_tod) || - (the_tod->ticks >= ticks_per_second) || + if ((the_tod->ticks >= ticks_per_second) || (the_tod->second >= TOD_SECONDS_PER_MINUTE) || (the_tod->minute >= TOD_MINUTES_PER_HOUR) || (the_tod->hour >= TOD_HOURS_PER_DAY) || @@ -53,8 +56,9 @@ bool _TOD_Validate( (the_tod->month > TOD_MONTHS_PER_YEAR) || (the_tod->year < TOD_BASE_YEAR) || (the_tod->year > TOD_LATEST_YEAR) || - (the_tod->day == 0) ) - return false; + (the_tod->day == 0) ) { + return RTEMS_INVALID_CLOCK; + } if (((the_tod->year % 4) == 0 && (the_tod->year % 100 != 0)) || (the_tod->year % 400 == 0)) @@ -62,8 +66,9 @@ bool _TOD_Validate( else days_in_month = _TOD_Days_per_month[ 0 ][ the_tod->month ]; - if ( the_tod->day > days_in_month ) - return false; + if ( the_tod->day > days_in_month ) { + return RTEMS_INVALID_CLOCK; + } - return true; + return RTEMS_SUCCESSFUL; } |