Print this page
remove support for non-ANSI compilation


   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 */