X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/3d9156a7a519a5e3aa1b92e9d9d4b991f1aed7ff..HEAD:/include/time.h diff --git a/include/time.h b/include/time.h index aaff63b..100945b 100644 --- a/include/time.h +++ b/include/time.h @@ -64,33 +64,14 @@ #define _TIME_H_ #include <_types.h> - -#ifndef NULL -#define NULL __DARWIN_NULL -#endif /* ! NULL */ - -#ifndef _CLOCK_T -#define _CLOCK_T -typedef __darwin_clock_t clock_t; -#endif - -#ifndef _SIZE_T -#define _SIZE_T -typedef __darwin_size_t size_t; -#endif - -#ifndef _TIME_T -#define _TIME_T -typedef __darwin_time_t time_t; -#endif - -#ifndef _TIMESPEC -#define _TIMESPEC -struct timespec { - time_t tv_sec; /* seconds */ - long tv_nsec; /* and nanoseconds */ -}; -#endif +#include +#include +#ifndef UNIFDEF_DRIVERKIT +#include +#include +#include +#include +#include struct tm { int tm_sec; /* seconds after the minute [0-60] */ @@ -102,15 +83,17 @@ struct tm { int tm_wday; /* days since Sunday [0-6] */ int tm_yday; /* days since January 1 [0-365] */ int tm_isdst; /* Daylight Savings Time flag */ - long tm_gmtoff; /* offset from CUT in seconds */ + long tm_gmtoff; /* offset from UTC in seconds */ char *tm_zone; /* timezone abbreviation */ }; +#if __DARWIN_UNIX03 +#define CLOCKS_PER_SEC 1000000 /* [XSI] */ +#else /* !__DARWIN_UNIX03 */ #include /* Include file containing CLK_TCK. */ #define CLOCKS_PER_SEC (__DARWIN_CLK_TCK) - -#include +#endif /* __DARWIN_UNIX03 */ #ifndef _ANSI_SOURCE extern char *tzname[]; @@ -118,32 +101,76 @@ extern char *tzname[]; extern int getdate_err; #if __DARWIN_UNIX03 +//Begin-Libc +#ifndef LIBC_ALIAS_TIMEZONE +//End-Libc extern long timezone __DARWIN_ALIAS(timezone); +//Begin-Libc +#else /* LIBC_ALIAS_TIMEZONE */ +extern long timezone LIBC_ALIAS(timezone); +#endif /* !LIBC_ALIAS_TIMEZONE */ +//End-Libc #endif /* __DARWIN_UNIX03 */ extern int daylight; +#endif /* UNIFDEF_DRIVERKIT */ __BEGIN_DECLS +#ifndef UNIFDEF_DRIVERKIT char *asctime(const struct tm *); -clock_t clock(void); +//Begin-Libc +#ifndef LIBC_ALIAS_CLOCK +//End-Libc +clock_t clock(void) __DARWIN_ALIAS(clock); +//Begin-Libc +#else /* LIBC_ALIAS_CLOCK */ +clock_t clock(void) LIBC_ALIAS(clock); +#endif /* !LIBC_ALIAS_CLOCK */ +//End-Libc char *ctime(const time_t *); double difftime(time_t, time_t); struct tm *getdate(const char *); struct tm *gmtime(const time_t *); struct tm *localtime(const time_t *); -time_t mktime(struct tm *); +//Begin-Libc +#ifndef LIBC_ALIAS_MKTIME +//End-Libc +time_t mktime(struct tm *) __DARWIN_ALIAS(mktime); +//Begin-Libc +#else /* LIBC_ALIAS_MKTIME */ +time_t mktime(struct tm *) LIBC_ALIAS(mktime); +#endif /* !LIBC_ALIAS_MKTIME */ +//End-Libc +//Begin-Libc +#ifndef LIBC_ALIAS_STRFTIME +//End-Libc size_t strftime(char * __restrict, size_t, const char * __restrict, const struct tm * __restrict) __DARWIN_ALIAS(strftime); -char *strptime(const char * __restrict, const char * __restrict, struct tm * __restrict); +//Begin-Libc +#else /* LIBC_ALIAS_STRFTIME */ +size_t strftime(char * __restrict, size_t, const char * __restrict, const struct tm * __restrict) LIBC_ALIAS(strftime); +#endif /* !LIBC_ALIAS_STRFTIME */ +//End-Libc +//Begin-Libc +#ifndef LIBC_ALIAS_STRPTIME +//End-Libc +char *strptime(const char * __restrict, const char * __restrict, struct tm * __restrict) __DARWIN_ALIAS(strptime); +//Begin-Libc +#else /* LIBC_ALIAS_STRPTIME */ +char *strptime(const char * __restrict, const char * __restrict, struct tm * __restrict) LIBC_ALIAS(strptime); +#endif /* !LIBC_ALIAS_STRPTIME */ +//End-Libc time_t time(time_t *); #ifndef _ANSI_SOURCE void tzset(void); #endif /* not ANSI */ -#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) -char *asctime_r(const struct tm *, char *); +/* [TSF] Thread safe functions */ +char *asctime_r(const struct tm * __restrict, char * __restrict); char *ctime_r(const time_t *, char *); -struct tm *gmtime_r(const time_t *, struct tm *); -struct tm *localtime_r(const time_t *, struct tm *); +struct tm *gmtime_r(const time_t * __restrict, struct tm * __restrict); +struct tm *localtime_r(const time_t * __restrict, struct tm * __restrict); + +#if !defined(_ANSI_SOURCE) && (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)) time_t posix2time(time_t); #if !__DARWIN_UNIX03 char *timezone(int, int); @@ -155,8 +182,81 @@ time_t timegm(struct tm * const); #endif /* neither ANSI nor POSIX */ #if !defined(_ANSI_SOURCE) -int nanosleep(const struct timespec *, struct timespec *) __DARWIN_ALIAS(nanosleep); +//Begin-Libc +#ifndef LIBC_ALIAS_NANOSLEEP +//End-Libc +int nanosleep(const struct timespec *__rqtp, struct timespec *__rmtp) __DARWIN_ALIAS_C(nanosleep); +//Begin-Libc +#else /* LIBC_ALIAS_NANOSLEEP */ +int nanosleep(const struct timespec *__rqtp, struct timespec *__rmtp) LIBC_ALIAS_C(nanosleep); +#endif /* !LIBC_ALIAS_NANOSLEEP */ +//End-Libc +#endif +#endif /* UNIFDEF_DRIVERKIT */ + +#if !defined(_DARWIN_FEATURE_CLOCK_GETTIME) || _DARWIN_FEATURE_CLOCK_GETTIME != 0 +#if __DARWIN_C_LEVEL >= 199309L +#if __has_feature(enumerator_attributes) +#define __CLOCK_AVAILABILITY __OSX_AVAILABLE(10.12) __IOS_AVAILABLE(10.0) __TVOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0) +#else +#define __CLOCK_AVAILABILITY +#endif + +typedef enum { +_CLOCK_REALTIME __CLOCK_AVAILABILITY = 0, +#define CLOCK_REALTIME _CLOCK_REALTIME +_CLOCK_MONOTONIC __CLOCK_AVAILABILITY = 6, +#define CLOCK_MONOTONIC _CLOCK_MONOTONIC +#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) +_CLOCK_MONOTONIC_RAW __CLOCK_AVAILABILITY = 4, +#define CLOCK_MONOTONIC_RAW _CLOCK_MONOTONIC_RAW +_CLOCK_MONOTONIC_RAW_APPROX __CLOCK_AVAILABILITY = 5, +#define CLOCK_MONOTONIC_RAW_APPROX _CLOCK_MONOTONIC_RAW_APPROX +_CLOCK_UPTIME_RAW __CLOCK_AVAILABILITY = 8, +#define CLOCK_UPTIME_RAW _CLOCK_UPTIME_RAW +_CLOCK_UPTIME_RAW_APPROX __CLOCK_AVAILABILITY = 9, +#define CLOCK_UPTIME_RAW_APPROX _CLOCK_UPTIME_RAW_APPROX +#endif +_CLOCK_PROCESS_CPUTIME_ID __CLOCK_AVAILABILITY = 12, +#define CLOCK_PROCESS_CPUTIME_ID _CLOCK_PROCESS_CPUTIME_ID +_CLOCK_THREAD_CPUTIME_ID __CLOCK_AVAILABILITY = 16 +#define CLOCK_THREAD_CPUTIME_ID _CLOCK_THREAD_CPUTIME_ID +} clockid_t; + +#ifndef UNIFDEF_DRIVERKIT +__CLOCK_AVAILABILITY +int clock_getres(clockid_t __clock_id, struct timespec *__res); + +__CLOCK_AVAILABILITY +int clock_gettime(clockid_t __clock_id, struct timespec *__tp); + +#endif /* UNIFDEF_DRIVERKIT */ +#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) +__CLOCK_AVAILABILITY +__uint64_t clock_gettime_nsec_np(clockid_t __clock_id); #endif + +#ifndef UNIFDEF_DRIVERKIT +__OSX_AVAILABLE(10.12) __IOS_PROHIBITED +__TVOS_PROHIBITED __WATCHOS_PROHIBITED +int clock_settime(clockid_t __clock_id, const struct timespec *__tp); + +#endif /* UNIFDEF_DRIVERKIT */ +#undef __CLOCK_AVAILABILITY +#endif /* __DARWIN_C_LEVEL */ +#endif /* _DARWIN_FEATURE_CLOCK_GETTIME */ + +#ifndef UNIFDEF_DRIVERKIT +#if (__DARWIN_C_LEVEL >= __DARWIN_C_FULL) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || \ + (defined(__cplusplus) && __cplusplus >= 201703L) +/* ISO/IEC 9899:201x 7.27.2.5 The timespec_get function */ +#define TIME_UTC 1 /* time elapsed since epoch */ +__API_AVAILABLE(macosx(10.15), ios(13.0), tvos(13.0), watchos(6.0)) +int timespec_get(struct timespec *ts, int base); +#endif + +#endif /* UNIFDEF_DRIVERKIT */ __END_DECLS #ifdef _USE_EXTENDED_LOCALES_