bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Sync lib/mktime-internal.h from glibc


From: Paul Eggert
Subject: [PATCH] Sync lib/mktime-internal.h from glibc
Date: Tue, 30 Apr 2019 09:34:06 -0700

* 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  <address@hidden>
+
+       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  <address@hidden>
 
        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 <address@hidden>.
 
-   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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]