Skip to content

Commit dbecf2e

Browse files
author
Zishan Mirza
committed
remove implementation for a different pull request
1 parent d1e7c8a commit dbecf2e

File tree

2 files changed

+2
-305
lines changed

2 files changed

+2
-305
lines changed

libc/src/time/linux/timezone.cpp

Lines changed: 1 addition & 173 deletions
Original file line numberDiff line numberDiff line change
@@ -6,187 +6,15 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include <fcntl.h>
10-
#include <sys/types.h>
11-
#include <unistd.h>
12-
13-
#include "src/__support/common.h"
149
#include "src/time/linux/timezone.h"
1510
#include "src/time/time_utils.h"
1611

1712
namespace LIBC_NAMESPACE_DECL {
1813
namespace timezone {
1914

2015
tzset *get_tzset(File *file) {
21-
unsigned char hdr[TIMEZONE_HDR_SIZE + 4096];
22-
int64_t magic;
23-
unsigned char version;
24-
__int128_t reserved;
25-
uint32_t tzh_ttisutcnt;
26-
uint32_t tzh_ttisstdcnt;
27-
uint32_t tzh_leapcnt;
28-
uint32_t tzh_timecnt;
29-
uint32_t tzh_typecnt;
30-
uint32_t tzh_charcnt;
31-
__uint128_t tmp;
32-
size_t i;
33-
34-
file->read(hdr, TIMEZONE_HDR_SIZE + 4096);
35-
36-
// these locations are defined in documentation
37-
// for `tzfile` and should be 44 bytes
38-
magic = (hdr[0] << 24) | (hdr[1] << 16) | (hdr[2] << 8) | hdr[3];
39-
version = hdr[4];
40-
for (i = 5; i < 21; i++) {
41-
tmp = (tmp << 8) | hdr[i];
42-
}
43-
reserved = tmp;
44-
tzh_ttisutcnt = (hdr[20] << 24) | (hdr[21] << 16) | (hdr[22] << 8) | hdr[23];
45-
tzh_ttisstdcnt = (hdr[24] << 24) | (hdr[25] << 16) | (hdr[26] << 8) | hdr[27];
46-
tzh_leapcnt = (hdr[28] << 24) | (hdr[29] << 16) | (hdr[30] << 8) | hdr[31];
47-
tzh_timecnt = (hdr[32] << 24) | (hdr[33] << 16) | (hdr[34] << 8) | hdr[35];
48-
tzh_typecnt = (hdr[36] << 24) | (hdr[37] << 16) | (hdr[38] << 8) | hdr[39];
49-
tzh_charcnt = (hdr[40] << 24) | (hdr[41] << 16) | (hdr[42] << 8) | hdr[43];
50-
5116
static tzset result;
52-
53-
result.tzh_ttisutcnt = tzh_ttisutcnt;
54-
result.tzh_ttisstdcnt = tzh_ttisstdcnt;
55-
result.tzh_leapcnt = tzh_leapcnt;
56-
result.tzh_timecnt = tzh_timecnt;
57-
result.tzh_typecnt = tzh_typecnt;
58-
result.tzh_charcnt = tzh_charcnt;
59-
60-
if (magic != 0x545A6966) {
61-
return nullptr;
62-
}
63-
64-
if (version != 0x32 && version != 0x33 && version != 0x34) {
65-
return nullptr;
66-
}
67-
68-
// according to `tzfile`, 15 bytes should be 0
69-
if (reserved != 0) {
70-
return nullptr;
71-
}
72-
73-
int64_t product;
74-
75-
product = (tzh_timecnt * 5) + (tzh_typecnt * 6) + (tzh_leapcnt * 8) +
76-
tzh_charcnt + tzh_ttisstdcnt + tzh_ttisutcnt + TIMEZONE_HDR_SIZE;
77-
78-
int64_t tzh_timecnt_length;
79-
int64_t tzh_typecnt_length;
80-
int64_t tzh_leapcnt_length;
81-
int64_t tzh_charcnt_length;
82-
int64_t tzh_timecnt_end;
83-
int64_t tzh_typecnt_end;
84-
int64_t tzh_leapcnt_end;
85-
int64_t tzh_charcnt_end;
86-
87-
tzh_timecnt_length = tzh_timecnt * 9;
88-
tzh_typecnt_length = tzh_typecnt * 6;
89-
tzh_leapcnt_length = tzh_leapcnt * 12;
90-
tzh_charcnt_length = tzh_charcnt;
91-
tzh_timecnt_end = TIMEZONE_HDR_SIZE + product + tzh_timecnt_length;
92-
tzh_typecnt_end = tzh_timecnt_end + tzh_typecnt_length;
93-
tzh_leapcnt_end = tzh_typecnt_end + tzh_leapcnt_length;
94-
tzh_charcnt_end = tzh_leapcnt_end + tzh_charcnt_length;
95-
96-
size_t start;
97-
size_t end;
98-
size_t chunk;
99-
100-
start = TIMEZONE_HDR_SIZE + product;
101-
end = (TIMEZONE_HDR_SIZE + product + (tzh_timecnt * 8));
102-
chunk = (end - start) / 8;
103-
104-
int64_t tzh_timecnt_transitions[chunk];
105-
int64_t *ptr_tzh_timecnt_transitions;
106-
107-
ptr_tzh_timecnt_transitions = tzh_timecnt_transitions;
108-
for (i = 0; i < chunk; ++i) {
109-
*(ptr_tzh_timecnt_transitions + i) =
110-
(static_cast<int64_t>(hdr[start + i * 8]) << 56) |
111-
(static_cast<int64_t>(hdr[start + i * 8 + 1]) << 48) |
112-
(static_cast<int64_t>(hdr[start + i * 8 + 2]) << 40) |
113-
(static_cast<int64_t>(hdr[start + i * 8 + 3]) << 32) |
114-
(static_cast<int64_t>(hdr[start + i * 8 + 4]) << 24) |
115-
(static_cast<int64_t>(hdr[start + i * 8 + 5]) << 16) |
116-
(static_cast<int64_t>(hdr[start + i * 8 + 6]) << 8) |
117-
static_cast<int64_t>(hdr[start + i * 8 + 7]);
118-
}
119-
result.tzh_timecnt_transitions = ptr_tzh_timecnt_transitions;
120-
result.tzh_timecnt_number_transitions = chunk + 1;
121-
122-
start = TIMEZONE_HDR_SIZE + product + tzh_timecnt * 8;
123-
end = tzh_timecnt_end;
124-
125-
int64_t tzh_timecnt_indices[end - start];
126-
int64_t *ptr_tzh_timecnt_indices;
127-
size_t j;
128-
129-
ptr_tzh_timecnt_indices = tzh_timecnt_indices;
130-
j = 0;
131-
for (i = start; i < end; ++i) {
132-
tzh_timecnt_indices[j] = hdr[i];
133-
j += 1;
134-
}
135-
result.tzh_timecnt_indices = ptr_tzh_timecnt_indices;
136-
137-
int64_t tz[tzh_charcnt_end - tzh_leapcnt_end - 1];
138-
int64_t *ptr_tz;
139-
140-
ptr_tz = tz;
141-
result.tz = ptr_tz;
142-
j = 0;
143-
for (i = tzh_leapcnt_end; i < static_cast<size_t>(tzh_charcnt_end - 1); ++i) {
144-
if (i == static_cast<size_t>(tzh_charcnt_end - 1)) {
145-
tz[j] = '\0';
146-
break;
147-
}
148-
149-
if (hdr[i] == '\0') {
150-
tz[j] = 0x3B;
151-
j += 1;
152-
continue;
153-
}
154-
155-
tz[j] = hdr[i];
156-
157-
j += 1;
158-
}
159-
160-
chunk = ((tzh_typecnt_end - tzh_timecnt_end) / 6);
161-
ttinfo ttinfo[chunk];
162-
163-
size_t index = 0;
164-
for (size_t i = tzh_timecnt_end; i < static_cast<size_t>(tzh_typecnt_end);
165-
i += 6) {
166-
int32_t tt_utoff = static_cast<int32_t>(hdr[i] << 24) |
167-
static_cast<int32_t>(hdr[i + 1] << 16) |
168-
static_cast<int32_t>(hdr[i + 2] << 8) |
169-
static_cast<int32_t>(hdr[i + 3]);
170-
uint8_t tt_isdst = hdr[i + 4];
171-
size_t tt_desigidx = hdr[i + 5];
172-
173-
size_t k = 0;
174-
for (size_t j = 0; j < tt_desigidx; j++) {
175-
if (tz[j] == ';') {
176-
k++;
177-
}
178-
}
179-
180-
ttinfo[index].tt_utoff = tt_utoff;
181-
ttinfo[index].tt_isdst = tt_isdst;
182-
ttinfo[index].tt_desigidx = static_cast<int8_t>(k);
183-
184-
ttinfo[index].size = &chunk;
185-
186-
index++;
187-
}
188-
189-
result.ttinfo = ttinfo;
17+
(void)file;
19018

19119
return &result;
19220
}

libc/test/src/time/localtime_test.cpp

Lines changed: 1 addition & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ void set_env_var(char *env) {
1717
}
1818

1919
TEST(LlvmLibcLocaltime, ValidUnixTimestamp0) {
20-
set_env_var("TZ=Europe/Stockholm");
20+
set_env_var("TZ=Europe/Paris");
2121

2222
const time_t t_ptr = 0;
2323
struct tm *result = LIBC_NAMESPACE::localtime(&t_ptr);
@@ -31,134 +31,3 @@ TEST(LlvmLibcLocaltime, ValidUnixTimestamp0) {
3131
ASSERT_EQ(0, result->tm_yday);
3232
ASSERT_EQ(0, result->tm_isdst);
3333
}
34-
35-
TEST(LlvmLibcLocaltime, ValidUnixTimestamp32Int) {
36-
set_env_var("TZ=Europe/Berlin");
37-
38-
time_t t_ptr = 2147483647;
39-
struct tm *result = LIBC_NAMESPACE::localtime(&t_ptr);
40-
ASSERT_EQ(138, result->tm_year);
41-
ASSERT_EQ(0, result->tm_mon);
42-
ASSERT_EQ(19, result->tm_mday);
43-
ASSERT_EQ(4, result->tm_hour);
44-
ASSERT_EQ(14, result->tm_min);
45-
ASSERT_EQ(7, result->tm_sec);
46-
ASSERT_EQ(2, result->tm_wday);
47-
ASSERT_EQ(18, result->tm_yday);
48-
ASSERT_EQ(0, result->tm_isdst);
49-
}
50-
51-
TEST(LlvmLibcLocaltime, ValidUnixTimestamp32IntDst) {
52-
set_env_var("TZ=Europe/Berlin");
53-
54-
time_t t_ptr = 1627225465;
55-
struct tm *result = LIBC_NAMESPACE::localtime(&t_ptr);
56-
ASSERT_EQ(121, result->tm_year);
57-
ASSERT_EQ(6, result->tm_mon);
58-
ASSERT_EQ(25, result->tm_mday);
59-
ASSERT_EQ(17, result->tm_hour);
60-
ASSERT_EQ(4, result->tm_min);
61-
ASSERT_EQ(25, result->tm_sec);
62-
ASSERT_EQ(0, result->tm_wday);
63-
ASSERT_EQ(205, result->tm_yday);
64-
ASSERT_EQ(1, result->tm_isdst);
65-
}
66-
67-
TEST(LlvmLibcLocaltime, ValidUnixTimestampTzEnvironmentVariableUsaPst) {
68-
set_env_var("TZ=America/Los_Angeles");
69-
70-
time_t t_ptr = 1627225465;
71-
struct tm *result = LIBC_NAMESPACE::localtime(&t_ptr);
72-
ASSERT_EQ(121, result->tm_year);
73-
ASSERT_EQ(6, result->tm_mon);
74-
ASSERT_EQ(25, result->tm_mday);
75-
ASSERT_EQ(8, result->tm_hour);
76-
ASSERT_EQ(4, result->tm_min);
77-
ASSERT_EQ(25, result->tm_sec);
78-
ASSERT_EQ(0, result->tm_wday);
79-
ASSERT_EQ(205, result->tm_yday);
80-
ASSERT_EQ(1, result->tm_isdst);
81-
}
82-
83-
TEST(LlvmLibcLocaltime, ValidUnixTimestampTzEnvironmentVariableUsaEst) {
84-
set_env_var("TZ=America/New_York");
85-
86-
time_t t_ptr = 1627225465;
87-
struct tm *result = LIBC_NAMESPACE::localtime(&t_ptr);
88-
ASSERT_EQ(121, result->tm_year);
89-
ASSERT_EQ(6, result->tm_mon);
90-
ASSERT_EQ(25, result->tm_mday);
91-
ASSERT_EQ(11, result->tm_hour);
92-
ASSERT_EQ(4, result->tm_min);
93-
ASSERT_EQ(25, result->tm_sec);
94-
ASSERT_EQ(0, result->tm_wday);
95-
ASSERT_EQ(205, result->tm_yday);
96-
ASSERT_EQ(1, result->tm_isdst);
97-
}
98-
99-
// TODO: fix tm_hour and tm_isdst
100-
TEST(LlvmLibcLocaltime, ValidUnixTimestampTzEnvironmentVariableUTC) {
101-
set_env_var("TZ=UTC");
102-
103-
time_t t_ptr = 1627225465;
104-
struct tm *result = LIBC_NAMESPACE::localtime(&t_ptr);
105-
ASSERT_EQ(121, result->tm_year);
106-
ASSERT_EQ(6, result->tm_mon);
107-
ASSERT_EQ(25, result->tm_mday);
108-
// ASSERT_EQ(15, result->tm_hour);
109-
ASSERT_EQ(4, result->tm_min);
110-
ASSERT_EQ(25, result->tm_sec);
111-
ASSERT_EQ(0, result->tm_wday);
112-
ASSERT_EQ(205, result->tm_yday);
113-
// ASSERT_EQ(0, result->tm_isdst);
114-
}
115-
116-
// TODO: fix tm_hour and tm_isdst
117-
TEST(LlvmLibcLocaltime, ValidUnixTimestampTzEnvironmentVariableGMT) {
118-
set_env_var("TZ=GMT");
119-
120-
time_t t_ptr = 1627225465;
121-
struct tm *result = LIBC_NAMESPACE::localtime(&t_ptr);
122-
ASSERT_EQ(121, result->tm_year);
123-
ASSERT_EQ(6, result->tm_mon);
124-
ASSERT_EQ(25, result->tm_mday);
125-
// ASSERT_EQ(15, result->tm_hour);
126-
ASSERT_EQ(4, result->tm_min);
127-
ASSERT_EQ(25, result->tm_sec);
128-
ASSERT_EQ(0, result->tm_wday);
129-
ASSERT_EQ(205, result->tm_yday);
130-
// ASSERT_EQ(0, result->tm_isdst);
131-
}
132-
133-
TEST(LlvmLibcLocaltime, ValidUnixTimestampTzEnvironmentVariableEuropeBerlin) {
134-
set_env_var("TZ=Europe/Berlin");
135-
136-
time_t t_ptr = 1627225465;
137-
struct tm *result = LIBC_NAMESPACE::localtime(&t_ptr);
138-
ASSERT_EQ(121, result->tm_year);
139-
ASSERT_EQ(6, result->tm_mon);
140-
ASSERT_EQ(25, result->tm_mday);
141-
ASSERT_EQ(17, result->tm_hour);
142-
ASSERT_EQ(4, result->tm_min);
143-
ASSERT_EQ(25, result->tm_sec);
144-
ASSERT_EQ(0, result->tm_wday);
145-
ASSERT_EQ(205, result->tm_yday);
146-
ASSERT_EQ(1, result->tm_isdst);
147-
}
148-
149-
// TODO: fix tm_hour and tm_isdst
150-
TEST(LlvmLibcLocaltime, ValidUnixTimestampTzEnvironmentVariableEuropeMoscow) {
151-
set_env_var("TZ=Europe/Moscow");
152-
153-
time_t t_ptr = 1627225465;
154-
struct tm *result = LIBC_NAMESPACE::localtime(&t_ptr);
155-
ASSERT_EQ(121, result->tm_year);
156-
ASSERT_EQ(6, result->tm_mon);
157-
ASSERT_EQ(25, result->tm_mday);
158-
// ASSERT_EQ(18, result->tm_hour);
159-
ASSERT_EQ(4, result->tm_min);
160-
ASSERT_EQ(25, result->tm_sec);
161-
ASSERT_EQ(0, result->tm_wday);
162-
ASSERT_EQ(205, result->tm_yday);
163-
// ASSERT_EQ(0, result->tm_isdst);
164-
}

0 commit comments

Comments
 (0)