ArmPlatformPkg/PL031RealTimeClockLib: Fixed the conditions in LibSetTime()

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>



git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14794 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Olivier Martin 2013-10-21 11:12:21 +00:00 committed by oliviermartin
parent 4f8c9ae05d
commit cc104d19a9
1 changed files with 13 additions and 11 deletions

View File

@ -181,7 +181,7 @@ EfiTimeToEpoch (
JulianDate = Time->Day + ((153*m + 2)/5) + (365*y) + (y/4) - (y/100) + (y/400) - 32045; JulianDate = Time->Day + ((153*m + 2)/5) + (365*y) + (y/4) - (y/100) + (y/400) - 32045;
ASSERT(JulianDate > EPOCH_JULIAN_DATE); ASSERT (JulianDate >= EPOCH_JULIAN_DATE);
EpochDays = JulianDate - EPOCH_JULIAN_DATE; EpochDays = JulianDate - EPOCH_JULIAN_DATE;
EpochSeconds = (EpochDays * SEC_PER_DAY) + ((UINTN)Time->Hour * SEC_PER_HOUR) + (Time->Minute * SEC_PER_MIN) + Time->Second; EpochSeconds = (EpochDays * SEC_PER_DAY) + ((UINTN)Time->Hour * SEC_PER_HOUR) + (Time->Minute * SEC_PER_MIN) + Time->Second;
@ -420,16 +420,9 @@ LibSetTime (
EFI_STATUS Status; EFI_STATUS Status;
UINTN EpochSeconds; UINTN EpochSeconds;
// Because the PL031 is a 32-bit counter counting seconds, // Check the input parameters are within the range specified by UEFI
// the maximum time span is just over 136 years. if ((Time->Year < 1900) ||
// Time is stored in Unix Epoch format, so it starts in 1970, (Time->Year > 9999) ||
// Therefore it can not exceed the year 2106.
// This is not a problem for UEFI, as the current spec limits the years
// to the range 1998 .. 2011
// Check the input parameters' range.
if ((Time->Year < 1998) ||
(Time->Year > 2099) ||
(Time->Month < 1 ) || (Time->Month < 1 ) ||
(Time->Month > 12 ) || (Time->Month > 12 ) ||
(!DayValid (Time) ) || (!DayValid (Time) ) ||
@ -444,6 +437,15 @@ LibSetTime (
goto EXIT; goto EXIT;
} }
// Because the PL031 is a 32-bit counter counting seconds,
// the maximum time span is just over 136 years.
// Time is stored in Unix Epoch format, so it starts in 1970,
// Therefore it can not exceed the year 2106.
if ((Time->Year < 1970) || (Time->Year >= 2106)) {
Status = EFI_UNSUPPORTED;
goto EXIT;
}
// Initialize the hardware if not already done // Initialize the hardware if not already done
if (!mPL031Initialized) { if (!mPL031Initialized) {
Status = InitializePL031 (); Status = InitializePL031 ();