* config/srclist.txt: Add entry for lib/mktime-internal.h. * lib/mktime-internal.h: Autoupdate. --- ChangeLog | 6 +++++ config/srclist.txt | 1 + lib/mktime-internal.h | 60 +++++++++++++++++++++++++++++++------------ 3 files changed, 50 insertions(+), 17 deletions(-)
diff --git a/ChangeLog b/ChangeLog index 8bdf14314..cf4116bf3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2019-04-30 Paul Eggert <egg...@cs.ucla.edu> + + Sync lib/mktime-internal.h from glibc + * config/srclist.txt: Add entry for lib/mktime-internal.h. + * lib/mktime-internal.h: Autoupdate. + 2019-04-28 Bruno Haible <br...@clisp.org> tls tests: Prevent that the test takes too long. diff --git a/config/srclist.txt b/config/srclist.txt index 6751fb67d..23e765dab 100644 --- a/config/srclist.txt +++ b/config/srclist.txt @@ -80,6 +80,7 @@ $LIBCSRC posix/regex_internal.h lib $LIBCSRC posix/regexec.c lib $LIBCSRC time/timegm.c lib $LIBCSRC time/mktime.c lib +$LIBCSRC time/mktime-internal.h lib # # c89 changes $LIBCSRC/string/strdup.c lib gpl #tab changes $LIBCSRC/stdlib/strtoll.c lib gpl diff --git a/lib/mktime-internal.h b/lib/mktime-internal.h index e19165d73..4cdeb9c2f 100644 --- a/lib/mktime-internal.h +++ b/lib/mktime-internal.h @@ -1,40 +1,56 @@ -/* mktime variant that also uses an offset guess - +/* Internals of mktime and related functions Copyright 2016-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Paul Eggert <egg...@cs.ucla.edu>. - This program is free software; you can redistribute it and/or + The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public - License along with this program; if not, see + License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ -#include <time.h> +#ifndef _LIBC +# include <time.h> +#endif /* mktime_offset_t is a signed type wide enough to hold a UTC offset in seconds, and used as part of the type of the offset-guess - argument to mktime_internal. Use time_t on platforms where time_t + argument to mktime_internal. In Glibc, it is always long int. + When in Gnulib, use time_t on platforms where time_t is signed, to be compatible with platforms like BeOS that export this implementation detail of mktime. On platforms where time_t is unsigned, GNU and POSIX code can assume 'int' is at least 32 bits which is wide enough for a UTC offset. */ - -#if TIME_T_IS_SIGNED +#ifdef _LIBC +typedef long int mktime_offset_t; +#elif defined TIME_T_IS_SIGNED typedef time_t mktime_offset_t; #else typedef int mktime_offset_t; #endif -time_t mktime_internal (struct tm *, - struct tm * (*) (time_t const *, struct tm *), - mktime_offset_t *); +/* The source code uses identifiers like __time64_t for glibc + timestamps that can contain 64-bit values even when time_t is only + 32 bits. These are just macros for the ordinary identifiers unless + compiling within glibc when time_t is 32 bits. */ +#if ! (defined _LIBC && __TIMESIZE != 64) +# undef __time64_t +# define __time64_t time_t +# define __gmtime64_r __gmtime_r +# define __localtime64_r __localtime_r +# define __mktime64 mktime +# define __timegm64 timegm +#endif + +#ifndef _LIBC /* Although glibc source code uses leading underscores, Gnulib wants ordinary names. @@ -45,9 +61,19 @@ time_t mktime_internal (struct tm *, Similarly for gmtime_r. See the gnulib time_r module for one way to implement this. */ -#undef __gmtime_r -#undef __localtime_r -#define __gmtime_r gmtime_r -#define __localtime_r localtime_r +# undef __gmtime_r +# undef __localtime_r +# define __gmtime_r gmtime_r +# define __localtime_r localtime_r + +# define __mktime_internal mktime_internal + +#endif -#define __mktime_internal mktime_internal +/* Subroutine of mktime. Return the time_t representation of TP and + normalize TP, given that a struct tm * maps to a time_t as performed + by FUNC. Record next guess for localtime-gmtime offset in *OFFSET. */ +extern __time64_t __mktime_internal (struct tm *tp, + struct tm *(*func) (__time64_t const *, + struct tm *), + mktime_offset_t *offset) attribute_hidden; -- 2.20.1