diff --git a/libc/Android.mk b/libc/Android.mk index be40da676..e183fb014 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -72,7 +72,6 @@ libc_common_src_files := \ bionic/strntoimax.c \ bionic/strntoumax.c \ bionic/system_properties_compat.c \ - bionic/time64.c \ bionic/unlockpt.c \ stdio/findfp.c \ stdio/snprintf.c\ diff --git a/libc/arch-arm/arm.mk b/libc/arch-arm/arm.mk index cbc5fa7b2..2dbcb568a 100644 --- a/libc/arch-arm/arm.mk +++ b/libc/arch-arm/arm.mk @@ -4,6 +4,7 @@ libc_common_src_files_arm := \ bionic/legacy_32_bit_support.cpp \ bionic/ndk_cruft.cpp \ + bionic/time64.c \ # These are shared by all the 32-bit targets, but not the 64-bit ones. libc_bionic_src_files_arm := \ diff --git a/libc/arch-mips/mips.mk b/libc/arch-mips/mips.mk index 1af4a651b..53fa22359 100644 --- a/libc/arch-mips/mips.mk +++ b/libc/arch-mips/mips.mk @@ -4,6 +4,7 @@ libc_common_src_files_mips := \ bionic/legacy_32_bit_support.cpp \ bionic/ndk_cruft.cpp \ + bionic/time64.c \ # These are shared by all the 32-bit targets, but not the 64-bit ones. libc_bionic_src_files_mips += \ diff --git a/libc/arch-x86/x86.mk b/libc/arch-x86/x86.mk index 846bb4262..a1d55f0e3 100644 --- a/libc/arch-x86/x86.mk +++ b/libc/arch-x86/x86.mk @@ -4,6 +4,7 @@ libc_common_src_files_x86 := \ bionic/legacy_32_bit_support.cpp \ bionic/ndk_cruft.cpp \ + bionic/time64.c \ # Fortify implementations of libc functions. libc_common_src_files_x86 += \ diff --git a/libc/bionic/time64.c b/libc/bionic/time64.c index 9aa5d4f2b..7163b3494 100644 --- a/libc/bionic/time64.c +++ b/libc/bionic/time64.c @@ -28,6 +28,10 @@ THE SOFTWARE. /* See http://code.google.com/p/y2038 for this code's origin */ +#if defined(__LP64__) +#error This cruft should be LP32 only! +#endif + /* Programmers who have available to them 64-bit time values as a 'long @@ -268,7 +272,7 @@ static int check_tm(struct TM *tm) assert(tm->tm_wday >= 0); assert(tm->tm_wday <= 6); - + assert(tm->tm_yday >= 0); assert(tm->tm_yday <= length_of_year[IS_LEAP(tm->tm_year)]); diff --git a/libc/include/time64.h b/libc/include/time64.h index 7ec05af65..b4f128053 100644 --- a/libc/include/time64.h +++ b/libc/include/time64.h @@ -31,29 +31,41 @@ Modified for Bionic by the Android Open Source Project #ifndef TIME64_H #define TIME64_H +#if defined(__LP64__) + +/* TODO: remove this when external/chromium_org is fixed. */ +#define time64_t time_t +#define gmtime64_r gmtime_r +#define localtime64_r localtime_r +#define mktime64 mktime +#define timegm64 timegm + +#else + +/* Legacy cruft for LP32 where time_t was 32-bit. */ + #include #include #include __BEGIN_DECLS -typedef int64_t time64_t; +typedef int64_t time64_t; -struct tm *gmtime64_r (const time64_t *, struct tm *); -struct tm *localtime64_r (const time64_t *, struct tm *); -struct tm *gmtime64 (const time64_t *); -struct tm *localtime64 (const time64_t *); - -char *asctime64 (const struct tm *); -char *asctime64_r (const struct tm *, char *); - -char *ctime64 (const time64_t*); -char *ctime64_r (const time64_t*, char*); - -time64_t timegm64 (const struct tm *); -time64_t mktime64 (const struct tm *); -time64_t timelocal64 (const struct tm *); +char* asctime64(const struct tm*); +char* asctime64_r(const struct tm*, char*); +char* ctime64(const time64_t*); +char* ctime64_r(const time64_t*, char*); +struct tm* gmtime64(const time64_t*); +struct tm* gmtime64_r(const time64_t*, struct tm*); +struct tm* localtime64(const time64_t*); +struct tm* localtime64_r(const time64_t*, struct tm*); +time64_t mktime64(const struct tm*); +time64_t timegm64(const struct tm*); +time64_t timelocal64(const struct tm*); __END_DECLS +#endif + #endif /* TIME64_H */