[[PATCH,RFC,2] 38/63] Y2038: add function __time64

Message ID 20180418201819.15952-39-albert.aribaud@3adev.fr
State New, archived
Headers

Commit Message

Albert ARIBAUD April 18, 2018, 8:17 p.m. UTC
  This provides a generic Posix implementation based on calling
__gettimeofday64().
---
 sysdeps/posix/time64.c | 43 +++++++++++++++++++++++++++++++++++++++++++
 time/Makefile          |  1 +
 time/Versions          |  1 +
 time/time.c            | 13 +++++++++++++
 4 files changed, 58 insertions(+)
 create mode 100644 sysdeps/posix/time64.c
  

Patch

diff --git a/sysdeps/posix/time64.c b/sysdeps/posix/time64.c
new file mode 100644
index 0000000000..4a58228d8a
--- /dev/null
+++ b/sysdeps/posix/time64.c
@@ -0,0 +1,43 @@ 
+/* Get the 64-bit current time
+ * 
+   Copyright (C) 1991-2018 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stddef.h>		/* For NULL.  */
+#include <time.h>
+#include <sys/time.h>
+
+
+/* Return the current time as a `time_t' and also put it in *T if T is
+   not NULL.  Time is represented as seconds from Jan 1 00:00:00 1970.  */
+
+__time64_t
+__time64 (__time64_t *t)
+{
+  struct __timeval64 tv;
+  __time64_t result;
+
+  if (__gettimeofday64 (&tv, (struct timezone *) NULL))
+    result = (__time64_t) -1;
+  else
+    result = tv.tv_sec;
+
+  if (t != NULL)
+    *t = result;
+
+  return result;
+}
diff --git a/time/Makefile b/time/Makefile
index 7657debc72..23da9805ef 100644
--- a/time/Makefile
+++ b/time/Makefile
@@ -31,6 +31,7 @@  headers := time.h sys/time.h sys/timeb.h bits/time.h			\
 
 routines := offtime asctime clock ctime ctime_r difftime \
 	    gmtime localtime mktime time		 \
+	    time64					 \
 	    gettimeofday settimeofday adjtime tzset	 \
 	    gettimeofday64 settimeofday64		 \
 	    tzfile getitimer setitimer			 \
diff --git a/time/Versions b/time/Versions
index bbb6403f3c..9baff82719 100644
--- a/time/Versions
+++ b/time/Versions
@@ -86,5 +86,6 @@  libc {
     __lutimes64;
     __gettimeofday64;
     __settimeofday64;
+    __time64;
   }
 }
diff --git a/time/time.c b/time/time.c
index 4996d26f13..9703c72464 100644
--- a/time/time.c
+++ b/time/time.c
@@ -31,3 +31,16 @@  time (time_t *timer)
 libc_hidden_def (time)
 
 stub_warning (time)
+
+/* 64-bit time version */
+
+__time64_t
+__time64 (__time64_ *timer)
+{
+  __set_errno (ENOSYS);
+
+  if (timer != NULL)
+    *timer = (__time64_t) -1;
+  return (__time64_t) -1;
+}
+libc_hidden_def (__time64)