VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/FirmwareNew/StdLib/LibC/Time/TimeEfi.c@ 77599

最後變更 在這個檔案從77599是 48674,由 vboxsync 提交於 12 年 前

EFI: Export newly imported tinaocore UEFI sources to OSE.

  • 屬性 svn:eol-style 設為 native
檔案大小: 2.9 KB
 
1/** @file
2 Transformations between the EFI_TIME structure and struct tm or time_t.
3
4 Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials are licensed and made available under
6 the terms and conditions of the BSD License that accompanies this distribution.
7 The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13**/
14#include <Uefi.h>
15
16#include <LibConfig.h>
17
18#include <time.h>
19#include "tzfile.h"
20#include <MainData.h>
21
22/** Convert an EFI_TIME structure into a C Standard tm structure.
23
24 @param[in] ET Pointer to the EFI_TIME structure to convert.
25 @param[out] BT Pointer to the tm structure to receive the converted time.
26*/
27void
28Efi2Tm(
29 IN EFI_TIME *ET,
30 OUT struct tm *BT
31 )
32{
33 // Convert EFI time to broken-down time.
34 BT->tm_year = ET->Year - TM_YEAR_BASE;
35 BT->tm_mon = ET->Month - 1; // BD time is zero based, EFI is 1 based
36 BT->tm_mday = ET->Day;
37 BT->tm_hour = ET->Hour;
38 BT->tm_min = ET->Minute;
39 BT->tm_sec = ET->Second;
40 BT->tm_isdst = -1;
41 BT->tm_zoneoff = ET->TimeZone;
42 BT->tm_daylight = ET->Daylight;
43 BT->tm_Nano = ET->Nanosecond;
44}
45
46/** Convert an EFI_TIME structure into a time_t value.
47
48 @param[in] EfiBDtime Pointer to the EFI_TIME structure to convert.
49
50 @return The EFI_TIME converted into a time_t value.
51*/
52time_t
53Efi2Time(
54 IN EFI_TIME *EfiBDtime
55 )
56{
57 Efi2Tm( EfiBDtime, &gMD->BDTime);
58
59 return mktime( &gMD->BDTime);
60}
61
62/** Convert a C Standard tm structure into an EFI_TIME structure.
63
64 @param[in] BT Pointer to the tm structure to convert.
65 @param[out] ET Pointer to an EFI_TIME structure to receive the converted time.
66*/
67void
68Tm2Efi(
69 IN struct tm *BT,
70 OUT EFI_TIME *ET
71 )
72{
73 ET->Year = (UINT16)BT->tm_year + TM_YEAR_BASE;
74 ET->Month = (UINT8)BT->tm_mon + 1;
75 ET->Day = (UINT8)BT->tm_mday;
76 ET->Hour = (UINT8)BT->tm_hour;
77 ET->Minute = (UINT8)BT->tm_min;
78 ET->Second = (UINT8)BT->tm_sec;
79 ET->Nanosecond = (UINT32)BT->tm_Nano;
80 ET->TimeZone = (INT16)BT->tm_zoneoff;
81 ET->Daylight = (UINT8)BT->tm_daylight;
82}
83
84/** Convert a time_t value into an EFI_TIME structure.
85
86 @param[in] CalTime Calendar time as a time_t value.
87
88 @return Returns a newly malloced EFI_TIME structure containing
89 the converted calendar time.
90
91 @post It is the responsibility of the caller to free the
92 returned structure before the application exits.
93*/
94EFI_TIME*
95Time2Efi(
96 IN time_t CalTime
97 )
98{
99 struct tm *IT;
100 EFI_TIME *ET = NULL;
101
102 IT = gmtime(&CalTime);
103 if(IT != NULL) {
104 ET = malloc(sizeof(EFI_TIME));
105 if(ET != NULL) {
106 Tm2Efi(IT, ET);
107 }
108 }
109 return ET;
110}
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette