[v2,4/5] Y2038: add function __ctime64

Message ID 20181218140955.7910-5-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): Add.
	* time/gmtime.c
	(__ctime64): Add.
	[__TIMESIZE != 64] (ctime): Turn into a wrapper.
---
 include/time.h |  7 +++++++
 time/ctime.c   | 19 +++++++++++++++++--
 2 files changed, 24 insertions(+), 2 deletions(-)
  

Comments

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

> +libc_hidden_proto(__ctime64);

Missing space before '('.

> +libc_hidden_def(__ctime64);

Likewise.

This patch is OK with those missing spaces fixed.
  
Florian Weimer Dec. 18, 2018, 5:42 p.m. UTC | #2
* Joseph Myers:

> On Tue, 18 Dec 2018, Albert ARIBAUD (3ADEV) wrote:
>
>> +libc_hidden_proto(__ctime64);
>
> Missing space before '('.
>
>> +libc_hidden_def(__ctime64);
>
> Likewise.

Also superfluous semicolon.

Thanks,
Florian
  
Albert ARIBAUD Dec. 18, 2018, 7:23 p.m. UTC | #3
Hi Florian,

On Tue, 18 Dec 2018 18:42:31 +0100, Florian Weimer <fweimer@redhat.com>
wrote :

> * Joseph Myers:
> 
> > On Tue, 18 Dec 2018, Albert ARIBAUD (3ADEV) wrote:
> >  
> >> +libc_hidden_proto(__ctime64);  
> >
> > Missing space before '('.
> >  
> >> +libc_hidden_def(__ctime64);  
> >
> > Likewise.  
> 
> Also superfluous semicolon.

Will be fixed (on __ctime64_r also) before applying, thanks.

> Thanks,
> Florian

Cordialement,
Albert ARIBAUD
3ADEV
  

Patch

diff --git a/include/time.h b/include/time.h
index 5a37c0ff79..1f7d175ca6 100644
--- a/include/time.h
+++ b/include/time.h
@@ -57,6 +57,13 @@  extern time_t __mktime_internal (struct tm *__tp,
 						       struct tm *),
 				 long int *__offset) attribute_hidden;
 
+#if __TIMESIZE == 64
+# define __ctime64 ctime
+#else
+extern char *__ctime64 (const __time64_t *__timer) __THROW;
+libc_hidden_proto(__ctime64);
+#endif
+
 #if __TIMESIZE == 64
 # define __localtime64 localtime
 #else
diff --git a/time/ctime.c b/time/ctime.c
index 1222614f29..43a39e3f3b 100644
--- a/time/ctime.c
+++ b/time/ctime.c
@@ -20,9 +20,24 @@ 
 /* Return a string as returned by asctime which
    is the representation of *T in that form.  */
 char *
-ctime (const time_t *t)
+__ctime64 (const __time64_t *t)
 {
   /* The C Standard says ctime (t) is equivalent to asctime (localtime (t)).
      In particular, ctime and asctime must yield the same pointer.  */
-  return asctime (localtime (t));
+  return asctime (__localtime64 (t));
+}
+
+/* Provide a 32-bit variant if needed.  */
+
+#if __TIMESIZE != 64
+
+libc_hidden_def(__ctime64);
+
+char *
+ctime (const time_t *t)
+{
+  __time64_t t64 = *t;
+  return __ctime64 (&t64);
 }
+
+#endif