diff options
author | Pete Batard <pete@akeo.ie> | 2020-10-08 11:08:21 +0100 |
---|---|---|
committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2020-10-22 13:23:48 +0000 |
commit | 24cf72726564eac7ba9abb24f3d05795164d0a70 (patch) | |
tree | 2eeaa2c1473a42e2ccec8a318b66a7a0283e1634 | |
parent | e3c7db50cac9125607df49d5873991df6df11eae (diff) | |
download | edk2-24cf72726564eac7ba9abb24f3d05795164d0a70.tar.gz edk2-24cf72726564eac7ba9abb24f3d05795164d0a70.tar.bz2 edk2-24cf72726564eac7ba9abb24f3d05795164d0a70.zip |
EmbeddedPkg/VirtualRealTimeClockLib: Explicit cast to UINT32
Addresses BZ https://bugzilla.tianocore.org/show_bug.cgi?id=2380 where
explicit casts are required for 64 to 32 bit assignment.
We can apply a straight cast for Time->Nanosecond since we already checked
for overflow.
On the other hand, we may have a frequency that is greater than UINT32_MAX
for Capabilities->Resolution. But using the frequency for the resolution
is the wrong approach anyway, since we can't actually vouch for the actual
resolution of the virtual library. Instead, play it safe by defaulting to
1 Hz, which is what a standard PC-AT CMOS RTC device would use.
Signed-off-by: Pete Batard <pete@akeo.ie>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
-rw-r--r-- | EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c b/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c index 74e72bd48b..5c13ed4cf1 100644 --- a/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c +++ b/EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.c @@ -202,14 +202,14 @@ LibGetTime ( // Because we use the performance counter, we can fill the Nanosecond attribute
// provided that the remainder doesn't overflow 64-bit during multiplication.
if (Remainder <= 18446744073U) {
- Time->Nanosecond = MultU64x64 (Remainder, 1000000000U) / Freq;
+ Time->Nanosecond = (UINT32)(MultU64x64 (Remainder, 1000000000U) / Freq);
} else {
DEBUG ((DEBUG_WARN, "LibGetTime: Nanosecond value not set (64-bit overflow).\n"));
}
if (Capabilities) {
Capabilities->Accuracy = 0;
- Capabilities->Resolution = Freq;
+ Capabilities->Resolution = 1;
Capabilities->SetsToZero = FALSE;
}
|