mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-26 04:31:03 +00:00
20aa581958
Keep these functions compatible with Gnulib while adding __time64_t support. The basic idea is to move private API declarations from include/time.h to time/mktime-internal.h, since the former file cannot easily be shared with Gnulib whereas the latter can. Also, do some other minor cleanup while in the neighborhood. * include/time.h: Include stdbool.h, time/mktime-internal.h. (__mktime_internal): Move this prototype to time/mktime-internal.h, since Gnulib needs it. (__localtime64_r, __gmtime64_r) [__TIMESIZE == 64]: Move these macros to time/mktime-internal.h, since Gnulib needs them. (__mktime64, __timegm64) [__TIMESIZE != 64]: New prototypes. (in_time_t_range): New static function. * posix/bits/types.h (__time64_t) [__TIMESIZE == 64 && !defined __LIBC]: Do not define as a macro in this case, so that portable code is less tempted to use __time64_t. * time/mktime-internal.h: Rewrite so that it does both glibc and Gnulib work. Include time.h if not _LIBC. (mktime_offset_t) [!_LIBC]: Define for gnulib. (__time64_t, __gmtime64_r, __localtime64_r, __mktime64, __timegm64) [!_LIBC || __TIMESIZE == 64]: New macros, mostly moved here from include/time.h. (__gmtime_r, __localtime_r, __mktime_internal) [!_LIBC]: New macros, taken from GNulib. (__mktime_internal): New prototype, moved here from include/time.h. * time/mktime.c (mktime_min, mktime_max, convert_time) (ranged_convert, __mktime_internal, __mktime64): * time/timegm.c (__timegm64): Use __time64_t, not time_t. * time/mktime.c: Stop worrying about whether time_t is floating-point. (__mktime64) [! (_LIBC && __TIMESIZE != 64)]: Rename from mktime. (mktime) [_LIBC && __TIMESIZE != 64]: New function. * time/timegm.c [!_LIBC]: Include libc-config.h, not config.h, for libc_hidden_def. Include errno.h. (__timegm64) [! (_LIBC && __TIMESIZE != 64)]: Rename from timegm. (timegm) [_LIBC && __TIMESIZE != 64]: New function. First cut at publicizing __time64_t
161 lines
4.5 KiB
C
161 lines
4.5 KiB
C
#ifndef _TIME_H
|
|
#include <time/time.h>
|
|
|
|
#ifndef _ISOMAC
|
|
# include <bits/types/locale_t.h>
|
|
# include <stdbool.h>
|
|
# include <time/mktime-internal.h>
|
|
|
|
extern __typeof (strftime_l) __strftime_l;
|
|
libc_hidden_proto (__strftime_l)
|
|
extern __typeof (strptime_l) __strptime_l;
|
|
|
|
libc_hidden_proto (time)
|
|
libc_hidden_proto (asctime)
|
|
libc_hidden_proto (mktime)
|
|
libc_hidden_proto (timelocal)
|
|
libc_hidden_proto (localtime)
|
|
libc_hidden_proto (strftime)
|
|
libc_hidden_proto (strptime)
|
|
|
|
extern __typeof (clock_getres) __clock_getres;
|
|
extern __typeof (clock_gettime) __clock_gettime;
|
|
libc_hidden_proto (__clock_gettime)
|
|
extern __typeof (clock_settime) __clock_settime;
|
|
extern __typeof (clock_nanosleep) __clock_nanosleep;
|
|
extern __typeof (clock_getcpuclockid) __clock_getcpuclockid;
|
|
|
|
/* Now define the internal interfaces. */
|
|
struct tm;
|
|
|
|
/* Defined in mktime.c. */
|
|
extern const unsigned short int __mon_yday[2][13] attribute_hidden;
|
|
|
|
/* Defined in localtime.c. */
|
|
extern struct tm _tmbuf attribute_hidden;
|
|
|
|
/* Defined in tzset.c. */
|
|
extern char *__tzstring (const char *string) attribute_hidden;
|
|
|
|
extern int __use_tzfile attribute_hidden;
|
|
|
|
extern void __tzfile_read (const char *file, size_t extra,
|
|
char **extrap) attribute_hidden;
|
|
extern void __tzfile_compute (__time64_t timer, int use_localtime,
|
|
long int *leap_correct, int *leap_hit,
|
|
struct tm *tp) attribute_hidden;
|
|
extern void __tzfile_default (const char *std, const char *dst,
|
|
int stdoff, int dstoff)
|
|
attribute_hidden;
|
|
extern void __tzset_parse_tz (const char *tz) attribute_hidden;
|
|
extern void __tz_compute (__time64_t timer, struct tm *tm, int use_localtime)
|
|
__THROW 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 __ctime64_r ctime_r
|
|
#else
|
|
extern char *__ctime64_r (const __time64_t *__restrict __timer,
|
|
char *__restrict __buf) __THROW;
|
|
libc_hidden_proto (__ctime64_r)
|
|
#endif
|
|
|
|
#if __TIMESIZE == 64
|
|
# define __localtime64 localtime
|
|
#else
|
|
extern struct tm *__localtime64 (const __time64_t *__timer);
|
|
libc_hidden_proto (__localtime64)
|
|
#endif
|
|
|
|
extern struct tm *__localtime_r (const time_t *__timer,
|
|
struct tm *__tp) attribute_hidden;
|
|
#if __TIMESIZE != 64
|
|
extern struct tm *__localtime64_r (const __time64_t *__timer,
|
|
struct tm *__tp);
|
|
libc_hidden_proto (__localtime64_r)
|
|
|
|
extern __time64_t __mktime64 (struct tm *__tp) __THROW;
|
|
libc_hidden_proto (__mktime64)
|
|
#endif
|
|
|
|
extern struct tm *__gmtime_r (const time_t *__restrict __timer,
|
|
struct tm *__restrict __tp);
|
|
libc_hidden_proto (__gmtime_r)
|
|
|
|
#if __TIMESIZE == 64
|
|
# define __gmtime64 gmtime
|
|
#else
|
|
extern struct tm *__gmtime64 (const __time64_t *__timer);
|
|
libc_hidden_proto (__gmtime64)
|
|
|
|
extern struct tm *__gmtime64_r (const __time64_t *__restrict __timer,
|
|
struct tm *__restrict __tp);
|
|
libc_hidden_proto (__gmtime64_r)
|
|
|
|
extern __time64_t __timegm64 (struct tm *__tp) __THROW;
|
|
libc_hidden_proto (__timegm64)
|
|
#endif
|
|
|
|
/* Compute the `struct tm' representation of T,
|
|
offset OFFSET seconds east of UTC,
|
|
and store year, yday, mon, mday, wday, hour, min, sec into *TP.
|
|
Return nonzero if successful. */
|
|
extern int __offtime (__time64_t __timer,
|
|
long int __offset,
|
|
struct tm *__tp) attribute_hidden;
|
|
|
|
extern char *__asctime_r (const struct tm *__tp, char *__buf)
|
|
attribute_hidden;
|
|
extern void __tzset (void) attribute_hidden;
|
|
|
|
/* Prototype for the internal function to get information based on TZ. */
|
|
extern struct tm *__tz_convert (__time64_t timer, int use_localtime,
|
|
struct tm *tp) attribute_hidden;
|
|
|
|
extern int __nanosleep (const struct timespec *__requested_time,
|
|
struct timespec *__remaining);
|
|
hidden_proto (__nanosleep)
|
|
extern int __getdate_r (const char *__string, struct tm *__resbufp)
|
|
attribute_hidden;
|
|
|
|
|
|
/* Determine CLK_TCK value. */
|
|
extern int __getclktck (void) attribute_hidden;
|
|
|
|
|
|
/* strptime support. */
|
|
extern char * __strptime_internal (const char *rp, const char *fmt,
|
|
struct tm *tm, void *statep,
|
|
locale_t locparam) attribute_hidden;
|
|
|
|
#if __TIMESIZE == 64
|
|
# define __difftime64 __difftime
|
|
#else
|
|
extern double __difftime64 (__time64_t time1, __time64_t time0);
|
|
libc_hidden_proto (__difftime64)
|
|
#endif
|
|
|
|
extern double __difftime (time_t time1, time_t time0);
|
|
|
|
|
|
/* Use in the clock_* functions. Size of the field representing the
|
|
actual clock ID. */
|
|
#define CLOCK_IDFIELD_SIZE 3
|
|
|
|
/* Check whether T fits in time_t. */
|
|
static inline bool
|
|
in_time_t_range (__time64_t t)
|
|
{
|
|
time_t s = t;
|
|
return s == t;
|
|
}
|
|
|
|
#endif
|
|
#endif
|