summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src/clocktodvalidate.c
diff options
context:
space:
mode:
authorFrank Kühndel <frank.kuehndel@embedded-brains.de>2021-05-11 16:26:55 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-05-12 06:41:10 +0200
commit3af2dc7802164d6c22dbef1f144c9bd945a35c30 (patch)
tree6c34fd16da24213f89fde232dd6a0f7ccf87cf35 /cpukit/rtems/src/clocktodvalidate.c
parentrtems: Use _Objects_Free_nothing() for msg queues (diff)
downloadrtems-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.c21
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;
}