root/lib/time.in.h

/* [<][>][^][v][top][bottom][index][help] */
     1 /* A more-standard <time.h>.
     2 
     3    Copyright (C) 2007-2023 Free Software Foundation, Inc.
     4 
     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
     7    published by the Free Software Foundation; either version 2.1 of the
     8    License, or (at your option) any later version.
     9 
    10    This file 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 Lesser General Public License for more details.
    14 
    15    You should have received a copy of the GNU Lesser General Public License
    16    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
    17 
    18 #if __GNUC__ >= 3
    19 @PRAGMA_SYSTEM_HEADER@
    20 #endif
    21 @PRAGMA_COLUMNS@
    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 
    30 /* Don't get in the way of glibc when it includes time.h merely to
    31    declare a few standard symbols, rather than to declare all the
    32    symbols.  (However, skip this for MinGW as it treats __need_time_t
    33    incompatibly.)  Also, Solaris 8 <time.h> eventually includes itself
    34    recursively; if that is happening, just include the system <time.h>
    35    without adding our own declarations.  */
    36 #if (((defined __need_time_t || defined __need_clock_t \
    37        || defined __need_timespec)                     \
    38       && !defined __MINGW32__)                         \
    39      || defined _@GUARD_PREFIX@_TIME_H)
    40 
    41 # @INCLUDE_NEXT@ @NEXT_TIME_H@
    42 
    43 #else
    44 
    45 # define _@GUARD_PREFIX@_TIME_H
    46 
    47 /* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r,
    48    localtime_r only if <unistd.h> or <pthread.h> has been included before.  */
    49 # if defined __MINGW32__
    50 #  include <unistd.h>
    51 # endif
    52 
    53 # @INCLUDE_NEXT@ @NEXT_TIME_H@
    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 
    61 /* NetBSD 5.0 mis-defines NULL.  */
    62 # include <stddef.h>
    63 
    64 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
    65 
    66 /* The definition of _GL_ARG_NONNULL is copied here.  */
    67 
    68 /* The definition of _GL_WARN_ON_USE is copied here.  */
    69 
    70 /* Some systems don't define struct timespec (e.g., AIX 4.1).
    71    Or they define it with the wrong member names or define it in <sys/time.h>
    72    (e.g., FreeBSD circa 1997).  Stock Mingw prior to 3.0 does not define it,
    73    but the pthreads-win32 library defines it in <pthread.h>.  */
    74 # if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@
    75 #  if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
    76 #   include <sys/time.h>
    77 #  elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
    78 #   include <pthread.h>
    79 #  elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
    80 #   include <unistd.h>
    81 #  else
    82 
    83 #   ifdef __cplusplus
    84 extern "C" {
    85 #   endif
    86 
    87 #   if !GNULIB_defined_struct_timespec
    88 #    undef timespec
    89 #    define timespec rpl_timespec
    90 struct timespec
    91 {
    92   time_t tv_sec;
    93   long int tv_nsec;
    94 };
    95 #    define GNULIB_defined_struct_timespec 1
    96 #   endif
    97 
    98 #   ifdef __cplusplus
    99 }
   100 #   endif
   101 
   102 #  endif
   103 # endif
   104 
   105 # if !GNULIB_defined_struct_time_t_must_be_integral
   106 /* https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html
   107    requires time_t to be an integer type, even though C99 permits floating
   108    point.  We don't know of any implementation that uses floating
   109    point, and it is much easier to write code that doesn't have to
   110    worry about that corner case, so we force the issue.  */
   111 struct __time_t_must_be_integral {
   112   unsigned int __floating_time_t_unsupported : (time_t) 1;
   113 };
   114 #  define GNULIB_defined_struct_time_t_must_be_integral 1
   115 # endif
   116 
   117 /* Define TIME_UTC, a positive integer constant used for timespec_get().  */
   118 # if ! @TIME_H_DEFINES_TIME_UTC@
   119 #  if !GNULIB_defined_TIME_UTC
   120 #   define TIME_UTC 1
   121 #   define GNULIB_defined_TIME_UTC 1
   122 #  endif
   123 # endif
   124 
   125 /* Set *TS to the current time, and return BASE.
   126    Upon failure, return 0.  */
   127 # if @GNULIB_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@
   138 _GL_FUNCDECL_SYS (timespec_get, int, (struct timespec *ts, int base)
   139                                      _GL_ARG_NONNULL ((1)));
   140 #   endif
   141 _GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, int base));
   142 #  endif
   143 #  if __GLIBC__ >= 2
   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
   152 # endif
   153 
   154 /* Set *TS to the current time resolution, and return BASE.
   155    Upon failure, return 0.  */
   156 # if @GNULIB_TIMESPEC_GETRES@
   157 #  if ! @HAVE_TIMESPEC_GETRES@
   158 _GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base)
   159                                         _GL_ARG_NONNULL ((1)));
   160 #  endif
   161 _GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base));
   162 _GL_CXXALIASWARN (timespec_getres);
   163 # elif defined GNULIB_POSIXCHECK
   164 #  undef timespec_getres
   165 #  if HAVE_RAW_DECL_TIMESPEC_GETRES
   166 _GL_WARN_ON_USE (timespec_getres, "timespec_getres is unportable - "
   167                  "use gnulib module timespec_getres for portability");
   168 #  endif
   169 # endif
   170 
   171 /* Return the number of seconds that have elapsed since the Epoch.  */
   172 # if @GNULIB_TIME@
   173 #  if @REPLACE_TIME@
   174 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   175 #    define time rpl_time
   176 #   endif
   177 _GL_FUNCDECL_RPL (time, time_t, (time_t *__tp));
   178 _GL_CXXALIAS_RPL (time, time_t, (time_t *__tp));
   179 #  else
   180 _GL_CXXALIAS_SYS (time, time_t, (time_t *__tp));
   181 #  endif
   182 #  if __GLIBC__ >= 2
   183 _GL_CXXALIASWARN (time);
   184 #  endif
   185 # elif defined GNULIB_POSIXCHECK
   186 #  undef time
   187 #  if HAVE_RAW_DECL_TIME
   188 _GL_WARN_ON_USE (time, "time has consistency problems - "
   189                  "use gnulib module time for portability");
   190 #  endif
   191 # endif
   192 
   193 /* Sleep for at least RQTP seconds unless interrupted,  If interrupted,
   194    return -1 and store the remaining time into RMTP.  See
   195    <https://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html>.  */
   196 # if @GNULIB_NANOSLEEP@
   197 #  if @REPLACE_NANOSLEEP@
   198 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   199 #    define nanosleep rpl_nanosleep
   200 #   endif
   201 _GL_FUNCDECL_RPL (nanosleep, int,
   202                   (struct timespec const *__rqtp, struct timespec *__rmtp)
   203                   _GL_ARG_NONNULL ((1)));
   204 _GL_CXXALIAS_RPL (nanosleep, int,
   205                   (struct timespec const *__rqtp, struct timespec *__rmtp));
   206 #  else
   207 #   if ! @HAVE_NANOSLEEP@
   208 _GL_FUNCDECL_SYS (nanosleep, int,
   209                   (struct timespec const *__rqtp, struct timespec *__rmtp)
   210                   _GL_ARG_NONNULL ((1)));
   211 #   endif
   212 _GL_CXXALIAS_SYS (nanosleep, int,
   213                   (struct timespec const *__rqtp, struct timespec *__rmtp));
   214 #  endif
   215 _GL_CXXALIASWARN (nanosleep);
   216 # elif defined GNULIB_POSIXCHECK
   217 #  undef nanosleep
   218 #  if HAVE_RAW_DECL_NANOSLEEP
   219 _GL_WARN_ON_USE (nanosleep, "nanosleep is unportable - "
   220                  "use gnulib module nanosleep for portability");
   221 #  endif
   222 # endif
   223 
   224 /* Initialize time conversion information.  */
   225 # if @GNULIB_TZSET@
   226 #  if @REPLACE_TZSET@
   227 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   228 #    undef tzset
   229 #    define tzset rpl_tzset
   230 #   endif
   231 _GL_FUNCDECL_RPL (tzset, void, (void));
   232 _GL_CXXALIAS_RPL (tzset, void, (void));
   233 #  elif defined _WIN32 && !defined __CYGWIN__
   234 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   235 #    undef tzset
   236 #    define tzset _tzset
   237 #   endif
   238 _GL_CXXALIAS_MDA (tzset, void, (void));
   239 #  else
   240 _GL_CXXALIAS_SYS (tzset, void, (void));
   241 #  endif
   242 _GL_CXXALIASWARN (tzset);
   243 # elif @GNULIB_MDA_TZSET@
   244 /* On native Windows, map 'tzset' to '_tzset', so that -loldnames is not
   245    required.  In C++ with GNULIB_NAMESPACE, avoid differences between
   246    platforms by defining GNULIB_NAMESPACE::tzset always.  */
   247 #  if defined _WIN32 && !defined __CYGWIN__
   248 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   249 #    undef tzset
   250 #    define tzset _tzset
   251 #   endif
   252 _GL_CXXALIAS_MDA (tzset, void, (void));
   253 #  else
   254 _GL_CXXALIAS_SYS (tzset, void, (void));
   255 #  endif
   256 _GL_CXXALIASWARN (tzset);
   257 # elif defined GNULIB_POSIXCHECK
   258 #  undef tzset
   259 #  if HAVE_RAW_DECL_TZSET
   260 _GL_WARN_ON_USE (tzset, "tzset has portability problems - "
   261                  "use gnulib module tzset for portability");
   262 #  endif
   263 # endif
   264 
   265 /* Return the 'time_t' representation of TP and normalize TP.  */
   266 # if @GNULIB_MKTIME@
   267 #  if @REPLACE_MKTIME@
   268 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   269 #    define mktime rpl_mktime
   270 #   endif
   271 _GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1)));
   272 _GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp));
   273 #  else
   274 _GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp));
   275 #  endif
   276 #  if __GLIBC__ >= 2
   277 _GL_CXXALIASWARN (mktime);
   278 #  endif
   279 # elif defined GNULIB_POSIXCHECK
   280 #  undef mktime
   281 #  if HAVE_RAW_DECL_MKTIME
   282 _GL_WARN_ON_USE (mktime, "mktime has portability problems - "
   283                  "use gnulib module mktime for portability");
   284 #  endif
   285 # endif
   286 
   287 /* Convert TIMER to RESULT, assuming local time and UTC respectively.  See
   288    <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime_r.html> and
   289    <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime_r.html>.  */
   290 # if @GNULIB_TIME_R@
   291 #  if @REPLACE_LOCALTIME_R@
   292 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   293 #    undef localtime_r
   294 #    define localtime_r rpl_localtime_r
   295 #   endif
   296 _GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
   297                                              struct tm *restrict __result)
   298                                             _GL_ARG_NONNULL ((1, 2)));
   299 _GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
   300                                              struct tm *restrict __result));
   301 #  else
   302 #   if ! @HAVE_DECL_LOCALTIME_R@
   303 _GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
   304                                              struct tm *restrict __result)
   305                                             _GL_ARG_NONNULL ((1, 2)));
   306 #   endif
   307 _GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
   308                                              struct tm *restrict __result));
   309 #  endif
   310 #  if @HAVE_DECL_LOCALTIME_R@
   311 _GL_CXXALIASWARN (localtime_r);
   312 #  endif
   313 #  if @REPLACE_LOCALTIME_R@
   314 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   315 #    undef gmtime_r
   316 #    define gmtime_r rpl_gmtime_r
   317 #   endif
   318 _GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
   319                                           struct tm *restrict __result)
   320                                          _GL_ARG_NONNULL ((1, 2)));
   321 _GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
   322                                           struct tm *restrict __result));
   323 #  else
   324 #   if ! @HAVE_DECL_LOCALTIME_R@
   325 _GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
   326                                           struct tm *restrict __result)
   327                                          _GL_ARG_NONNULL ((1, 2)));
   328 #   endif
   329 _GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
   330                                           struct tm *restrict __result));
   331 #  endif
   332 #  if @HAVE_DECL_LOCALTIME_R@
   333 _GL_CXXALIASWARN (gmtime_r);
   334 #  endif
   335 # elif defined GNULIB_POSIXCHECK
   336 #  undef localtime_r
   337 #  if HAVE_RAW_DECL_LOCALTIME_R
   338 _GL_WARN_ON_USE (localtime_r, "localtime_r is unportable - "
   339                  "use gnulib module time_r for portability");
   340 #  endif
   341 #  undef gmtime_r
   342 #  if HAVE_RAW_DECL_GMTIME_R
   343 _GL_WARN_ON_USE (gmtime_r, "gmtime_r is unportable - "
   344                  "use gnulib module time_r for portability");
   345 #  endif
   346 # endif
   347 
   348 /* Convert TIMER to RESULT, assuming local time and UTC respectively.  See
   349    <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime.html> and
   350    <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime.html>.  */
   351 # if @GNULIB_LOCALTIME@ || @REPLACE_LOCALTIME@
   352 #  if @REPLACE_LOCALTIME@
   353 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   354 #    undef localtime
   355 #    define localtime rpl_localtime
   356 #   endif
   357 _GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer)
   358                                           _GL_ARG_NONNULL ((1)));
   359 _GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer));
   360 #  else
   361 _GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer));
   362 #  endif
   363 #  if __GLIBC__ >= 2
   364 _GL_CXXALIASWARN (localtime);
   365 #  endif
   366 # elif defined GNULIB_POSIXCHECK
   367 #  undef localtime
   368 #  if HAVE_RAW_DECL_LOCALTIME
   369 _GL_WARN_ON_USE (localtime, "localtime has portability problems - "
   370                  "use gnulib module localtime for portability");
   371 #  endif
   372 # endif
   373 
   374 # if 0 || @REPLACE_GMTIME@
   375 #  if @REPLACE_GMTIME@
   376 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   377 #    undef gmtime
   378 #    define gmtime rpl_gmtime
   379 #   endif
   380 _GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer)
   381                                        _GL_ARG_NONNULL ((1)));
   382 _GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer));
   383 #  else
   384 _GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer));
   385 #  endif
   386 _GL_CXXALIASWARN (gmtime);
   387 # endif
   388 
   389 /* Parse BUF as a timestamp, assuming FORMAT specifies its layout, and store
   390    the resulting broken-down time into TM.  See
   391    <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html>.  */
   392 # if @GNULIB_STRPTIME@
   393 #  if ! @HAVE_STRPTIME@
   394 _GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf,
   395                                      char const *restrict __format,
   396                                      struct tm *restrict __tm)
   397                                     _GL_ARG_NONNULL ((1, 2, 3)));
   398 #  endif
   399 _GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf,
   400                                      char const *restrict __format,
   401                                      struct tm *restrict __tm));
   402 _GL_CXXALIASWARN (strptime);
   403 # elif defined GNULIB_POSIXCHECK
   404 #  undef strptime
   405 #  if HAVE_RAW_DECL_STRPTIME
   406 _GL_WARN_ON_USE (strptime, "strptime is unportable - "
   407                  "use gnulib module strptime for portability");
   408 #  endif
   409 # endif
   410 
   411 /* Convert *TP to a date and time string.  See
   412    <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctime.html>.  */
   413 # if @GNULIB_CTIME@
   414 #  if @REPLACE_CTIME@
   415 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   416 #    define ctime rpl_ctime
   417 #   endif
   418 #   ifndef __cplusplus
   419 _GL_ATTRIBUTE_DEPRECATED
   420 #   endif
   421 _GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp)
   422                                  _GL_ARG_NONNULL ((1)));
   423 _GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp));
   424 #  else
   425 _GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp));
   426 #  endif
   427 #  if __GLIBC__ >= 2
   428 _GL_CXXALIASWARN (ctime);
   429 #  endif
   430 # elif defined GNULIB_POSIXCHECK
   431 #  undef ctime
   432 #  if HAVE_RAW_DECL_CTIME
   433 _GL_WARN_ON_USE (ctime, "ctime has portability problems - "
   434                  "use gnulib module ctime for portability");
   435 #  endif
   436 # endif
   437 
   438 /* Convert *TP to a date and time string.  See
   439    <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html>.  */
   440 # if @GNULIB_STRFTIME@
   441 #  if @REPLACE_STRFTIME@
   442 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   443 #    define strftime rpl_strftime
   444 #   endif
   445 _GL_FUNCDECL_RPL (strftime, size_t,
   446                   (char *restrict __buf, size_t __bufsize,
   447                    const char *restrict __fmt, const struct tm *restrict __tp)
   448                   _GL_ARG_NONNULL ((1, 3, 4)));
   449 _GL_CXXALIAS_RPL (strftime, size_t,
   450                   (char *restrict __buf, size_t __bufsize,
   451                    const char *restrict __fmt, const struct tm *restrict __tp));
   452 #  else
   453 _GL_CXXALIAS_SYS (strftime, size_t,
   454                   (char *restrict __buf, size_t __bufsize,
   455                    const char *restrict __fmt, const struct tm *restrict __tp));
   456 #  endif
   457 #  if __GLIBC__ >= 2
   458 _GL_CXXALIASWARN (strftime);
   459 #  endif
   460 # elif defined GNULIB_POSIXCHECK
   461 #  undef strftime
   462 #  if HAVE_RAW_DECL_STRFTIME
   463 _GL_WARN_ON_USE (strftime, "strftime has portability problems - "
   464                  "use gnulib module strftime-fixes for portability");
   465 #  endif
   466 # endif
   467 
   468 # if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@
   469 /* Functions that use a first-class time zone data type, instead of
   470    relying on an implicit global time zone.
   471    Inspired by NetBSD.  */
   472 
   473 /* Represents a time zone.
   474    (timezone_t) NULL stands for UTC.  */
   475 typedef struct tm_zone *timezone_t;
   476 
   477 /* tzalloc (name)
   478    Returns a time zone object for the given time zone NAME.  This object
   479    represents the time zone that other functions would use it the TZ
   480    environment variable was set to NAME.
   481    If NAME is NULL, the result represents the time zone that other functions
   482    would use it the TZ environment variable was unset.
   483    May return NULL if NAME is invalid (this is platform dependent) or
   484    upon memory allocation failure.  */
   485 _GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name));
   486 _GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name));
   487 
   488 /* tzfree (tz)
   489    Frees a time zone object.
   490    The argument must have been returned by tzalloc().  */
   491 _GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz));
   492 _GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz));
   493 
   494 /* localtime_rz (tz, &t, &result)
   495    Converts an absolute time T to a broken-down time RESULT, assuming the
   496    time zone TZ.
   497    This function is like 'localtime_r', but relies on the argument TZ instead
   498    of an implicit global time zone.  */
   499 _GL_FUNCDECL_SYS (localtime_rz, struct tm *,
   500                   (timezone_t __tz, time_t const *restrict __timer,
   501                    struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3)));
   502 _GL_CXXALIAS_SYS (localtime_rz, struct tm *,
   503                   (timezone_t __tz, time_t const *restrict __timer,
   504                    struct tm *restrict __result));
   505 
   506 /* mktime_z (tz, &tm)
   507    Normalizes the broken-down time TM and converts it to an absolute time,
   508    assuming the time zone TZ.  Returns the absolute time.
   509    This function is like 'mktime', but relies on the argument TZ instead
   510    of an implicit global time zone.  */
   511 _GL_FUNCDECL_SYS (mktime_z, time_t,
   512                   (timezone_t __tz, struct tm *restrict __tm)
   513                   _GL_ARG_NONNULL ((2)));
   514 _GL_CXXALIAS_SYS (mktime_z, time_t,
   515                   (timezone_t __tz, struct tm *restrict __tm));
   516 
   517 /* Time zone abbreviation strings (returned by 'localtime_rz' or 'mktime_z'
   518    in the 'tm_zone' member of 'struct tm') are valid as long as
   519      - the 'struct tm' argument is not destroyed or overwritten,
   520    and
   521      - the 'timezone_t' argument is not freed through tzfree().  */
   522 
   523 # endif
   524 
   525 /* Convert TM to a time_t value, assuming UTC.  */
   526 # if @GNULIB_TIMEGM@
   527 #  if @REPLACE_TIMEGM@
   528 #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   529 #    undef timegm
   530 #    define timegm rpl_timegm
   531 #   endif
   532 _GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
   533 _GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm));
   534 #  else
   535 #   if ! @HAVE_TIMEGM@
   536 _GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
   537 #   endif
   538 _GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm));
   539 #  endif
   540 #  if __GLIBC__ >= 2
   541 _GL_CXXALIASWARN (timegm);
   542 #  endif
   543 # elif defined GNULIB_POSIXCHECK
   544 #  undef timegm
   545 #  if HAVE_RAW_DECL_TIMEGM
   546 _GL_WARN_ON_USE (timegm, "timegm is unportable - "
   547                  "use gnulib module timegm for portability");
   548 #  endif
   549 # endif
   550 
   551 /* Encourage applications to avoid unsafe functions that can overrun
   552    buffers when given outlandish struct tm values.  Portable
   553    applications should use strftime (or even sprintf) instead.  */
   554 # if defined GNULIB_POSIXCHECK
   555 #  undef asctime
   556 #  if HAVE_RAW_DECL_ASCTIME
   557 _GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - "
   558                  "better use strftime (or even sprintf) instead");
   559 #  endif
   560 # endif
   561 # if defined GNULIB_POSIXCHECK
   562 #  undef asctime_r
   563 #  if HAVE_RAW_DECL_ASCTIME_R
   564 _GL_WARN_ON_USE (asctime_r, "asctime_r can overrun buffers in some cases - "
   565                  "better use strftime (or even sprintf) instead");
   566 #  endif
   567 # endif
   568 # if defined GNULIB_POSIXCHECK
   569 #  undef ctime
   570 #  if HAVE_RAW_DECL_CTIME
   571 _GL_WARN_ON_USE (ctime, "ctime can overrun buffers in some cases - "
   572                  "better use strftime (or even sprintf) instead");
   573 #  endif
   574 # endif
   575 # if defined GNULIB_POSIXCHECK
   576 #  undef ctime_r
   577 #  if HAVE_RAW_DECL_CTIME_R
   578 _GL_WARN_ON_USE (ctime_r, "ctime_r can overrun buffers in some cases - "
   579                  "better use strftime (or even sprintf) instead");
   580 #  endif
   581 # endif
   582 
   583 #endif

/* [<][>][^][v][top][bottom][index][help] */