51#define DAYSPERNYEAR 365
52#define DAYSPERLYEAR 366
53#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR)
54#define SECSPERDAY ((long) SECSPERHOUR * HOURSPERDAY)
57#define EPOCH_YEAR 1970
58#define EPOCH_WDAY TM_THURSDAY
60#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
61#define LEAPS_THRU_END_OF(y) ((y) / 4 - (y) / 100 + (y) / 400)
64 { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
65 { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
67static const int year_lengths[2] = {
77 ZeroMem(EfiTime,
sizeof(EFI_TIME));
88 while (days < 0 || days >= (
long) year_lengths[yleap =
isleap(
y)]) {
97 EfiTime->Year = (UINT16)
y;
98 ip = mon_lengths[yleap];
99 for (EfiTime->Month = 0; days >= (
long) ip[EfiTime->Month]; ++(EfiTime->Month))
100 days = days - (long) ip[EfiTime->Month];
102 EfiTime->Day = (UINT8) (days + 1);
112 return sizeof(CHAR16);
113 return (s->
len + 1) *
sizeof(CHAR16);
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
#define LEAPS_THRU_END_OF(y)
UINTN fsw_efi_strsize(struct fsw_string *s)
VOID fsw_efi_strcpy(CHAR16 *Dest, struct fsw_string *src)
VOID fsw_efi_decode_time(OUT EFI_TIME *EfiTime, IN UINT32 UnixTime)
void * data
Data pointer (may be NULL if type is EMPTY or len is zero)
int len
Length in characters.
int size
Total data size in bytes.
int type
Encoding of the string - empty, ISO-8859-1, UTF8, UTF16.