6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /* Copyright (c) 1988 AT&T */
22 /* All Rights Reserved */
23
24
25 /*
26 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
27 * Use is subject to license terms.
28 */
29 /*
30 * Copyright 2010 Nexenta Systems, Inc. Al rights reserved.
31 * Copyright 2014 Garrett D'Amore <garrett@damore.org>
32 */
33
34 #ifndef _TIME_H
35 #define _TIME_H
36
37 #include <sys/feature_tests.h>
38 #include <iso/time_iso.h>
39 #if (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
40 (_POSIX_C_SOURCE > 2) || defined(__EXTENSIONS__)
41 #include <sys/types.h>
42 #include <sys/time_impl.h>
43 #endif /* (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) ... */
44
45 /*
46 * Allow global visibility for symbols defined in
47 * C++ "std" namespace in <iso/time_iso.h>.
48 */
49 #if __cplusplus >= 199711L
50 using std::size_t;
51 using std::clock_t;
59 using std::localtime;
60 using std::mktime;
61 using std::time;
62 using std::strftime;
63 #endif
64
65 #ifdef __cplusplus
66 extern "C" {
67 #endif
68
69 #ifndef _CLOCKID_T
70 #define _CLOCKID_T
71 typedef int clockid_t;
72 #endif
73
74 #ifndef _TIMER_T
75 #define _TIMER_T
76 typedef int timer_t;
77 #endif
78
79 #if defined(__STDC__)
80
81 #if defined(__EXTENSIONS__) || \
82 (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
83 (_POSIX_C_SOURCE - 0 >= 199506L) || defined(_REENTRANT)
84 extern struct tm *gmtime_r(const time_t *_RESTRICT_KYWD,
85 struct tm *_RESTRICT_KYWD);
86 extern struct tm *localtime_r(const time_t *_RESTRICT_KYWD,
87 struct tm *_RESTRICT_KYWD);
88 #endif
89
90 #if (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
91 defined(_XPG4) || defined(__EXTENSIONS__)
92
93 #ifdef _STRPTIME_DONTZERO
94 #ifdef __PRAGMA_REDEFINE_EXTNAME
95 #pragma redefine_extname strptime __strptime_dontzero
96 #else /* __PRAGMA_REDEFINE_EXTNAME */
97 extern char *__strptime_dontzero(const char *, const char *, struct tm *);
98 #define strptime __strptime_dontzero
99 #endif /* __PRAGMA_REDEFINE_EXTNAME */
100 #endif /* _STRPTIME_DONTZERO */
180 #if (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
181 defined(__EXTENSIONS__)
182 extern time_t timegm(struct tm *);
183 extern int cftime(char *, char *, const time_t *);
184 extern int ascftime(char *, const char *, const struct tm *);
185 extern long altzone;
186 #endif
187
188 #if (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
189 defined(_XPG4_2) || defined(__EXTENSIONS__)
190 extern struct tm *getdate(const char *);
191 #ifdef _REENTRANT
192 #undef getdate_err
193 #define getdate_err *(int *)_getdate_err_addr()
194 extern int *_getdate_err_addr(void);
195 #else
196 extern int getdate_err;
197 #endif /* _REENTRANT */
198 #endif /* (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX))... */
199
200 #else /* __STDC__ */
201
202 extern int cftime(), ascftime();
203 extern void tzset();
204 extern time_t timegm();
205
206 #ifdef _STRPTIME_DONTZERO
207 #ifdef __PRAGMA_REDEFINE_EXTNAME
208 #pragma redefine_extname strptime __strptime_dontzero
209 #else /* __PRAGMA_REDEFINE_EXTNAME */
210 extern char *__strptime_dontzero();
211 #define strptime __strptime_dontzero
212 #endif /* __PRAGMA_REDEFINE_EXTNAME */
213 #endif /* _STRPTIME_DONTZERO */
214
215 extern char *strptime();
216
217 #if defined(__EXTENSIONS__) || \
218 (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
219 (_POSIX_C_SOURCE - 0 >= 199506L) || defined(_REENTRANT)
220 extern struct tm *gmtime_r();
221 extern struct tm *localtime_r();
222 #endif
223
224 extern long timezone, altzone;
225 extern int daylight;
226 extern char *tzname[2];
227
228 #if !defined(__XOPEN_OR_POSIX) || defined(_XPG4_2) || defined(__EXTENSIONS__)
229 extern struct tm *getdate();
230 #ifdef _REENTRANT
231 #undef getdate_err
232 #define getdate_err *(int *)_getdate_err_addr()
233 extern int *_getdate_err_addr();
234 #else
235 extern int getdate_err;
236 #endif /* _REENTRANT */
237 #endif /* !defined(__XOPEN_OR_POSIX) || defined(_XPG4_2)... */
238
239 #endif /* __STDC__ */
240
241 /*
242 * ctime_r() & asctime_r() prototypes are defined here.
243 */
244
245 /*
246 * Previous releases of Solaris, starting at 2.3, provided definitions of
247 * various functions as specified in POSIX.1c, Draft 6. For some of these
248 * functions, the final POSIX 1003.1c standard had a different number of
249 * arguments and return values.
250 *
251 * The following segment of this header provides support for the standard
252 * interfaces while supporting applications written under earlier
253 * releases. The application defines appropriate values of the feature
254 * test macros _POSIX_C_SOURCE and _POSIX_PTHREAD_SEMANTICS to indicate
255 * whether it was written to expect the Draft 6 or standard versions of
256 * these interfaces, before including this header. This header then
257 * provides a mapping from the source version of the interface to an
258 * appropriate binary interface. Such mappings permit an application
259 * to be built from libraries and objects which have mixed expectations
260 * of the definitions of these functions.
261 *
262 * For applications using the Draft 6 definitions, the binary symbol is the
263 * same as the source symbol, and no explicit mapping is needed. For the
264 * standard interface, the function func() is mapped to the binary symbol
265 * _posix_func(). The preferred mechanism for the remapping is a compiler
266 * #pragma. If the compiler does not provide such a #pragma, the header file
267 * defines a static function func() which calls the _posix_func() version;
268 * this has to be done instead of #define since POSIX specifies that an
269 * application can #undef the symbol and still be bound to the correct
270 * implementation. Unfortunately, the statics confuse lint so we fallback to
271 * #define in that case.
272 *
273 * NOTE: Support for the Draft 6 definitions is provided for compatibility
274 * only. New applications/libraries should use the standard definitions.
275 */
276
277 #if defined(__EXTENSIONS__) || defined(_REENTRANT) || \
278 (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
279 (_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS)
280
281 #if defined(__STDC__)
282
283 #if (_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS)
284
285 #ifdef __PRAGMA_REDEFINE_EXTNAME
286 #pragma redefine_extname ctime_r __posix_ctime_r
287 #pragma redefine_extname asctime_r __posix_asctime_r
288 extern char *asctime_r(const struct tm *_RESTRICT_KYWD, char *_RESTRICT_KYWD);
289 extern char *ctime_r(const time_t *, char *);
290 #else /* __PRAGMA_REDEFINE_EXTNAME */
291
292 extern char *__posix_asctime_r(const struct tm *_RESTRICT_KYWD,
293 char *_RESTRICT_KYWD);
294 extern char *__posix_ctime_r(const time_t *, char *);
295
296 #ifdef __lint
297
298 #define ctime_r __posix_ctime_r
299 #define asctime_r __posix_asctime_r
300
301 #else /* !__lint */
302
305 {
306 return (__posix_asctime_r(__tm, __buf));
307 }
308
309 static char *
310 ctime_r(const time_t *__time, char *__buf)
311 {
312 return (__posix_ctime_r(__time, __buf));
313 }
314
315 #endif /* !__lint */
316 #endif /* __PRAGMA_REDEFINE_EXTNAME */
317
318 #else /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
319
320 extern char *asctime_r(const struct tm *, char *, int);
321 extern char *ctime_r(const time_t *, char *, int);
322
323 #endif /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
324
325 #else /* __STDC__ */
326
327 #if (_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS)
328
329 #ifdef __PRAGMA_REDEFINE_EXTNAME
330 #pragma redefine_extname asctime_r __posix_asctime_r
331 #pragma redefine_extname ctime_r __posix_ctime_r
332 extern char *asctime_r();
333 extern char *ctime_r();
334 #else /* __PRAGMA_REDEFINE_EXTNAME */
335
336 extern char *__posix_asctime_r();
337 extern char *__posix_ctime_r();
338
339 #ifdef __lint
340
341 #define asctime_r __posix_asctime_r
342 #define ctime_r __posix_ctime_r
343
344 #else /* !__lint */
345
346 static char *
347 asctime_r(__tm, __buf)
348 struct tm *__tm;
349 char *__buf;
350 {
351 return (__posix_asctime_r(__tm, __buf));
352 }
353 static char *
354 ctime_r(__time, __buf)
355 time_t *__time;
356 char *__buf;
357 {
358 return (__posix_ctime_r(__time, __buf));
359 }
360
361 #endif /* !__lint */
362 #endif /* __PRAGMA_REDEFINE_EXTNAME */
363
364 #else /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
365
366 extern char *asctime_r();
367 extern char *ctime_r();
368
369 #endif /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
370
371 #endif /* __STDC__ */
372
373 #endif /* defined(__EXTENSIONS__) || defined(_REENTRANT)... */
374
375
376 #if defined(_XPG7) || !defined(_STRICT_SYMBOLS)
377
378 #ifndef _LOCALE_T
379 #define _LOCALE_T
380 typedef struct _locale *locale_t;
381 #endif
382
383 #if defined(__STDC__)
384 extern size_t strftime_l(char *_RESTRICT_KYWD, size_t,
385 const char *_RESTRICT_KYWD, const struct tm *_RESTRICT_KYWD, locale_t);
386 #else /* __STDC__ */
387 extern size_t strftime_l();
388 #endif /* __STDC__ */
389
390 #endif /* defined(_XPG7) || !defined(_STRICT_SYMBOLS) */
391
392 #ifdef __cplusplus
393 }
394 #endif
395
396 #endif /* _TIME_H */
|
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /* Copyright (c) 1988 AT&T */
22 /* All Rights Reserved */
23
24
25 /*
26 * Copyright 2014 Garrett D'Amore <garrett@damore.org>
27 *
28 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
29 * Use is subject to license terms.
30 */
31 /*
32 * Copyright 2010 Nexenta Systems, Inc. Al rights reserved.
33 */
34
35 #ifndef _TIME_H
36 #define _TIME_H
37
38 #include <sys/feature_tests.h>
39 #include <iso/time_iso.h>
40 #if (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
41 (_POSIX_C_SOURCE > 2) || defined(__EXTENSIONS__)
42 #include <sys/types.h>
43 #include <sys/time_impl.h>
44 #endif /* (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) ... */
45
46 /*
47 * Allow global visibility for symbols defined in
48 * C++ "std" namespace in <iso/time_iso.h>.
49 */
50 #if __cplusplus >= 199711L
51 using std::size_t;
52 using std::clock_t;
60 using std::localtime;
61 using std::mktime;
62 using std::time;
63 using std::strftime;
64 #endif
65
66 #ifdef __cplusplus
67 extern "C" {
68 #endif
69
70 #ifndef _CLOCKID_T
71 #define _CLOCKID_T
72 typedef int clockid_t;
73 #endif
74
75 #ifndef _TIMER_T
76 #define _TIMER_T
77 typedef int timer_t;
78 #endif
79
80 #if defined(__EXTENSIONS__) || \
81 (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
82 (_POSIX_C_SOURCE - 0 >= 199506L) || defined(_REENTRANT)
83 extern struct tm *gmtime_r(const time_t *_RESTRICT_KYWD,
84 struct tm *_RESTRICT_KYWD);
85 extern struct tm *localtime_r(const time_t *_RESTRICT_KYWD,
86 struct tm *_RESTRICT_KYWD);
87 #endif
88
89 #if (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
90 defined(_XPG4) || defined(__EXTENSIONS__)
91
92 #ifdef _STRPTIME_DONTZERO
93 #ifdef __PRAGMA_REDEFINE_EXTNAME
94 #pragma redefine_extname strptime __strptime_dontzero
95 #else /* __PRAGMA_REDEFINE_EXTNAME */
96 extern char *__strptime_dontzero(const char *, const char *, struct tm *);
97 #define strptime __strptime_dontzero
98 #endif /* __PRAGMA_REDEFINE_EXTNAME */
99 #endif /* _STRPTIME_DONTZERO */
179 #if (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
180 defined(__EXTENSIONS__)
181 extern time_t timegm(struct tm *);
182 extern int cftime(char *, char *, const time_t *);
183 extern int ascftime(char *, const char *, const struct tm *);
184 extern long altzone;
185 #endif
186
187 #if (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
188 defined(_XPG4_2) || defined(__EXTENSIONS__)
189 extern struct tm *getdate(const char *);
190 #ifdef _REENTRANT
191 #undef getdate_err
192 #define getdate_err *(int *)_getdate_err_addr()
193 extern int *_getdate_err_addr(void);
194 #else
195 extern int getdate_err;
196 #endif /* _REENTRANT */
197 #endif /* (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX))... */
198
199 /*
200 * ctime_r() & asctime_r() prototypes are defined here.
201 */
202
203 /*
204 * Previous releases of Solaris, starting at 2.3, provided definitions of
205 * various functions as specified in POSIX.1c, Draft 6. For some of these
206 * functions, the final POSIX 1003.1c standard had a different number of
207 * arguments and return values.
208 *
209 * The following segment of this header provides support for the standard
210 * interfaces while supporting applications written under earlier
211 * releases. The application defines appropriate values of the feature
212 * test macros _POSIX_C_SOURCE and _POSIX_PTHREAD_SEMANTICS to indicate
213 * whether it was written to expect the Draft 6 or standard versions of
214 * these interfaces, before including this header. This header then
215 * provides a mapping from the source version of the interface to an
216 * appropriate binary interface. Such mappings permit an application
217 * to be built from libraries and objects which have mixed expectations
218 * of the definitions of these functions.
219 *
220 * For applications using the Draft 6 definitions, the binary symbol is the
221 * same as the source symbol, and no explicit mapping is needed. For the
222 * standard interface, the function func() is mapped to the binary symbol
223 * _posix_func(). The preferred mechanism for the remapping is a compiler
224 * #pragma. If the compiler does not provide such a #pragma, the header file
225 * defines a static function func() which calls the _posix_func() version;
226 * this has to be done instead of #define since POSIX specifies that an
227 * application can #undef the symbol and still be bound to the correct
228 * implementation. Unfortunately, the statics confuse lint so we fallback to
229 * #define in that case.
230 *
231 * NOTE: Support for the Draft 6 definitions is provided for compatibility
232 * only. New applications/libraries should use the standard definitions.
233 */
234
235 #if defined(__EXTENSIONS__) || defined(_REENTRANT) || \
236 (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
237 (_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS)
238
239 #if (_POSIX_C_SOURCE - 0 >= 199506L) || defined(_POSIX_PTHREAD_SEMANTICS)
240
241 #ifdef __PRAGMA_REDEFINE_EXTNAME
242 #pragma redefine_extname ctime_r __posix_ctime_r
243 #pragma redefine_extname asctime_r __posix_asctime_r
244 extern char *asctime_r(const struct tm *_RESTRICT_KYWD, char *_RESTRICT_KYWD);
245 extern char *ctime_r(const time_t *, char *);
246 #else /* __PRAGMA_REDEFINE_EXTNAME */
247
248 extern char *__posix_asctime_r(const struct tm *_RESTRICT_KYWD,
249 char *_RESTRICT_KYWD);
250 extern char *__posix_ctime_r(const time_t *, char *);
251
252 #ifdef __lint
253
254 #define ctime_r __posix_ctime_r
255 #define asctime_r __posix_asctime_r
256
257 #else /* !__lint */
258
261 {
262 return (__posix_asctime_r(__tm, __buf));
263 }
264
265 static char *
266 ctime_r(const time_t *__time, char *__buf)
267 {
268 return (__posix_ctime_r(__time, __buf));
269 }
270
271 #endif /* !__lint */
272 #endif /* __PRAGMA_REDEFINE_EXTNAME */
273
274 #else /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
275
276 extern char *asctime_r(const struct tm *, char *, int);
277 extern char *ctime_r(const time_t *, char *, int);
278
279 #endif /* (_POSIX_C_SOURCE - 0 >= 199506L) || ... */
280
281 #endif /* defined(__EXTENSIONS__) || defined(_REENTRANT)... */
282
283
284 #if defined(_XPG7) || !defined(_STRICT_SYMBOLS)
285
286 #ifndef _LOCALE_T
287 #define _LOCALE_T
288 typedef struct _locale *locale_t;
289 #endif
290
291 extern size_t strftime_l(char *_RESTRICT_KYWD, size_t,
292 const char *_RESTRICT_KYWD, const struct tm *_RESTRICT_KYWD, locale_t);
293
294 #endif /* defined(_XPG7) || !defined(_STRICT_SYMBOLS) */
295
296 #ifdef __cplusplus
297 }
298 #endif
299
300 #endif /* _TIME_H */
|