diff options
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; } |