aboutsummaryrefslogtreecommitdiff
path: root/time
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2020-10-19 11:51:48 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2020-10-27 09:54:50 -0300
commit5d8aa97da2332a818579bbb24880f9d44715448a (patch)
tree649294cdab8924f0905bc9bdc6c03a24627582b9 /time
parent30a0b167d347dd80807d167ee85bf58264fb8b76 (diff)
downloadglibc-5d8aa97da2332a818579bbb24880f9d44715448a.zip
glibc-5d8aa97da2332a818579bbb24880f9d44715448a.tar.gz
glibc-5d8aa97da2332a818579bbb24880f9d44715448a.tar.bz2
time: Add 64-bit time_t support for ftime
It basically calls the 64-bit __clock_gettime64 and adds the overflow check. Checked on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Lukasz Majewski <lukma@denx.de>
Diffstat (limited to 'time')
-rw-r--r--time/Makefile2
-rw-r--r--time/bits/types/struct_timeb.h15
-rw-r--r--time/ftime.c28
-rw-r--r--time/sys/timeb.h12
4 files changed, 41 insertions, 16 deletions
diff --git a/time/Makefile b/time/Makefile
index a4fb13d..26aa835 100644
--- a/time/Makefile
+++ b/time/Makefile
@@ -27,7 +27,7 @@ headers := time.h sys/time.h sys/timeb.h bits/time.h \
bits/types/struct_itimerspec.h \
bits/types/struct_timespec.h bits/types/struct_timeval.h \
bits/types/struct_tm.h bits/types/timer_t.h \
- bits/types/time_t.h
+ bits/types/time_t.h bits/types/struct_timeb.h
routines := offtime asctime clock ctime ctime_r difftime \
gmtime localtime mktime time \
diff --git a/time/bits/types/struct_timeb.h b/time/bits/types/struct_timeb.h
new file mode 100644
index 0000000..1fe60c7
--- /dev/null
+++ b/time/bits/types/struct_timeb.h
@@ -0,0 +1,15 @@
+#ifndef __timeb_defined
+#define __timeb_defined 1
+
+#include <bits/types/time_t.h>
+
+/* Structure returned by the 'ftime' function. */
+struct timeb
+ {
+ time_t time; /* Seconds since epoch, as from 'time'. */
+ unsigned short int millitm; /* Additional milliseconds. */
+ short int timezone; /* Minutes west of GMT. */
+ short int dstflag; /* Nonzero if Daylight Savings Time used. */
+ };
+
+#endif
diff --git a/time/ftime.c b/time/ftime.c
index 70a2590..91ba100 100644
--- a/time/ftime.c
+++ b/time/ftime.c
@@ -18,13 +18,13 @@
#include <features.h>
#include <sys/timeb.h>
-#include <time.h>
+#include <errno.h>
int
-ftime (struct timeb *timebuf)
+__ftime64 (struct __timeb64 *timebuf)
{
- struct timespec ts;
- __clock_gettime (CLOCK_REALTIME, &ts);
+ struct __timespec64 ts;
+ __clock_gettime64 (CLOCK_REALTIME, &ts);
timebuf->time = ts.tv_sec;
timebuf->millitm = ts.tv_nsec / 1000000;
@@ -32,3 +32,23 @@ ftime (struct timeb *timebuf)
timebuf->dstflag = 0;
return 0;
}
+#if __TIMESIZE != 64
+libc_hidden_def (__ftime64)
+
+int
+ftime (struct timeb *timebuf)
+{
+ struct __timeb64 tb64;
+ __ftime64 (&tb64);
+ if (! in_time_t_range (tb64.time))
+ {
+ __set_errno (EOVERFLOW);
+ return -1;
+ }
+ timebuf->time = tb64.time;
+ timebuf->millitm = tb64.millitm;
+ timebuf->timezone = tb64.timezone;
+ timebuf->dstflag = tb64.dstflag;
+ return 0;
+}
+#endif
diff --git a/time/sys/timeb.h b/time/sys/timeb.h
index d6cdf29..bbad4eb 100644
--- a/time/sys/timeb.h
+++ b/time/sys/timeb.h
@@ -20,19 +20,9 @@
#include <features.h>
-#include <bits/types/time_t.h>
-
__BEGIN_DECLS
-/* Structure returned by the `ftime' function. */
-
-struct timeb
- {
- time_t time; /* Seconds since epoch, as from `time'. */
- unsigned short int millitm; /* Additional milliseconds. */
- short int timezone; /* Minutes west of GMT. */
- short int dstflag; /* Nonzero if Daylight Savings Time used. */
- };
+# include <bits/types/struct_timeb.h>
/* Fill in TIMEBUF with information about the current time. */