[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 2/2] timegm: ignore incoming tm_isdst
From: |
Paul Eggert |
Subject: |
[PATCH 2/2] timegm: ignore incoming tm_isdst |
Date: |
Fri, 4 Oct 2024 09:16:38 -0700 |
Problem reported by Florian Weimer via a proposed glibc patch in:
https://sourceware.org/pipermail/libc-alpha/2024-October/160310.html
* lib/mktime.c (__mktime_internal): Ignore any tm_isdst request
if the timezone never observes DST, as is the case for timegm.
* m4/mktime.m4 (gl_PREREQ_MKTIME): Define new C macro __daylight
if needed.
---
ChangeLog | 8 ++++++++
lib/mktime.c | 4 +++-
m4/mktime.m4 | 22 ++++++++++++++++++++--
3 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index d8ec6067da..7a7f6dd782 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2024-10-04 Paul Eggert <eggert@cs.ucla.edu>
+ timegm: ignore incoming tm_isdst
+ Problem reported by Florian Weimer via a proposed glibc patch in:
+ https://sourceware.org/pipermail/libc-alpha/2024-October/160310.html
+ * lib/mktime.c (__mktime_internal): Ignore any tm_isdst request
+ if the timezone never observes DST, as is the case for timegm.
+ * m4/mktime.m4 (gl_PREREQ_MKTIME): Define new C macro __daylight
+ if needed.
+
timegm: desync from glibc for now
* config/srclist.txt: Omit time/timegm.c and time/mktime-internal.h
for now, until we can sync glibc from Gnulib.
diff --git a/lib/mktime.c b/lib/mktime.c
index 561c948713..67bfcb956f 100644
--- a/lib/mktime.c
+++ b/lib/mktime.c
@@ -339,7 +339,9 @@ __mktime_internal (struct tm *tp, bool local,
mktime_offset_t *offset)
int mday = tp->tm_mday;
int mon = tp->tm_mon;
int year_requested = tp->tm_year;
- int isdst = tp->tm_isdst;
+
+ /* If the timezone never observes DST, ignore any tm_isdst request. */
+ int isdst = local && __daylight ? tp->tm_isdst : 0;
/* 1 if the previous probe was DST. */
int dst2 = 0;
diff --git a/m4/mktime.m4 b/m4/mktime.m4
index 85c52454aa..14ced571e0 100644
--- a/m4/mktime.m4
+++ b/m4/mktime.m4
@@ -1,5 +1,5 @@
# mktime.m4
-# serial 39
+# serial 40
dnl Copyright (C) 2002-2003, 2005-2007, 2009-2024 Free Software Foundation,
Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -315,4 +315,22 @@ AC_DEFUN([gl_FUNC_MKTIME_INTERNAL], [
])
# Prerequisites of lib/mktime.c.
-AC_DEFUN([gl_PREREQ_MKTIME], [:])
+AC_DEFUN([gl_PREREQ_MKTIME], [
+ AC_CACHE_CHECK([spelling of daylight variable],
+ [gl_cv_var___daylight],
+ [for gl_cv_var___daylight in __daylight daylight _daylight 0; do
+ test $gl_cv_var___daylight = 0 && break
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <time.h>
+ ]],
+ [[return $gl_cv_var___daylight;]])
+ ],
+ [break])
+ done])
+ AS_CASE([$gl_cv_var___daylight],
+ [__daylight], [],
+ [AC_DEFINE_UNQUOTED([__daylight], [$gl_cv_var___daylight],
+ [Define to an expression equivalent to <time.h> daylight
+ if <time.h> __daylight does not already do that.])])
+])
--
2.43.0