Skip to content

rt: Remove libtime wrappers #21391

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 22, 2015
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
138 changes: 0 additions & 138 deletions src/rt/rust_builtin.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,29 +41,6 @@
//include valgrind.h after stdint.h so that uintptr_t is defined for msys2 w64
#include "valgrind/valgrind.h"

#ifdef __ANDROID__
time_t
timegm(struct tm *tm)
{
time_t ret;
char *tz;

tz = getenv("TZ");
if (tz)
tz = strdup(tz);
setenv("TZ", "", 1);
tzset();
ret = mktime(tm);
if (tz) {
setenv("TZ", tz, 1);
free(tz);
} else
unsetenv("TZ");
tzset();
return ret;
}
#endif

#ifdef __APPLE__
#if (TARGET_OS_IPHONE)
extern char **environ;
Expand Down Expand Up @@ -100,121 +77,6 @@ rust_list_dir_val(struct dirent* entry_ptr) {
}
#endif

typedef struct {
int32_t tm_sec;
int32_t tm_min;
int32_t tm_hour;
int32_t tm_mday;
int32_t tm_mon;
int32_t tm_year;
int32_t tm_wday;
int32_t tm_yday;
int32_t tm_isdst;
int32_t tm_gmtoff;
int32_t tm_nsec;
} rust_tm;

void rust_tm_to_tm(rust_tm* in_tm, struct tm* out_tm) {
memset(out_tm, 0, sizeof(struct tm));
out_tm->tm_sec = in_tm->tm_sec;
out_tm->tm_min = in_tm->tm_min;
out_tm->tm_hour = in_tm->tm_hour;
out_tm->tm_mday = in_tm->tm_mday;
out_tm->tm_mon = in_tm->tm_mon;
out_tm->tm_year = in_tm->tm_year;
out_tm->tm_wday = in_tm->tm_wday;
out_tm->tm_yday = in_tm->tm_yday;
out_tm->tm_isdst = in_tm->tm_isdst;
}

void tm_to_rust_tm(struct tm* in_tm,
rust_tm* out_tm,
int32_t gmtoff,
int32_t nsec) {
out_tm->tm_sec = in_tm->tm_sec;
out_tm->tm_min = in_tm->tm_min;
out_tm->tm_hour = in_tm->tm_hour;
out_tm->tm_mday = in_tm->tm_mday;
out_tm->tm_mon = in_tm->tm_mon;
out_tm->tm_year = in_tm->tm_year;
out_tm->tm_wday = in_tm->tm_wday;
out_tm->tm_yday = in_tm->tm_yday;
out_tm->tm_isdst = in_tm->tm_isdst;
out_tm->tm_gmtoff = gmtoff;
out_tm->tm_nsec = nsec;
}

#if defined(__WIN32__)
#define TZSET() _tzset()
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
#define GMTIME(clock, result) gmtime_s((result), (clock))
#define LOCALTIME(clock, result) localtime_s((result), (clock))
#define TIMEGM(result) _mkgmtime64(result)
#else
struct tm* GMTIME(const time_t *clock, struct tm *result) {
struct tm* t = gmtime(clock);
if (t == NULL || result == NULL) { return NULL; }
*result = *t;
return result;
}
struct tm* LOCALTIME(const time_t *clock, struct tm *result) {
struct tm* t = localtime(clock);
if (t == NULL || result == NULL) { return NULL; }
*result = *t;
return result;
}
#define TIMEGM(result) mktime((result)) - _timezone
#endif
#else
#define TZSET() tzset()
#define GMTIME(clock, result) gmtime_r((clock), (result))
#define LOCALTIME(clock, result) localtime_r((clock), (result))
#define TIMEGM(result) timegm(result)
#endif

void
rust_tzset() {
TZSET();
}

void
rust_gmtime(int64_t sec, int32_t nsec, rust_tm *timeptr) {
struct tm tm;
time_t s = sec;
GMTIME(&s, &tm);

tm_to_rust_tm(&tm, timeptr, 0, nsec);
}

void
rust_localtime(int64_t sec, int32_t nsec, rust_tm *timeptr) {
struct tm tm;
time_t s = sec;
LOCALTIME(&s, &tm);

#if defined(__WIN32__)
int32_t gmtoff = -timezone;
#else
int32_t gmtoff = tm.tm_gmtoff;
#endif

tm_to_rust_tm(&tm, timeptr, gmtoff, nsec);
}

int64_t
rust_timegm(rust_tm* timeptr) {
struct tm t;
rust_tm_to_tm(timeptr, &t);
return TIMEGM(&t);
}

int64_t
rust_mktime(rust_tm* timeptr) {
struct tm t;
rust_tm_to_tm(timeptr, &t);
return mktime(&t);
}

#ifndef _WIN32

DIR*
Expand Down