File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libiconv / srclib / time.in.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 09:29:43 2012 UTC (12 years, 1 month ago) by misho
Branches: libiconv, MAIN
CVS tags: v1_14p0, v1_14, HEAD
libiconv v1.14

    1: /* A more-standard <time.h>.
    2: 
    3:    Copyright (C) 2007-2011 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 3, 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: #if __GNUC__ >= 3
   20: @PRAGMA_SYSTEM_HEADER@
   21: #endif
   22: @PRAGMA_COLUMNS@
   23: 
   24: /* Don't get in the way of glibc when it includes time.h merely to
   25:    declare a few standard symbols, rather than to declare all the
   26:    symbols.  Also, Solaris 8 <time.h> eventually includes itself
   27:    recursively; if that is happening, just include the system <time.h>
   28:    without adding our own declarations.  */
   29: #if (defined __need_time_t || defined __need_clock_t \
   30:      || defined __need_timespec \
   31:      || defined _@GUARD_PREFIX@_TIME_H)
   32: 
   33: # @INCLUDE_NEXT@ @NEXT_TIME_H@
   34: 
   35: #else
   36: 
   37: # define _@GUARD_PREFIX@_TIME_H
   38: 
   39: # @INCLUDE_NEXT@ @NEXT_TIME_H@
   40: 
   41: /* NetBSD 5.0 mis-defines NULL.  */
   42: # include <stddef.h>
   43: 
   44: /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
   45: 
   46: /* The definition of _GL_ARG_NONNULL is copied here.  */
   47: 
   48: /* The definition of _GL_WARN_ON_USE is copied here.  */
   49: 
   50: /* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3).
   51:    Or they define it with the wrong member names or define it in <sys/time.h>
   52:    (e.g., FreeBSD circa 1997).  Stock Mingw does not define it, but the
   53:    pthreads-win32 library defines it in <pthread.h>.  */
   54: # if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@
   55: #  if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
   56: #   include <sys/time.h>
   57: #  elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
   58: #   include <pthread.h>
   59: /* The pthreads-win32 <pthread.h> also defines a couple of broken macros.  */
   60: #   undef asctime_r
   61: #   undef ctime_r
   62: #   undef gmtime_r
   63: #   undef localtime_r
   64: #   undef rand_r
   65: #   undef strtok_r
   66: #  else
   67: 
   68: #   ifdef __cplusplus
   69: extern "C" {
   70: #   endif
   71: 
   72: #   if !GNULIB_defined_struct_timespec
   73: #    undef timespec
   74: #    define timespec rpl_timespec
   75: struct timespec
   76: {
   77:   time_t tv_sec;
   78:   long int tv_nsec;
   79: };
   80: #    define GNULIB_defined_struct_timespec 1
   81: #   endif
   82: 
   83: #   ifdef __cplusplus
   84: }
   85: #   endif
   86: 
   87: #  endif
   88: # endif
   89: 
   90: # if !GNULIB_defined_struct_time_t_must_be_integral
   91: /* Per http://austingroupbugs.net/view.php?id=327, POSIX requires
   92:    time_t to be an integer type, even though C99 permits floating
   93:    point.  We don't know of any implementation that uses floating
   94:    point, and it is much easier to write code that doesn't have to
   95:    worry about that corner case, so we force the issue.  */
   96: struct __time_t_must_be_integral {
   97:   unsigned int __floating_time_t_unsupported : (time_t) 1;
   98: };
   99: #  define GNULIB_defined_struct_time_t_must_be_integral 1
  100: # endif
  101: 
  102: /* Sleep for at least RQTP seconds unless interrupted,  If interrupted,
  103:    return -1 and store the remaining time into RMTP.  See
  104:    <http://www.opengroup.org/susv3xsh/nanosleep.html>.  */
  105: # if @GNULIB_NANOSLEEP@
  106: #  if @REPLACE_NANOSLEEP@
  107: #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
  108: #    define nanosleep rpl_nanosleep
  109: #   endif
  110: _GL_FUNCDECL_RPL (nanosleep, int,
  111:                   (struct timespec const *__rqtp, struct timespec *__rmtp)
  112:                   _GL_ARG_NONNULL ((1)));
  113: _GL_CXXALIAS_RPL (nanosleep, int,
  114:                   (struct timespec const *__rqtp, struct timespec *__rmtp));
  115: #  else
  116: #   if ! @HAVE_NANOSLEEP@
  117: _GL_FUNCDECL_SYS (nanosleep, int,
  118:                   (struct timespec const *__rqtp, struct timespec *__rmtp)
  119:                   _GL_ARG_NONNULL ((1)));
  120: #   endif
  121: _GL_CXXALIAS_SYS (nanosleep, int,
  122:                   (struct timespec const *__rqtp, struct timespec *__rmtp));
  123: #  endif
  124: _GL_CXXALIASWARN (nanosleep);
  125: # endif
  126: 
  127: /* Return the 'time_t' representation of TP and normalize TP.  */
  128: # if @GNULIB_MKTIME@
  129: #  if @REPLACE_MKTIME@
  130: #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
  131: #    define mktime rpl_mktime
  132: #   endif
  133: _GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1)));
  134: _GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp));
  135: #  else
  136: _GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp));
  137: #  endif
  138: _GL_CXXALIASWARN (mktime);
  139: # endif
  140: 
  141: /* Convert TIMER to RESULT, assuming local time and UTC respectively.  See
  142:    <http://www.opengroup.org/susv3xsh/localtime_r.html> and
  143:    <http://www.opengroup.org/susv3xsh/gmtime_r.html>.  */
  144: # if @GNULIB_TIME_R@
  145: #  if @REPLACE_LOCALTIME_R@
  146: #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
  147: #    undef localtime_r
  148: #    define localtime_r rpl_localtime_r
  149: #   endif
  150: _GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
  151:                                              struct tm *restrict __result)
  152:                                             _GL_ARG_NONNULL ((1, 2)));
  153: _GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
  154:                                              struct tm *restrict __result));
  155: #  else
  156: #   if ! @HAVE_DECL_LOCALTIME_R@
  157: _GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
  158:                                              struct tm *restrict __result)
  159:                                             _GL_ARG_NONNULL ((1, 2)));
  160: #   endif
  161: _GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
  162:                                              struct tm *restrict __result));
  163: #  endif
  164: #  if @HAVE_DECL_LOCALTIME_R@
  165: _GL_CXXALIASWARN (localtime_r);
  166: #  endif
  167: #  if @REPLACE_LOCALTIME_R@
  168: #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
  169: #    undef gmtime_r
  170: #    define gmtime_r rpl_gmtime_r
  171: #   endif
  172: _GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
  173:                                           struct tm *restrict __result)
  174:                                          _GL_ARG_NONNULL ((1, 2)));
  175: _GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
  176:                                           struct tm *restrict __result));
  177: #  else
  178: #   if ! @HAVE_DECL_LOCALTIME_R@
  179: _GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
  180:                                           struct tm *restrict __result)
  181:                                          _GL_ARG_NONNULL ((1, 2)));
  182: #   endif
  183: _GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
  184:                                           struct tm *restrict __result));
  185: #  endif
  186: #  if @HAVE_DECL_LOCALTIME_R@
  187: _GL_CXXALIASWARN (gmtime_r);
  188: #  endif
  189: # endif
  190: 
  191: /* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store
  192:    the resulting broken-down time into TM.  See
  193:    <http://www.opengroup.org/susv3xsh/strptime.html>.  */
  194: # if @GNULIB_STRPTIME@
  195: #  if ! @HAVE_STRPTIME@
  196: _GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf,
  197:                                      char const *restrict __format,
  198:                                      struct tm *restrict __tm)
  199:                                     _GL_ARG_NONNULL ((1, 2, 3)));
  200: #  endif
  201: _GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf,
  202:                                      char const *restrict __format,
  203:                                      struct tm *restrict __tm));
  204: _GL_CXXALIASWARN (strptime);
  205: # endif
  206: 
  207: /* Convert TM to a time_t value, assuming UTC.  */
  208: # if @GNULIB_TIMEGM@
  209: #  if @REPLACE_TIMEGM@
  210: #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
  211: #    undef timegm
  212: #    define timegm rpl_timegm
  213: #   endif
  214: _GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
  215: _GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm));
  216: #  else
  217: #   if ! @HAVE_TIMEGM@
  218: _GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
  219: #   endif
  220: _GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm));
  221: #  endif
  222: _GL_CXXALIASWARN (timegm);
  223: # endif
  224: 
  225: /* Encourage applications to avoid unsafe functions that can overrun
  226:    buffers when given outlandish struct tm values.  Portable
  227:    applications should use strftime (or even sprintf) instead.  */
  228: # if defined GNULIB_POSIXCHECK
  229: #  undef asctime
  230: _GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - "
  231:                  "better use strftime (or even sprintf) instead");
  232: # endif
  233: # if defined GNULIB_POSIXCHECK
  234: #  undef asctime_r
  235: _GL_WARN_ON_USE (asctime, "asctime_r can overrun buffers in some cases - "
  236:                  "better use strftime (or even sprintf) instead");
  237: # endif
  238: # if defined GNULIB_POSIXCHECK
  239: #  undef ctime
  240: _GL_WARN_ON_USE (asctime, "ctime can overrun buffers in some cases - "
  241:                  "better use strftime (or even sprintf) instead");
  242: # endif
  243: # if defined GNULIB_POSIXCHECK
  244: #  undef ctime_r
  245: _GL_WARN_ON_USE (asctime, "ctime_r can overrun buffers in some cases - "
  246:                  "better use strftime (or even sprintf) instead");
  247: # endif
  248: 
  249: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>