From 8d77bce185d04c531bd9bf34d38e5cbbe644d3a3 Mon Sep 17 00:00:00 2001
From: Elliott Hughes <enh@google.com>
Date: Tue, 22 Apr 2014 13:55:58 -0700
Subject: [PATCH] LP64 shouldn't include the non-standard <time64.h> cruft.

This patch includes just enough to keep external/chromium_org building
until they switch 64-bit Android over to using the regular non-Android code.

Change-Id: Iecaf274efa46ae18a42d5e3439c5aa4f909177c1
---
 libc/Android.mk        |  1 -
 libc/arch-arm/arm.mk   |  1 +
 libc/arch-mips/mips.mk |  1 +
 libc/arch-x86/x86.mk   |  1 +
 libc/bionic/time64.c   |  6 +++++-
 libc/include/time64.h  | 42 +++++++++++++++++++++++++++---------------
 6 files changed, 35 insertions(+), 17 deletions(-)

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 <sys/cdefs.h>
 #include <time.h>
 #include <stdint.h>
 
 __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 */