1/* A more-standard <time.h>. 2 3 Copyright (C) 2007 Free Software Foundation, Inc. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 2, or (at your option) 8 any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, write to the Free Software Foundation, 17 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ 18 19/* Don't get in the way of glibc when it includes time.h merely to 20 declare a few standard symbols, rather than to declare all the 21 symbols. */ 22#if defined __need_time_t || defined __need_clock_t || defined __need_timespec 23 24# if @HAVE_INCLUDE_NEXT@ 25# include_next <time.h> 26# else 27# include @ABSOLUTE_TIME_H@ 28# endif 29 30#else 31/* Normal invocation convention. */ 32 33# if ! defined _GL_TIME_H 34 35/* The include_next requires a split double-inclusion guard. */ 36# if @HAVE_INCLUDE_NEXT@ 37# include_next <time.h> 38# else 39# include @ABSOLUTE_TIME_H@ 40# endif 41 42# if ! defined _GL_TIME_H 43# define _GL_TIME_H 44 45# ifdef __cplusplus 46extern "C" { 47# endif 48 49/* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3). 50 Or they define it with the wrong member names or define it in <sys/time.h> 51 (e.g., FreeBSD circa 1997). */ 52# if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@ 53# if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ 54# include <sys/time.h> 55# else 56# undef timespec 57# define timespec rpl_timespec 58struct timespec 59{ 60 time_t tv_sec; 61 long int tv_nsec; 62}; 63# endif 64# endif 65 66/* Sleep for at least RQTP seconds unless interrupted, If interrupted, 67 return -1 and store the remaining time into RMTP. See 68 <http://www.opengroup.org/susv3xsh/nanosleep.html>. */ 69# if @REPLACE_NANOSLEEP@ 70# define nanosleep rpl_nanosleep 71int nanosleep (struct timespec const *__rqtp, struct timespec *__rmtp); 72# endif 73 74/* Convert TIMER to RESULT, assuming local time and UTC respectively. See 75 <http://www.opengroup.org/susv3xsh/localtime_r.html> and 76 <http://www.opengroup.org/susv3xsh/gmtime_r.html>. */ 77# if @REPLACE_LOCALTIME_R@ 78# undef localtime_r 79# define localtime_r rpl_localtime_r 80# undef gmtime_r 81# define gmtime_r rpl_gmtime_r 82struct tm *localtime_r (time_t const *restrict __timer, 83 struct tm *restrict __result); 84struct tm *gmtime_r (time_t const *restrict __timer, 85 struct tm *restrict __result); 86# endif 87 88/* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store 89 the resulting broken-down time into TM. See 90 <http://www.opengroup.org/susv3xsh/strptime.html>. */ 91# if @REPLACE_STRPTIME@ 92# undef strptime 93# define strptime rpl_strptime 94char *strptime (char const *restrict __buf, char const *restrict __format, 95 struct tm *restrict __tm); 96# endif 97 98/* Convert TM to a time_t value, assuming UTC. */ 99# if @REPLACE_TIMEGM@ 100# undef timegm 101# define timegm rpl_timegm 102time_t timegm (struct tm *__tm); 103# endif 104 105/* Encourage applications to avoid unsafe functions that can overrun 106 buffers when given outlandish struct tm values. Portable 107 applications should use strftime (or even sprintf) instead. */ 108# if GNULIB_PORTCHECK 109# undef asctime 110# define asctime eschew_asctime 111# undef asctime_r 112# define asctime_r eschew_asctime_r 113# undef ctime 114# define ctime eschew_ctime 115# undef ctime_r 116# define ctime_r eschew_ctime_r 117# endif 118 119# ifdef __cplusplus 120} 121# endif 122 123# endif /* _GL_TIME_H */ 124# endif /* _GL_TIME_H */ 125#endif 126