mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 01:33:36 +08:00
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>
This commit is contained in:
parent
30a0b167d3
commit
5d8aa97da2
1
include/bits/types/struct_timeb.h
Normal file
1
include/bits/types/struct_timeb.h
Normal file
@ -0,0 +1 @@
|
||||
#include <time/bits/types/struct_timeb.h>
|
16
include/struct___timeb64.h
Normal file
16
include/struct___timeb64.h
Normal file
@ -0,0 +1,16 @@
|
||||
#ifndef _STRUCT_TIMEB64_H
|
||||
#define _STRUCT_TIMEB64_H
|
||||
|
||||
#if __TIMESIZE == 64
|
||||
# define __timeb64 timeb
|
||||
#else
|
||||
struct __timeb64
|
||||
{
|
||||
__time64_t time;
|
||||
unsigned short int millitm;
|
||||
short int timezone;
|
||||
short int dstflag;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif /* _STRUCT_TIMEB64_H */
|
@ -1 +1,13 @@
|
||||
#include <time/sys/timeb.h>
|
||||
|
||||
#ifndef _ISOMAC
|
||||
# if __TIMESIZE == 64
|
||||
# define __timeb64 timeb
|
||||
# define __ftime64 ftime
|
||||
# else
|
||||
# include <struct___timeb64.h>
|
||||
|
||||
extern int __ftime64 (struct __timeb64 *) __nonnull ((1));
|
||||
libc_hidden_proto (__ftime64);
|
||||
# endif
|
||||
#endif
|
||||
|
@ -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 \
|
||||
|
15
time/bits/types/struct_timeb.h
Normal file
15
time/bits/types/struct_timeb.h
Normal file
@ -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
|
28
time/ftime.c
28
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
|
||||
|
@ -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. */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user