Skip to content

Commit e7ca3e4

Browse files
committed
expose tzset
1 parent 047f629 commit e7ca3e4

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

src/libstd/time.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export
77
get_time,
88
precise_time_ns,
99
precise_time_s,
10+
tzset,
1011
tm,
1112
empty_tm,
1213
now,
@@ -20,6 +21,7 @@ native mod rustrt {
2021
fn get_time(&sec: i64, &nsec: i32);
2122
fn precise_time_ns(&ns: u64);
2223

24+
fn rust_tzset();
2325
// FIXME: The i64 values can be passed by-val when #2064 is fixed.
2426
fn rust_gmtime(&&sec: i64, &&nsec: i32, &&result: tm);
2527
fn rust_localtime(&&sec: i64, &&nsec: i32, &&result: tm);
@@ -59,6 +61,10 @@ fn precise_time_s() -> float {
5961
ret (precise_time_ns() as float) / 1000000000.;
6062
}
6163

64+
fn tzset() {
65+
rustrt::rust_tzset();
66+
}
67+
6268
type tm = {
6369
tm_sec: i32, // seconds after the minute [0-60]
6470
tm_min: i32, // minutes after the hour [0-59]
@@ -869,6 +875,7 @@ mod tests {
869875
#[test]
870876
fn test_at_utc() {
871877
os::setenv("TZ", "America/Los_Angeles");
878+
tzset();
872879

873880
let time = { sec: 1234567890_i64, nsec: 54321_i32 };
874881
let utc = at_utc(time);
@@ -890,10 +897,13 @@ mod tests {
890897
#[test]
891898
fn test_at() {
892899
os::setenv("TZ", "America/Los_Angeles");
900+
tzset();
893901

894902
let time = { sec: 1234567890_i64, nsec: 54321_i32 };
895903
let local = at(time);
896904

905+
#error("time_at: %?", local);
906+
897907
assert local.tm_sec == 30_i32;
898908
assert local.tm_min == 31_i32;
899909
assert local.tm_hour == 15_i32;
@@ -916,6 +926,7 @@ mod tests {
916926
#[test]
917927
fn test_to_timespec() {
918928
os::setenv("TZ", "America/Los_Angeles");
929+
tzset();
919930

920931
let time = { sec: 1234567890_i64, nsec: 54321_i32 };
921932
let utc = at_utc(time);
@@ -927,6 +938,7 @@ mod tests {
927938
#[test]
928939
fn test_conversions() {
929940
os::setenv("TZ", "America/Los_Angeles");
941+
tzset();
930942

931943
let time = { sec: 1234567890_i64, nsec: 54321_i32 };
932944
let utc = at_utc(time);
@@ -943,6 +955,7 @@ mod tests {
943955
#[test]
944956
fn test_strptime() {
945957
os::setenv("TZ", "America/Los_Angeles");
958+
tzset();
946959

947960
alt strptime("", "") {
948961
ok(tm) {
@@ -1088,18 +1101,22 @@ mod tests {
10881101
#[test]
10891102
fn test_ctime() {
10901103
os::setenv("TZ", "America/Los_Angeles");
1104+
tzset();
10911105

10921106
let time = { sec: 1234567890_i64, nsec: 54321_i32 };
10931107
let utc = at_utc(time);
10941108
let local = at(time);
10951109

1110+
#error("test_ctime: %? %?", utc.ctime(), local.ctime());
1111+
10961112
assert utc.ctime() == "Fri Feb 13 23:31:30 2009";
10971113
assert local.ctime() == "Fri Feb 13 15:31:30 2009";
10981114
}
10991115

11001116
#[test]
11011117
fn test_strftime() {
11021118
os::setenv("TZ", "America/Los_Angeles");
1119+
tzset();
11031120

11041121
let time = { sec: 1234567890_i64, nsec: 54321_i32 };
11051122
let utc = at_utc(time);

src/rt/rust_builtin.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,11 @@ struct tm* LOCALTIME(const time_t *clock, tm *result) {
529529
#define TIMEGM(result) timegm(result)
530530
#endif
531531

532+
extern "C" CDECL void
533+
rust_tzset() {
534+
TZSET();
535+
}
536+
532537
extern "C" CDECL void
533538
rust_gmtime(int64_t *sec, int32_t *nsec, rust_tm *timeptr) {
534539
tm tm;
@@ -541,7 +546,6 @@ rust_gmtime(int64_t *sec, int32_t *nsec, rust_tm *timeptr) {
541546
extern "C" CDECL void
542547
rust_localtime(int64_t *sec, int32_t *nsec, rust_tm *timeptr) {
543548
tm tm;
544-
TZSET();
545549
time_t s = *sec;
546550
LOCALTIME(&s, &tm);
547551

src/rt/rustrt.def.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ debug_abi_2
1212
get_port_id
1313
get_task_id
1414
get_time
15+
rust_tzset
1516
rust_gmtime
1617
rust_localtime
1718
rust_timegm

0 commit comments

Comments
 (0)