Buildfix for missing functions on Android/win32.

This commit is contained in:
Unknown W. Brackets 2013-01-25 08:32:30 -08:00
parent f102908f5d
commit 1cd5421bdc

View File

@ -49,7 +49,7 @@ u64 __RtcGetCurrentTick()
return cyclesToUs(CoreTiming::GetTicks()) + rtcMagicOffset;
}
#ifdef _WIN32
#if defined(_WIN32)
#define FILETIME_FROM_UNIX_EPOCH_US 11644473600000000ULL
void gettimeofday(timeval *tv, void *ignore)
@ -64,6 +64,40 @@ void gettimeofday(timeval *tv, void *ignore)
tv->tv_sec = long(from_1970_us / 1000000UL);
tv->tv_usec = from_1970_us % 1000000UL;
}
time_t rtc_timegm(struct tm *tm)
{
struct tm modified;
memcpy(&modified, tm, sizeof(modified));
return _mkgmtime(&modified);
}
// TODO: Who has timegm?
#elif defined(__GLIBC__) && !defined(ANDROID)
#define rtc_timegm timegm
#else
time_t rtc_timegm(struct tm *tm)
{
time_t ret;
char *tz;
std::string tzcopy;
tz = getenv("TZ");
if (tz)
tzcopy = tz;
setenv("TZ", "", 1);
tzset();
ret = mktime(tm);
if (tz)
setenv("TZ", tzcopy.c_str(), 1);
else
unsetenv("TZ");
tzset();
return ret;
}
#endif
void __RtcTmToPspTime(ScePspDateTime &t, tm *val)
@ -98,7 +132,7 @@ void __RtcTicksToPspTime(ScePspDateTime &t, u64 ticks)
// Each 400 year are equal
// 400 year is 20871 weeks
u64 ticks400Y = (u64)20871 * 7 * 24 * 3600 * 1000000ULL;
numYearAdd = (rtcMagicOffset - ticks) / ticks400Y + 1;
numYearAdd = (int) ((rtcMagicOffset - ticks) / ticks400Y + 1);
ticks += ticks400Y * numYearAdd;
}
@ -129,7 +163,7 @@ u64 __RtcPspTimeToTicks(ScePspDateTime &pt)
local.tm_sec = pt.second;
local.tm_isdst = 0;
time_t seconds = timegm(&local);
time_t seconds = rtc_timegm(&local);
u64 result = rtcMagicOffset + (u64) seconds * 1000000ULL;
result += pt.microsecond;
return result;
@ -180,7 +214,7 @@ u32 sceRtcGetCurrentClock(u32 pspTimePtr, int tz)
utc->tm_isdst = -1;
utc->tm_min += tz;
timegm(utc); // Return gmt time with timezone offset.
rtc_timegm(utc); // Return gmt time with timezone offset.
ScePspDateTime ret;
__RtcTmToPspTime(ret, utc);
@ -329,9 +363,13 @@ int sceRtcConvertLocalTimeToUTC(u32 tickLocalPtr,u32 tickUTCPtr)
{
u64 srcTick = Memory::Read_U64(tickLocalPtr);
// TODO : Let the user select his timezone / daylight saving instead of taking system param ?
#ifdef __GLIBC__
time_t timezone = 0;
tm *time = localtime(&timezone);
srcTick -= time->tm_gmtoff*1000000ULL;
#else
srcTick -= -timezone * 1000000ULL;
#endif
Memory::Write_U64(srcTick, tickUTCPtr);
}
else
@ -348,9 +386,13 @@ int sceRtcConvertUtcToLocalTime(u32 tickUTCPtr,u32 tickLocalPtr)
{
u64 srcTick = Memory::Read_U64(tickUTCPtr);
// TODO : Let the user select his timezone / daylight saving instead of taking system param ?
#ifdef __GLIBC__
time_t timezone = 0;
tm *time = localtime(&timezone);
srcTick += time->tm_gmtoff*1000000ULL;
#else
srcTick += -timezone * 1000000ULL;
#endif
Memory::Write_U64(srcTick, tickLocalPtr);
}
else