[1046] | 1 | /*
|
---|
| 2 | * time.h
|
---|
| 3 | *
|
---|
| 4 | * Type definitions and function declarations relating to date and time.
|
---|
| 5 | *
|
---|
| 6 | * $Id: time.h,v c96797f9657b 2016/04/12 14:36:20 keithmarshall $
|
---|
| 7 | *
|
---|
| 8 | * Written by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
|
---|
| 9 | * Copyright (C) 1997-2007, 2011, 2015, 2016, MinGW.org Project.
|
---|
| 10 | *
|
---|
| 11 | *
|
---|
| 12 | * Permission is hereby granted, free of charge, to any person obtaining a
|
---|
| 13 | * copy of this software and associated documentation files (the "Software"),
|
---|
| 14 | * to deal in the Software without restriction, including without limitation
|
---|
| 15 | * the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
---|
| 16 | * and/or sell copies of the Software, and to permit persons to whom the
|
---|
| 17 | * Software is furnished to do so, subject to the following conditions:
|
---|
| 18 | *
|
---|
| 19 | * The above copyright notice, this permission notice, and the following
|
---|
| 20 | * disclaimer shall be included in all copies or substantial portions of
|
---|
| 21 | * the Software.
|
---|
| 22 | *
|
---|
| 23 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
---|
| 24 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
---|
| 25 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
---|
| 26 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
---|
| 27 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
---|
| 28 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF OR OTHER
|
---|
| 29 | * DEALINGS IN THE SOFTWARE.
|
---|
| 30 | *
|
---|
| 31 | */
|
---|
| 32 | #if ! defined _TIME_H || defined __need_time_t
|
---|
| 33 | #pragma GCC system_header
|
---|
| 34 |
|
---|
| 35 | /* Irrespective of whether this is normal or selective inclusion of
|
---|
| 36 | * <time.h>, we ALWAYS require the definition for time_t; get it by
|
---|
| 37 | * selective inclusion from its primary source, in <sys/types.h>;
|
---|
| 38 | * note that we must ALWAYS delegate this, when __need_time_t is
|
---|
| 39 | * defined, even when _TIME_H had been defined previously, to ensure
|
---|
| 40 | * that __need_time_t is properly reset, and thus cannot compromise
|
---|
| 41 | * a later inclusion of <sys/types.h>
|
---|
| 42 | */
|
---|
| 43 | #undef __need_time_h
|
---|
| 44 | #define __need_time_t 1
|
---|
| 45 | #include <sys/types.h>
|
---|
| 46 |
|
---|
| 47 | #ifndef _TIME_H
|
---|
| 48 | /* To support selective partial inclusion, we do not immediately define
|
---|
| 49 | * the normal _TIME_H guard macro; initially, we also clear all of those
|
---|
| 50 | * declaraction subset selection macros which are applicable herein.
|
---|
| 51 | */
|
---|
| 52 | #undef __need_struct_timespec
|
---|
| 53 | #undef __need_wchar_decls
|
---|
| 54 |
|
---|
| 55 | #if defined __WCHAR_H_SOURCED__
|
---|
| 56 | /* This is selective inclusion by <wchar.h>; thus, we do not define the
|
---|
| 57 | * _TIME_H guard macro, and we select only the minimally required subset
|
---|
| 58 | * of declarations to be exposed from within <time.h>
|
---|
| 59 | */
|
---|
| 60 | # define __need_wchar_decls 1
|
---|
| 61 |
|
---|
| 62 | /* Both ISO-C and POSIX stipulate that <wchar.h> shall declare "struct tm"
|
---|
| 63 | * as an incomplete structure, with its complete declaration to be provided
|
---|
| 64 | * by <time.h>; provide an incomplete forward declaration, to satisfy this
|
---|
| 65 | * minimal requirement for selective inclusion by <wchar.h>
|
---|
| 66 | */
|
---|
| 67 | struct tm;
|
---|
| 68 |
|
---|
| 69 | #else
|
---|
| 70 | #define _TIME_H
|
---|
| 71 | /* This is normal inclusion of <time.h>, in its own right. All our system
|
---|
| 72 | * headers are required to include <_mingw.h>, but in the case of selective
|
---|
| 73 | * inclusion, we delegate that responsibility to the including header; when
|
---|
| 74 | * including <time.h> directly, we must fulfil this requirement now.
|
---|
| 75 | */
|
---|
| 76 | #include <_mingw.h>
|
---|
| 77 |
|
---|
| 78 | /* Number of clock ticks per second. A clock tick is the unit by which
|
---|
| 79 | * processor time is measured and is returned by 'clock'.
|
---|
| 80 | */
|
---|
| 81 | #define CLOCKS_PER_SEC ((clock_t)(1000))
|
---|
| 82 | #define CLK_TCK CLOCKS_PER_SEC
|
---|
| 83 |
|
---|
| 84 | #define __need_struct_timespec 1
|
---|
| 85 | #define __need_wchar_decls 1
|
---|
| 86 | #endif
|
---|
| 87 |
|
---|
| 88 | #ifndef RC_INVOKED
|
---|
| 89 | #if defined __need_struct_timespec && ! __struct_timespec_defined
|
---|
| 90 | /* Structure timespec is mandated by POSIX, for specification of
|
---|
| 91 | * intervals with the greatest precision supported by the OS kernel.
|
---|
| 92 | * Although this allows for specification to nanosecond precision, do
|
---|
| 93 | * not be deluded into any false expectation that such short intervals
|
---|
| 94 | * can be realized on Windows; on Win9x derivatives, the metronome used
|
---|
| 95 | * by the process scheduler has a period of ~55 milliseconds, while for
|
---|
| 96 | * WinNT derivatives, the corresponding period is ~15 milliseconds; thus,
|
---|
| 97 | * the shortest intervals which can be realistically timed will range
|
---|
| 98 | * from 0..55 milliseconds on Win9x hosts, and from 0..15 ms on WinNT,
|
---|
| 99 | * with period values normally distributed around means of ~27.5 ms
|
---|
| 100 | * and ~7.5 ms, for the two system types respectively.
|
---|
| 101 | */
|
---|
| 102 | struct timespec
|
---|
| 103 | { /* Period is sum of tv_sec + tv_nsec; while 32-bits is sufficient
|
---|
| 104 | * to accommodate tv_nsec, we use 64-bit __time64_t for tv_sec, to
|
---|
| 105 | * ensure that we have a sufficiently large field to accommodate
|
---|
| 106 | * Microsoft's ambiguous __time32_t vs. __time64_t representation
|
---|
| 107 | * of time_t; we may resolve this ambiguity locally, by casting a
|
---|
| 108 | * pointer to a struct timespec to point to an identically sized
|
---|
| 109 | * struct __mingw32_timespec, which is defined below.
|
---|
| 110 | */
|
---|
| 111 | __time64_t tv_sec; /* seconds; accept 32 or 64 bits */
|
---|
| 112 | __int32 tv_nsec; /* nanoseconds */
|
---|
| 113 | };
|
---|
| 114 |
|
---|
| 115 | # ifdef _MINGW32_SOURCE_EXTENDED
|
---|
| 116 | struct __mingw32_expanded_timespec
|
---|
| 117 | {
|
---|
| 118 | /* Equivalent of struct timespec, with disambiguation for the
|
---|
| 119 | * 32-bit vs. 64-bit tv_sec field declaration. Period is the
|
---|
| 120 | * sum of tv_sec + tv_nsec; we use explicitly sized types to
|
---|
| 121 | * avoid 32-bit vs. 64-bit time_t ambiguity...
|
---|
| 122 | */
|
---|
| 123 | union
|
---|
| 124 | { /* ...within this anonymous union, allowing tv_sec to accommodate
|
---|
| 125 | * seconds expressed in either of Microsoft's (ambiguously sized)
|
---|
| 126 | * time_t representations.
|
---|
| 127 | */
|
---|
| 128 | __time64_t __tv64_sec; /* unambiguously 64 bits */
|
---|
| 129 | __time32_t __tv32_sec; /* unambiguously 32 bits */
|
---|
| 130 | time_t tv_sec; /* ambiguously 32 or 64 bits */
|
---|
| 131 | };
|
---|
| 132 | __int32 tv_nsec; /* nanoseconds */
|
---|
| 133 | };
|
---|
| 134 | # endif /* _MINGW32_SOURCE_EXTENDED */
|
---|
| 135 |
|
---|
| 136 | # define __struct_timespec_defined 1
|
---|
| 137 | #endif
|
---|
| 138 |
|
---|
| 139 | #ifdef _TIME_H
|
---|
| 140 | #ifdef _MINGW32_SOURCE_EXTENDED
|
---|
| 141 |
|
---|
| 142 | _BEGIN_C_DECLS
|
---|
| 143 |
|
---|
| 144 | __CRT_ALIAS __LIBIMPL__(( FUNCTION = mingw_timespec ))
|
---|
| 145 | /* This non-ANSI convenience function facilitates access to entities
|
---|
| 146 | * defined as struct timespec, while exposing the broken down form of
|
---|
| 147 | * the tv_sec field, as declared within struct __mingw32_timespec. It
|
---|
| 148 | * is exposed only when _MINGW32_SOURCE_EXTENDED is defined, which is
|
---|
| 149 | * normally implicitly the case, except when in __STRICT_ANSI__ mode
|
---|
| 150 | * unless the user defines it explicitly.
|
---|
| 151 | */
|
---|
| 152 | struct __mingw32_expanded_timespec *mingw_timespec( struct timespec *__tv )
|
---|
| 153 | { return (struct __mingw32_expanded_timespec *)(__tv); }
|
---|
| 154 |
|
---|
| 155 | _END_C_DECLS
|
---|
| 156 |
|
---|
| 157 | #endif /* _MINGW32_SOURCE_EXTENDED */
|
---|
| 158 |
|
---|
| 159 | /* <time.h> is also required to duplicate the following type definitions,
|
---|
| 160 | * which are nominally defined in <stddef.h>
|
---|
| 161 | */
|
---|
| 162 | #define __need_NULL
|
---|
| 163 | #define __need_wchar_t
|
---|
| 164 | #define __need_size_t
|
---|
| 165 | #include <stddef.h>
|
---|
| 166 |
|
---|
| 167 | /* A type for measuring processor time in clock ticks; (no need to
|
---|
| 168 | * guard this, since it isn't defined elsewhere).
|
---|
| 169 | */
|
---|
| 170 | typedef long clock_t;
|
---|
| 171 |
|
---|
| 172 | struct tm
|
---|
| 173 | { /* A structure for storing the attributes of a broken-down time; (once
|
---|
| 174 | * again, it isn't defined elsewhere, so no guard is necessary). Note
|
---|
| 175 | * that we are within the scope of <time.h> itself, so we must provide
|
---|
| 176 | * the complete structure declaration here.
|
---|
| 177 | */
|
---|
| 178 | int tm_sec; /* Seconds: 0-60 (to accommodate leap seconds) */
|
---|
| 179 | int tm_min; /* Minutes: 0-59 */
|
---|
| 180 | int tm_hour; /* Hours since midnight: 0-23 */
|
---|
| 181 | int tm_mday; /* Day of the month: 1-31 */
|
---|
| 182 | int tm_mon; /* Months *since* January: 0-11 */
|
---|
| 183 | int tm_year; /* Years since 1900 */
|
---|
| 184 | int tm_wday; /* Days since Sunday (0-6) */
|
---|
| 185 | int tm_yday; /* Days since Jan. 1: 0-365 */
|
---|
| 186 | int tm_isdst; /* +1=Daylight Savings Time, 0=No DST, -1=unknown */
|
---|
| 187 | };
|
---|
| 188 |
|
---|
| 189 | _BEGIN_C_DECLS
|
---|
| 190 |
|
---|
| 191 | _CRTIMP __cdecl __MINGW_NOTHROW clock_t clock (void);
|
---|
| 192 |
|
---|
| 193 | #if __MSVCRT_VERSION__ < __MSVCR80_DLL
|
---|
| 194 | /* Although specified as ISO-C functions, Microsoft withdrew direct
|
---|
| 195 | * support for these, with their ISO-C names, from MSVCR80.DLL onwards,
|
---|
| 196 | * preferring to map them via header file macros, to alternatively named
|
---|
| 197 | * DLL functions with ambiguous time_t representations; they remain in
|
---|
| 198 | * MSVCRT.DLL, however, with their original ISO-C names, and time_t
|
---|
| 199 | * unambiguously represented as a 32-bit data type.
|
---|
| 200 | */
|
---|
| 201 | _CRTIMP __cdecl __MINGW_NOTHROW time_t time (time_t *);
|
---|
| 202 | _CRTIMP __cdecl __MINGW_NOTHROW double difftime (time_t, time_t);
|
---|
| 203 | _CRTIMP __cdecl __MINGW_NOTHROW time_t mktime (struct tm *);
|
---|
| 204 | #endif
|
---|
| 205 |
|
---|
| 206 | /* These functions write to and return pointers to static buffers that may
|
---|
| 207 | * be overwritten by other function calls. Yikes!
|
---|
| 208 | *
|
---|
| 209 | * NOTE: localtime, and perhaps the others of the four functions grouped
|
---|
| 210 | * below may return NULL if their argument is not 'acceptable'. Also note
|
---|
| 211 | * that calling asctime with a NULL pointer will produce an Invalid Page
|
---|
| 212 | * Fault and crap out your program. Guess how I know. Hint: stat called on
|
---|
| 213 | * a directory gives 'invalid' times in st_atime etc...
|
---|
| 214 | */
|
---|
| 215 | _CRTIMP __cdecl __MINGW_NOTHROW char *asctime (const struct tm *);
|
---|
| 216 |
|
---|
| 217 | #if __MSVCRT_VERSION__ < __MSVCR80_DLL
|
---|
| 218 | /* Once again, these have been withdrawn from MSVCR80.DLL, (and later),
|
---|
| 219 | * but remain in MSVCRT.DLL, with unambiguously 32-bit time_t.
|
---|
| 220 | */
|
---|
| 221 | _CRTIMP __cdecl __MINGW_NOTHROW char *ctime (const time_t *);
|
---|
| 222 | _CRTIMP __cdecl __MINGW_NOTHROW struct tm *gmtime (const time_t *);
|
---|
| 223 | _CRTIMP __cdecl __MINGW_NOTHROW struct tm *localtime (const time_t *);
|
---|
| 224 | #endif
|
---|
| 225 |
|
---|
| 226 | _CRTIMP __cdecl __MINGW_NOTHROW
|
---|
| 227 | size_t strftime (char *, size_t, const char *, const struct tm *);
|
---|
| 228 |
|
---|
| 229 | #ifndef __STRICT_ANSI__
|
---|
| 230 | extern _CRTIMP __cdecl __MINGW_NOTHROW void _tzset (void);
|
---|
| 231 |
|
---|
| 232 | #ifndef _NO_OLDNAMES
|
---|
| 233 | extern _CRTIMP __cdecl __MINGW_NOTHROW void tzset (void);
|
---|
| 234 | #endif
|
---|
| 235 |
|
---|
| 236 | _CRTIMP __cdecl __MINGW_NOTHROW char *_strdate (char *);
|
---|
| 237 | _CRTIMP __cdecl __MINGW_NOTHROW char *_strtime (char *);
|
---|
| 238 |
|
---|
| 239 | #if __MSVCRT_VERSION__ >= __MSVCR61_DLL || _WIN32_WINNT >= _WIN32_WINNT_WIN2K
|
---|
| 240 | /* These 64-bit time_t variant functions first became available in
|
---|
| 241 | * MSVCR61.DLL, and its descendants; they were subsequently included
|
---|
| 242 | * in MSVCRT.DLL, from its Win2K release onwards.
|
---|
| 243 | */
|
---|
| 244 | _CRTIMP __cdecl __MINGW_NOTHROW __time64_t _time64( __time64_t *);
|
---|
| 245 | _CRTIMP __cdecl __MINGW_NOTHROW __time64_t _mktime64 (struct tm *);
|
---|
| 246 | _CRTIMP __cdecl __MINGW_NOTHROW char *_ctime64 (const __time64_t *);
|
---|
| 247 | _CRTIMP __cdecl __MINGW_NOTHROW struct tm *_gmtime64 (const __time64_t *);
|
---|
| 248 | _CRTIMP __cdecl __MINGW_NOTHROW struct tm *_localtime64 (const __time64_t *);
|
---|
| 249 |
|
---|
| 250 | #endif /* __MSVCR61_DLL, _WIN32_WINNT_WIN2K, and descendants. */
|
---|
| 251 |
|
---|
| 252 | #if __MSVCRT_VERSION__ >= __MSVCR80_DLL || _WIN32_WINNT >= _WIN32_WINNT_VISTA
|
---|
| 253 | /* The following were introduced in MSVCR80.DLL, and they subsequently
|
---|
| 254 | * appeared in MSVCRT.DLL, from Windows-Vista onwards.
|
---|
| 255 | */
|
---|
| 256 | _CRTIMP __cdecl __MINGW_NOTHROW char *_ctime32 (const __time32_t *);
|
---|
| 257 | _CRTIMP __cdecl __MINGW_NOTHROW double _difftime32 (__time32_t, __time32_t);
|
---|
| 258 | _CRTIMP __cdecl __MINGW_NOTHROW double _difftime64 (__time64_t, __time64_t);
|
---|
| 259 | _CRTIMP __cdecl __MINGW_NOTHROW struct tm *_gmtime32 (const __time32_t *);
|
---|
| 260 | _CRTIMP __cdecl __MINGW_NOTHROW struct tm *_localtime32 (const __time32_t *);
|
---|
| 261 | _CRTIMP __cdecl __MINGW_NOTHROW __time32_t _mktime32 (struct tm *);
|
---|
| 262 | _CRTIMP __cdecl __MINGW_NOTHROW __time32_t _mkgmtime32 (struct tm *);
|
---|
| 263 | _CRTIMP __cdecl __MINGW_NOTHROW __time64_t _mkgmtime64 (struct tm *);
|
---|
| 264 | _CRTIMP __cdecl __MINGW_NOTHROW __time32_t _time32 (__time32_t *);
|
---|
| 265 |
|
---|
| 266 | # if __MSVCRT_VERSION__ >= __MSVCR80_DLL && defined _USE_32BIT_TIME_T
|
---|
| 267 | /* Users of MSVCR80.DLL and later, (but not users of MSVCRT.DLL, even
|
---|
| 268 | * for _WIN32_WINNT_VISTA and later), must contend with the omission of
|
---|
| 269 | * the following functions from their DLL of choice, thus requiring these
|
---|
| 270 | * brain damaged mappings, in terms of an ambiguously defined 'time_t';
|
---|
| 271 | * thus, when 'time_t' is declared to be equivalent to '__time32_t':
|
---|
| 272 | */
|
---|
| 273 | __CRT_ALIAS __cdecl __MINGW_NOTHROW time_t time (time_t *__v)
|
---|
| 274 | { return _time32 (__v); }
|
---|
| 275 |
|
---|
| 276 | __CRT_ALIAS __cdecl __MINGW_NOTHROW double difftime (time_t __v1, time_t __v2)
|
---|
| 277 | { return _difftime32 (__v1, __v2); }
|
---|
| 278 |
|
---|
| 279 | __CRT_ALIAS __cdecl __MINGW_NOTHROW time_t mktime (struct tm *__v)
|
---|
| 280 | { return _mktime32 (__v); }
|
---|
| 281 |
|
---|
| 282 | __CRT_ALIAS __cdecl __MINGW_NOTHROW time_t _mkgmtime (struct tm *__v)
|
---|
| 283 | { return _mkgmtime32 (__v); }
|
---|
| 284 |
|
---|
| 285 | __CRT_ALIAS __cdecl __MINGW_NOTHROW char *ctime (const time_t *__v)
|
---|
| 286 | { return _ctime32 (__v); }
|
---|
| 287 |
|
---|
| 288 | __CRT_ALIAS __cdecl __MINGW_NOTHROW struct tm *gmtime (const time_t *__v)
|
---|
| 289 | { return _gmtime32 (__v); }
|
---|
| 290 |
|
---|
| 291 | __CRT_ALIAS __cdecl __MINGW_NOTHROW struct tm *localtime (const time_t *__v)
|
---|
| 292 | { return _localtime32 (__v); }
|
---|
| 293 |
|
---|
| 294 | # elif __MSVCRT_VERSION__ >= __MSVCR80_DLL
|
---|
| 295 | /* Correspondingly, for users of MSVCR80.DLL and later only, when there
|
---|
| 296 | * is no explicit declaration to direct the specification of 'time_t', and
|
---|
| 297 | * thus 'time_t' is assumed to be equivalent to '__time64_t':
|
---|
| 298 | */
|
---|
| 299 | __CRT_ALIAS __cdecl __MINGW_NOTHROW time_t time (time_t *__v)
|
---|
| 300 | { return _time64 (__v); }
|
---|
| 301 |
|
---|
| 302 | __CRT_ALIAS __cdecl __MINGW_NOTHROW double difftime (time_t __v1, time_t __v2)
|
---|
| 303 | { return _difftime64 (__v1, __v2); }
|
---|
| 304 |
|
---|
| 305 | __CRT_ALIAS __cdecl __MINGW_NOTHROW time_t mktime (struct tm *__v)
|
---|
| 306 | { return _mktime64 (__v); }
|
---|
| 307 |
|
---|
| 308 | __CRT_ALIAS __cdecl __MINGW_NOTHROW time_t _mkgmtime (struct tm *__v)
|
---|
| 309 | { return _mkgmtime64 (__v); }
|
---|
| 310 |
|
---|
| 311 | __CRT_ALIAS __cdecl __MINGW_NOTHROW char *ctime (const time_t *__v)
|
---|
| 312 | { return _ctime64 (__v); }
|
---|
| 313 |
|
---|
| 314 | __CRT_ALIAS __cdecl __MINGW_NOTHROW struct tm *gmtime (const time_t *__v)
|
---|
| 315 | { return _gmtime64 (__v); }
|
---|
| 316 |
|
---|
| 317 | __CRT_ALIAS __cdecl __MINGW_NOTHROW struct tm *localtime (const time_t *__v)
|
---|
| 318 | { return _localtime64 (__v); }
|
---|
| 319 |
|
---|
| 320 | # endif /* _USE_32BIT_TIME_T brain damage */
|
---|
| 321 | #endif /* >=__MSVCR80.DLL || >=_WIN32_WINNT_VISTA */
|
---|
| 322 |
|
---|
| 323 | /* _daylight: non zero if daylight savings time is used.
|
---|
| 324 | * _timezone: difference in seconds between GMT and local time.
|
---|
| 325 | * _tzname: standard/daylight savings time zone names (an array with two
|
---|
| 326 | * elements).
|
---|
| 327 | */
|
---|
| 328 | #ifdef __MSVCRT__
|
---|
| 329 | /* These are for compatibility with pre-VC 5.0 supplied MSVCRT.DLL
|
---|
| 330 | */
|
---|
| 331 | extern _CRTIMP __cdecl __MINGW_NOTHROW int *__p__daylight (void);
|
---|
| 332 | extern _CRTIMP __cdecl __MINGW_NOTHROW long *__p__timezone (void);
|
---|
| 333 | extern _CRTIMP __cdecl __MINGW_NOTHROW char **__p__tzname (void);
|
---|
| 334 |
|
---|
| 335 | __MINGW_IMPORT int _daylight;
|
---|
| 336 | __MINGW_IMPORT long _timezone;
|
---|
| 337 | __MINGW_IMPORT char *_tzname[2];
|
---|
| 338 |
|
---|
| 339 | #else /* !__MSVCRT__ (i.e. using CRTDLL.DLL) */
|
---|
| 340 | #ifndef __DECLSPEC_SUPPORTED
|
---|
| 341 |
|
---|
| 342 | extern int *_imp___daylight_dll;
|
---|
| 343 | extern long *_imp___timezone_dll;
|
---|
| 344 | extern char **_imp___tzname;
|
---|
| 345 |
|
---|
| 346 | #define _daylight (*_imp___daylight_dll)
|
---|
| 347 | #define _timezone (*_imp___timezone_dll)
|
---|
| 348 | #define _tzname (*_imp___tzname)
|
---|
| 349 |
|
---|
| 350 | #else /* __DECLSPEC_SUPPORTED */
|
---|
| 351 |
|
---|
| 352 | __MINGW_IMPORT int _daylight_dll;
|
---|
| 353 | __MINGW_IMPORT long _timezone_dll;
|
---|
| 354 | __MINGW_IMPORT char *_tzname[2];
|
---|
| 355 |
|
---|
| 356 | #define _daylight _daylight_dll
|
---|
| 357 | #define _timezone _timezone_dll
|
---|
| 358 |
|
---|
| 359 | #endif /* __DECLSPEC_SUPPORTED */
|
---|
| 360 | #endif /* ! __MSVCRT__ */
|
---|
| 361 | #endif /* ! __STRICT_ANSI__ */
|
---|
| 362 |
|
---|
| 363 | #ifndef _NO_OLDNAMES
|
---|
| 364 | #ifdef __MSVCRT__
|
---|
| 365 |
|
---|
| 366 | /* These go in the oldnames import library for MSVCRT.
|
---|
| 367 | */
|
---|
| 368 | __MINGW_IMPORT int daylight;
|
---|
| 369 | __MINGW_IMPORT long timezone;
|
---|
| 370 | __MINGW_IMPORT char *tzname[2];
|
---|
| 371 |
|
---|
| 372 | #else /* ! __MSVCRT__ */
|
---|
| 373 | /* CRTDLL is royally messed up when it comes to these macros.
|
---|
| 374 | * TODO: import and alias these via oldnames import library instead
|
---|
| 375 | * of macros.
|
---|
| 376 | */
|
---|
| 377 | #define daylight _daylight
|
---|
| 378 |
|
---|
| 379 | /* NOTE: timezone not defined as a macro because it would conflict with
|
---|
| 380 | * struct timezone in sys/time.h. Also, tzname used to a be macro, but
|
---|
| 381 | * now it's in moldname.
|
---|
| 382 | */
|
---|
| 383 | __MINGW_IMPORT char *tzname[2];
|
---|
| 384 |
|
---|
| 385 | #endif /* ! __MSVCRT__ */
|
---|
| 386 | #endif /* ! _NO_OLDNAMES */
|
---|
| 387 |
|
---|
| 388 | #if _POSIX_C_SOURCE
|
---|
| 389 | /* The nanosleep() function provides the most general purpose API for
|
---|
| 390 | * process/thread suspension; it provides for specification of periods
|
---|
| 391 | * ranging from ~7.5 ms mean, (on WinNT derivatives; ~27.5 ms on Win9x),
|
---|
| 392 | * extending up to ~136 years, (effectively eternity).
|
---|
| 393 | */
|
---|
| 394 | __cdecl __MINGW_NOTHROW
|
---|
| 395 | int nanosleep( const struct timespec *, struct timespec * );
|
---|
| 396 |
|
---|
| 397 | #ifndef __NO_INLINE__
|
---|
| 398 | /* We may conveniently provide an in-line implementation here,
|
---|
| 399 | * in terms of the __mingw_sleep() helper function.
|
---|
| 400 | */
|
---|
| 401 | __cdecl __MINGW_NOTHROW
|
---|
| 402 | int __mingw_sleep( unsigned long, unsigned long );
|
---|
| 403 |
|
---|
| 404 | __CRT_INLINE __LIBIMPL__(( FUNCTION = nanosleep ))
|
---|
| 405 | int nanosleep( const struct timespec *period, struct timespec *residual )
|
---|
| 406 | {
|
---|
| 407 | if( residual != (void *)(0) )
|
---|
| 408 | residual->tv_sec = (__time64_t)(residual->tv_nsec = 0);
|
---|
| 409 | return __mingw_sleep((unsigned)(period->tv_sec), (period->tv_sec < 0LL)
|
---|
| 410 | ? (unsigned)(-1) : (unsigned)(period->tv_nsec));
|
---|
| 411 | }
|
---|
| 412 | #endif /* !__NO_INLINE__ */
|
---|
| 413 | #endif /* _POSIX_C_SOURCE */
|
---|
| 414 |
|
---|
| 415 | _END_C_DECLS
|
---|
| 416 |
|
---|
| 417 | #endif /* _TIME_H included in its own right */
|
---|
| 418 |
|
---|
| 419 | #if __need_wchar_decls && ! (defined _TIME_H && defined _WCHAR_H)
|
---|
| 420 | /* Wide character time function prototypes. These are nominally declared
|
---|
| 421 | * both here, in <time.h>, and also in <wchar.h>; we declare them here, and
|
---|
| 422 | * make them available for selective inclusion by <wchar.h>, but such that
|
---|
| 423 | * the declarations, and in particular any in-line implementation of the
|
---|
| 424 | * _wctime() function, are visible only on the first time parse, when
|
---|
| 425 | * one of either _TIME_H, or _WCHAR_H, but not both, is defined.
|
---|
| 426 | */
|
---|
| 427 | _BEGIN_C_DECLS
|
---|
| 428 |
|
---|
| 429 | #if defined __MSVCRT__ && ! defined __STRICT_ANSI__
|
---|
| 430 | _CRTIMP __cdecl __MINGW_NOTHROW wchar_t *_wasctime (const struct tm *);
|
---|
| 431 | _CRTIMP __cdecl __MINGW_NOTHROW wchar_t *_wstrdate (wchar_t *);
|
---|
| 432 | _CRTIMP __cdecl __MINGW_NOTHROW wchar_t *_wstrtime (wchar_t *);
|
---|
| 433 |
|
---|
| 434 | #if __MSVCRT_VERSION__ >= __MSVCR61_DLL || _WIN32_WINNT >= _WIN32_WINNT_WIN2K
|
---|
| 435 | /* A __time64_t specific variant of _wctime(), identified as _wctime64(),
|
---|
| 436 | * first appeared in the non-free MSVC specific MSVCR61.DLL, and was added
|
---|
| 437 | * to the freely available platform MSVCRT.DLL from Win2K onwards...
|
---|
| 438 | */
|
---|
| 439 | _CRTIMP __cdecl __MINGW_NOTHROW wchar_t *_wctime64 (const __time64_t *);
|
---|
| 440 | #endif
|
---|
| 441 | #if __MSVCRT_VERSION__ >= __MSVCR80_DLL || _WIN32_WINNT >= _WIN32_WINNT_VISTA
|
---|
| 442 | /* ...whereas its __time32_t specific counterpart, _wctime32(), did not
|
---|
| 443 | * make an appearance until MSVCR80.DLL, and was not added to MSVCRT.DLL
|
---|
| 444 | * until the release of Vista.
|
---|
| 445 | */
|
---|
| 446 | _CRTIMP __cdecl __MINGW_NOTHROW wchar_t *_wctime32 (const __time32_t *);
|
---|
| 447 | #endif
|
---|
| 448 | #if __MSVCRT_VERSION__ < __MSVCR80_DLL
|
---|
| 449 | /* Present in all versions of MSVCRT.DLL, but withdrawn from non-free
|
---|
| 450 | * MSVC specific releases from MSVCR80.DLL onwards; in all versions of
|
---|
| 451 | * MSVCRT.DLL, _wctime() accepts a 32-bit time_t argument pointer.
|
---|
| 452 | */
|
---|
| 453 | _CRTIMP __cdecl __MINGW_NOTHROW wchar_t *_wctime (const time_t *);
|
---|
| 454 |
|
---|
| 455 | #else /* __MSVCRT_VERSION__ >= __MSVCR80_DLL */
|
---|
| 456 | /* For users of the non-free MSVC libraries, we must deal with both the
|
---|
| 457 | * absence of _wctime(), and with Microsoft's attendant _USE_32BIT_TIME_T
|
---|
| 458 | * brain damage, as we map an inline replacement...
|
---|
| 459 | */
|
---|
| 460 | __CRT_ALIAS __cdecl __MINGW_NOTHROW wchar_t *_wctime (const time_t *__v)
|
---|
| 461 | {
|
---|
| 462 | /* ...in terms of an appropriately selected time_t size specific
|
---|
| 463 | * alternative function, which should be available...
|
---|
| 464 | */
|
---|
| 465 | # ifdef _USE_32BIT_TIME_T
|
---|
| 466 | /* ...i.e. the __time32_t specific _wctime32(), when the user has
|
---|
| 467 | * enabled this choice; (the only sane choice, if compatibility with
|
---|
| 468 | * MSVCRT.DLL is desired)...
|
---|
| 469 | */
|
---|
| 470 | return _wctime32 (__v);
|
---|
| 471 |
|
---|
| 472 | # else /* !_USE_32BIT_TIME_T */
|
---|
| 473 | /* ...or otherwise, the __time64_t specific _wctime64(), (in which
|
---|
| 474 | * case, compatibility with MSVCRT.DLL must be sacrificed).
|
---|
| 475 | */
|
---|
| 476 | return _wctime64 (__v);
|
---|
| 477 | # endif /* !_USE_32BIT_TIME_T */
|
---|
| 478 | }
|
---|
| 479 | #endif /* __MSVCRT_VERSION__ >= __MSVCR80_DLL */
|
---|
| 480 | #endif /* __MSVCRT__ && !__STRICT_ANSI__ */
|
---|
| 481 |
|
---|
| 482 | _CRTIMP __cdecl __MINGW_NOTHROW
|
---|
| 483 | size_t wcsftime (wchar_t *, size_t, const wchar_t *, const struct tm *);
|
---|
| 484 |
|
---|
| 485 | _END_C_DECLS
|
---|
| 486 |
|
---|
| 487 | #endif /* ! (defined _TIME_H && defined _WCHAR_H) */
|
---|
| 488 |
|
---|
| 489 | /* We're done with all <time.h> specific content selectors; clear them.
|
---|
| 490 | */
|
---|
| 491 | #undef __need_time_t
|
---|
| 492 | #undef __need_struct_timespec
|
---|
| 493 | #undef __need_wchar_decls
|
---|
| 494 |
|
---|
| 495 | #endif /* ! RC_INVOKED */
|
---|
| 496 | #endif /* !_TIME_H after __need_time_t processing */
|
---|
| 497 | #endif /* !_TIME_H: $RCSfile: time.h,v $: end of file */
|
---|