summaryrefslogtreecommitdiffstats
path: root/gl/time.in.h
diff options
context:
space:
mode:
Diffstat (limited to 'gl/time.in.h')
-rw-r--r--gl/time.in.h142
1 files changed, 137 insertions, 5 deletions
diff --git a/gl/time.in.h b/gl/time.in.h
index 50c9b30..df99c8a 100644
--- a/gl/time.in.h
+++ b/gl/time.in.h
@@ -1,6 +1,6 @@
1/* A more-standard <time.h>. 1/* A more-standard <time.h>.
2 2
3 Copyright (C) 2007-2023 Free Software Foundation, Inc. 3 Copyright (C) 2007-2024 Free Software Foundation, Inc.
4 4
5 This file is free software: you can redistribute it and/or modify 5 This file is free software: you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as 6 it under the terms of the GNU Lesser General Public License as
@@ -20,6 +20,13 @@
20#endif 20#endif
21@PRAGMA_COLUMNS@ 21@PRAGMA_COLUMNS@
22 22
23/* This file uses #include_next of a system file that defines time_t.
24 For the 'year2038' module to work right, <config.h> needs to have been
25 included before. */
26#if !_GL_CONFIG_H_INCLUDED
27 #error "Please include config.h first."
28#endif
29
23/* Don't get in the way of glibc when it includes time.h merely to 30/* Don't get in the way of glibc when it includes time.h merely to
24 declare a few standard symbols, rather than to declare all the 31 declare a few standard symbols, rather than to declare all the
25 symbols. (However, skip this for MinGW as it treats __need_time_t 32 symbols. (However, skip this for MinGW as it treats __need_time_t
@@ -45,6 +52,12 @@
45 52
46# @INCLUDE_NEXT@ @NEXT_TIME_H@ 53# @INCLUDE_NEXT@ @NEXT_TIME_H@
47 54
55/* This file uses _GL_ATTRIBUTE_DEPRECATED, GNULIB_POSIXCHECK,
56 HAVE_RAW_DECL_*. */
57# if !_GL_CONFIG_H_INCLUDED
58# error "Please include config.h first."
59# endif
60
48/* NetBSD 5.0 mis-defines NULL. */ 61/* NetBSD 5.0 mis-defines NULL. */
49# include <stddef.h> 62# include <stddef.h>
50 63
@@ -112,23 +125,79 @@ struct __time_t_must_be_integral {
112/* Set *TS to the current time, and return BASE. 125/* Set *TS to the current time, and return BASE.
113 Upon failure, return 0. */ 126 Upon failure, return 0. */
114# if @GNULIB_TIMESPEC_GET@ 127# if @GNULIB_TIMESPEC_GET@
115# if ! @HAVE_TIMESPEC_GET@ 128# if @REPLACE_TIMESPEC_GET@
129# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
130# undef timespec_get
131# define timespec_get rpl_timespec_get
132# endif
133_GL_FUNCDECL_RPL (timespec_get, int, (struct timespec *ts, int base)
134 _GL_ARG_NONNULL ((1)));
135_GL_CXXALIAS_RPL (timespec_get, int, (struct timespec *ts, int base));
136# else
137# if !@HAVE_TIMESPEC_GET@
116_GL_FUNCDECL_SYS (timespec_get, int, (struct timespec *ts, int base) 138_GL_FUNCDECL_SYS (timespec_get, int, (struct timespec *ts, int base)
117 _GL_ARG_NONNULL ((1))); 139 _GL_ARG_NONNULL ((1)));
118# endif 140# endif
119_GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, int base)); 141_GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, int base));
142# endif
143# if __GLIBC__ >= 2
120_GL_CXXALIASWARN (timespec_get); 144_GL_CXXALIASWARN (timespec_get);
145# endif
146# elif defined GNULIB_POSIXCHECK
147# undef timespec_get
148# if HAVE_RAW_DECL_TIMESPEC_GET
149_GL_WARN_ON_USE (timespec_get, "timespec_get is unportable - "
150 "use gnulib module timespec_get for portability");
151# endif
121# endif 152# endif
122 153
123/* Set *TS to the current time resolution, and return BASE. 154/* Set *TS to the current time resolution, and return BASE.
124 Upon failure, return 0. */ 155 Upon failure, return 0. */
125# if @GNULIB_TIMESPEC_GETRES@ 156# if @GNULIB_TIMESPEC_GETRES@
126# if ! @HAVE_TIMESPEC_GETRES@ 157# if @REPLACE_TIMESPEC_GETRES@
158# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
159# undef timespec_getres
160# define timespec_getres rpl_timespec_getres
161# endif
162_GL_FUNCDECL_RPL (timespec_getres, int, (struct timespec *ts, int base)
163 _GL_ARG_NONNULL ((1)));
164_GL_CXXALIAS_RPL (timespec_getres, int, (struct timespec *ts, int base));
165# else
166# if !@HAVE_TIMESPEC_GETRES@
127_GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base) 167_GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base)
128 _GL_ARG_NONNULL ((1))); 168 _GL_ARG_NONNULL ((1)));
129# endif 169# endif
130_GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base)); 170_GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base));
171# endif
131_GL_CXXALIASWARN (timespec_getres); 172_GL_CXXALIASWARN (timespec_getres);
173# elif defined GNULIB_POSIXCHECK
174# undef timespec_getres
175# if HAVE_RAW_DECL_TIMESPEC_GETRES
176_GL_WARN_ON_USE (timespec_getres, "timespec_getres is unportable - "
177 "use gnulib module timespec_getres for portability");
178# endif
179# endif
180
181/* Return the number of seconds that have elapsed since the Epoch. */
182# if @GNULIB_TIME@
183# if @REPLACE_TIME@
184# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
185# define time rpl_time
186# endif
187_GL_FUNCDECL_RPL (time, time_t, (time_t *__tp));
188_GL_CXXALIAS_RPL (time, time_t, (time_t *__tp));
189# else
190_GL_CXXALIAS_SYS (time, time_t, (time_t *__tp));
191# endif
192# if __GLIBC__ >= 2
193_GL_CXXALIASWARN (time);
194# endif
195# elif defined GNULIB_POSIXCHECK
196# undef time
197# if HAVE_RAW_DECL_TIME
198_GL_WARN_ON_USE (time, "time has consistency problems - "
199 "use gnulib module time for portability");
200# endif
132# endif 201# endif
133 202
134/* Sleep for at least RQTP seconds unless interrupted, If interrupted, 203/* Sleep for at least RQTP seconds unless interrupted, If interrupted,
@@ -154,6 +223,12 @@ _GL_CXXALIAS_SYS (nanosleep, int,
154 (struct timespec const *__rqtp, struct timespec *__rmtp)); 223 (struct timespec const *__rqtp, struct timespec *__rmtp));
155# endif 224# endif
156_GL_CXXALIASWARN (nanosleep); 225_GL_CXXALIASWARN (nanosleep);
226# elif defined GNULIB_POSIXCHECK
227# undef nanosleep
228# if HAVE_RAW_DECL_NANOSLEEP
229_GL_WARN_ON_USE (nanosleep, "nanosleep is unportable - "
230 "use gnulib module nanosleep for portability");
231# endif
157# endif 232# endif
158 233
159/* Initialize time conversion information. */ 234/* Initialize time conversion information. */
@@ -189,6 +264,12 @@ _GL_CXXALIAS_MDA (tzset, void, (void));
189_GL_CXXALIAS_SYS (tzset, void, (void)); 264_GL_CXXALIAS_SYS (tzset, void, (void));
190# endif 265# endif
191_GL_CXXALIASWARN (tzset); 266_GL_CXXALIASWARN (tzset);
267# elif defined GNULIB_POSIXCHECK
268# undef tzset
269# if HAVE_RAW_DECL_TZSET
270_GL_WARN_ON_USE (tzset, "tzset has portability problems - "
271 "use gnulib module tzset for portability");
272# endif
192# endif 273# endif
193 274
194/* Return the 'time_t' representation of TP and normalize TP. */ 275/* Return the 'time_t' representation of TP and normalize TP. */
@@ -205,6 +286,12 @@ _GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp));
205# if __GLIBC__ >= 2 286# if __GLIBC__ >= 2
206_GL_CXXALIASWARN (mktime); 287_GL_CXXALIASWARN (mktime);
207# endif 288# endif
289# elif defined GNULIB_POSIXCHECK
290# undef mktime
291# if HAVE_RAW_DECL_MKTIME
292_GL_WARN_ON_USE (mktime, "mktime has portability problems - "
293 "use gnulib module mktime for portability");
294# endif
208# endif 295# endif
209 296
210/* Convert TIMER to RESULT, assuming local time and UTC respectively. See 297/* Convert TIMER to RESULT, assuming local time and UTC respectively. See
@@ -255,6 +342,17 @@ _GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
255# if @HAVE_DECL_LOCALTIME_R@ 342# if @HAVE_DECL_LOCALTIME_R@
256_GL_CXXALIASWARN (gmtime_r); 343_GL_CXXALIASWARN (gmtime_r);
257# endif 344# endif
345# elif defined GNULIB_POSIXCHECK
346# undef localtime_r
347# if HAVE_RAW_DECL_LOCALTIME_R
348_GL_WARN_ON_USE (localtime_r, "localtime_r is unportable - "
349 "use gnulib module time_r for portability");
350# endif
351# undef gmtime_r
352# if HAVE_RAW_DECL_GMTIME_R
353_GL_WARN_ON_USE (gmtime_r, "gmtime_r is unportable - "
354 "use gnulib module time_r for portability");
355# endif
258# endif 356# endif
259 357
260/* Convert TIMER to RESULT, assuming local time and UTC respectively. See 358/* Convert TIMER to RESULT, assuming local time and UTC respectively. See
@@ -275,6 +373,12 @@ _GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer));
275# if __GLIBC__ >= 2 373# if __GLIBC__ >= 2
276_GL_CXXALIASWARN (localtime); 374_GL_CXXALIASWARN (localtime);
277# endif 375# endif
376# elif defined GNULIB_POSIXCHECK
377# undef localtime
378# if HAVE_RAW_DECL_LOCALTIME
379_GL_WARN_ON_USE (localtime, "localtime has portability problems - "
380 "use gnulib module localtime for portability");
381# endif
278# endif 382# endif
279 383
280# if 0 || @REPLACE_GMTIME@ 384# if 0 || @REPLACE_GMTIME@
@@ -306,6 +410,12 @@ _GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf,
306 char const *restrict __format, 410 char const *restrict __format,
307 struct tm *restrict __tm)); 411 struct tm *restrict __tm));
308_GL_CXXALIASWARN (strptime); 412_GL_CXXALIASWARN (strptime);
413# elif defined GNULIB_POSIXCHECK
414# undef strptime
415# if HAVE_RAW_DECL_STRPTIME
416_GL_WARN_ON_USE (strptime, "strptime is unportable - "
417 "use gnulib module strptime for portability");
418# endif
309# endif 419# endif
310 420
311/* Convert *TP to a date and time string. See 421/* Convert *TP to a date and time string. See
@@ -315,7 +425,9 @@ _GL_CXXALIASWARN (strptime);
315# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 425# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
316# define ctime rpl_ctime 426# define ctime rpl_ctime
317# endif 427# endif
428# ifndef __cplusplus
318_GL_ATTRIBUTE_DEPRECATED 429_GL_ATTRIBUTE_DEPRECATED
430# endif
319_GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp) 431_GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp)
320 _GL_ARG_NONNULL ((1))); 432 _GL_ARG_NONNULL ((1)));
321_GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp)); 433_GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp));
@@ -325,6 +437,8 @@ _GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp));
325# if __GLIBC__ >= 2 437# if __GLIBC__ >= 2
326_GL_CXXALIASWARN (ctime); 438_GL_CXXALIASWARN (ctime);
327# endif 439# endif
440# elif defined GNULIB_POSIXCHECK
441/* No need to warn about portability, as a more serious warning is below. */
328# endif 442# endif
329 443
330/* Convert *TP to a date and time string. See 444/* Convert *TP to a date and time string. See
@@ -349,6 +463,12 @@ _GL_CXXALIAS_SYS (strftime, size_t,
349# if __GLIBC__ >= 2 463# if __GLIBC__ >= 2
350_GL_CXXALIASWARN (strftime); 464_GL_CXXALIASWARN (strftime);
351# endif 465# endif
466# elif defined GNULIB_POSIXCHECK
467# undef strftime
468# if HAVE_RAW_DECL_STRFTIME
469_GL_WARN_ON_USE (strftime, "strftime has portability problems - "
470 "use gnulib module strftime-fixes for portability");
471# endif
352# endif 472# endif
353 473
354# if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@ 474# if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@
@@ -423,7 +543,15 @@ _GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
423# endif 543# endif
424_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); 544_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm));
425# endif 545# endif
546# if __GLIBC__ >= 2
426_GL_CXXALIASWARN (timegm); 547_GL_CXXALIASWARN (timegm);
548# endif
549# elif defined GNULIB_POSIXCHECK
550# undef timegm
551# if HAVE_RAW_DECL_TIMEGM
552_GL_WARN_ON_USE (timegm, "timegm is unportable - "
553 "use gnulib module timegm for portability");
554# endif
427# endif 555# endif
428 556
429/* Encourage applications to avoid unsafe functions that can overrun 557/* Encourage applications to avoid unsafe functions that can overrun
@@ -431,8 +559,10 @@ _GL_CXXALIASWARN (timegm);
431 applications should use strftime (or even sprintf) instead. */ 559 applications should use strftime (or even sprintf) instead. */
432# if defined GNULIB_POSIXCHECK 560# if defined GNULIB_POSIXCHECK
433# undef asctime 561# undef asctime
562# if HAVE_RAW_DECL_ASCTIME
434_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " 563_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - "
435 "better use strftime (or even sprintf) instead"); 564 "better use strftime (or even sprintf) instead");
565# endif
436# endif 566# endif
437# if defined GNULIB_POSIXCHECK 567# if defined GNULIB_POSIXCHECK
438# undef asctime_r 568# undef asctime_r
@@ -443,8 +573,10 @@ _GL_WARN_ON_USE (asctime_r, "asctime_r can overrun buffers in some cases - "
443# endif 573# endif
444# if defined GNULIB_POSIXCHECK 574# if defined GNULIB_POSIXCHECK
445# undef ctime 575# undef ctime
576# if HAVE_RAW_DECL_CTIME
446_GL_WARN_ON_USE (ctime, "ctime can overrun buffers in some cases - " 577_GL_WARN_ON_USE (ctime, "ctime can overrun buffers in some cases - "
447 "better use strftime (or even sprintf) instead"); 578 "better use strftime (or even sprintf) instead");
579# endif
448# endif 580# endif
449# if defined GNULIB_POSIXCHECK 581# if defined GNULIB_POSIXCHECK
450# undef ctime_r 582# undef ctime_r