[v2,5/5] Y2038: add function __ctime64_r

Message ID 20181218140955.7910-6-albert.aribaud@3adev.fr
State New, archived
Headers

Commit Message

Albert ARIBAUD Dec. 18, 2018, 2:09 p.m. UTC
  Tested with 'make check' on x86_64-linux-gnu and i686-linux.gnu.

	* include/time.h
	(__ctime64_r): Add.
	* time/ctime_r.c
	(__ctime64_r): Add.
	[__TIMESIZE != 64] (__ctime_r): Turn into a wrapper.
---
 include/time.h |  8 ++++++++
 time/ctime_r.c | 19 +++++++++++++++++--
 2 files changed, 25 insertions(+), 2 deletions(-)
  

Comments

Joseph Myers Dec. 18, 2018, 5:32 p.m. UTC | #1
On Tue, 18 Dec 2018, Albert ARIBAUD (3ADEV) wrote:

> +libc_hidden_proto(__ctime64_r);

> +libc_hidden_def(__ctime64_r);

Missing spaces.  OK with those fixed.
  

Patch

diff --git a/include/time.h b/include/time.h
index 1f7d175ca6..7c34485f5a 100644
--- a/include/time.h
+++ b/include/time.h
@@ -64,6 +64,14 @@  extern char *__ctime64 (const __time64_t *__timer) __THROW;
 libc_hidden_proto(__ctime64);
 #endif
 
+#if __TIMESIZE == 64
+# define __ctime64_r ctime_r
+#else
+extern char *__ctime64_r (const __time64_t *__restrict __timer,
+		          char *__restrict __buf) __THROW;
+libc_hidden_proto(__ctime64_r);
+#endif
+
 #if __TIMESIZE == 64
 # define __localtime64 localtime
 #else
diff --git a/time/ctime_r.c b/time/ctime_r.c
index c111146d76..7795c3fcca 100644
--- a/time/ctime_r.c
+++ b/time/ctime_r.c
@@ -22,8 +22,23 @@ 
 /* Return a string as returned by asctime which is the representation
    of *T in that form.  Reentrant version.  */
 char *
-ctime_r (const time_t *t, char *buf)
+__ctime64_r (const __time64_t *t, char *buf)
 {
   struct tm tm;
-  return __asctime_r (__localtime_r (t, &tm), buf);
+  return __asctime_r (__localtime64_r (t, &tm), buf);
+}
+
+/* Provide a 32-bit variant if needed.  */
+
+#if __TIMESIZE != 64
+
+libc_hidden_def(__ctime64_r);
+
+char *
+ctime_r (const time_t *t, char *buf)
+{
+  __time64_t t64 = *t;
+  return __ctime64_r (&t64, buf);
 }
+
+#endif