diff options
-rw-r--r-- | sysdeps/posix/time.c | 26 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/time.c | 22 | ||||
-rw-r--r-- | time/Versions | 1 | ||||
-rw-r--r-- | time/time.c | 13 |
4 files changed, 62 insertions, 0 deletions
diff --git a/sysdeps/posix/time.c b/sysdeps/posix/time.c index 6d0bb4bafc..1a3fd4e666 100644 --- a/sysdeps/posix/time.c +++ b/sysdeps/posix/time.c @@ -38,3 +38,29 @@ time (time_t *t) return result; } libc_hidden_def (time) + +/* 64-bit time version */ + +extern int __y2038_linux_support; + +__time64_t +__time_t64 (__time64_t *t) +{ + struct timeval tv32; + __time64_t result; + + if (__y2038_linux_support) + { + /* TODO: implement using 64-bit time syscall */ + } + + if (__gettimeofday (&tv32, (struct timezone *) NULL)) + result = (__time64_t) -1; + else + result = (__time64_t) tv32.tv_sec; + + if (t != NULL) + *t = result; + + return result; +} diff --git a/sysdeps/unix/sysv/linux/time.c b/sysdeps/unix/sysv/linux/time.c index 69116af059..b68c0b7800 100644 --- a/sysdeps/unix/sysv/linux/time.c +++ b/sysdeps/unix/sysv/linux/time.c @@ -34,6 +34,28 @@ time (time_t *t) } libc_hidden_def (time) +/* 64-BIT TIME VERSION */ + +extern int __y2038_linux_support; + +__time64_t +__time_t64 (__time64_t *t) +{ + INTERNAL_SYSCALL_DECL (err); + __time64_t res; + + if (__y2038_linux_support) + { + /* TODO: implement using 64-bit time syscall */ + } + + res = INTERNAL_SYSCALL (time, err, 1, NULL); + /* There cannot be any error. */ + if (t != NULL) + *t = res; + return res; +} + #else # include <sysdeps/posix/time.c> diff --git a/time/Versions b/time/Versions index e626dff8ec..e09465b8a1 100644 --- a/time/Versions +++ b/time/Versions @@ -84,5 +84,6 @@ libc { __sigtimedwait64; __futimes64; __lutimes64; + __time_t64; } } diff --git a/time/time.c b/time/time.c index 4996d26f13..2b296b7471 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 +__time_t64 (__time64_ *timer) +{ + __set_errno (ENOSYS); + + if (timer != NULL) + *timer = (__time64_t) -1; + return (__time64_t) -1; +} +libc_hidden_def (__time_t64) |