[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] mktime: sync from glibc
From: |
Paul Eggert |
Subject: |
[PATCH] mktime: sync from glibc |
Date: |
Wed, 23 May 2012 22:10:26 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20120430 Thunderbird/12.0.1 |
I managed to get all gnulib's important mktime.c changes into glibc,
so I resurrected the mktime.c link between glibc and gnulib in
gnulib/config/srclist.txt and copied the glibc file into gnulib.
Karl, you may want to check the next time that you sync gnulib
sources, as you'll need up-to-date glibc sources again.
The glibc maintainers don't want to use just spaces to indent
so this resurrects the tabs. I figured that it was more important
to match than to be tab-free. The following listing omits the
space-tab diffs as they're uninteresting.
diff --git a/ChangeLog b/ChangeLog
index 89ed235..5296ce5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2012-05-23 Paul Eggert <address@hidden>
+
+ mktime: sync from glibc
+ * config/srclist.txt: Uncomment mktime.c.
+ * lib/mktime.c: Sync from glibc master. This incorporates 3 changes.
+ First, indent with tabs, since glibc uses tabs and doesn't want to
+ change and we'd rather be identical to glibc. Also, two small
+ coding changes:
+ (isdst_differ): Use &&, not &, as && is the usual style.
+ (__mktime_internal): Rename local var from abs_diff to approx_abs_diff
+ for clarity.
+
2012-05-23 Akim Demaille <address@hidden>
announce-gen: du -h is more portable than du --human
diff --git a/config/srclist.txt b/config/srclist.txt
index 290f140..e69fcec 100644
--- a/config/srclist.txt
+++ b/config/srclist.txt
@@ -163,7 +163,7 @@ $GNUORG/disclaim.program doc/Copyright
#tab changes $LIBCSRC/stdlib/strtoul.c lib gpl
# (no more strtok_r.h) $LIBCSRC/string/strtok_r.c lib gpl
# (gnulib needs config.h?) $LIBCSRC/string/memmem.c lib gpl
-#$LIBCSRC/time/mktime.c lib gpl
+$LIBCSRC/time/mktime.c lib gpl
#
# http://sourceware.org/bugzilla/show_bug.cgi?id=1439
diff --git a/lib/mktime.c b/lib/mktime.c
index fc27adf..e1fbf9e 100644
--- a/lib/mktime.c
+++ b/lib/mktime.c
@@ -1,20 +1,21 @@
/* Convert a 'struct tm' to a time_t value.
- Copyright (C) 1993-1999, 2002-2007, 2009-2012 Free Software Foundation, Inc.
+ Copyright (C) 1993-2012 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 modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
+ 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 General Public License for more details.
+ 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 General Public License along
- with this program; if not, see <http://www.gnu.org/licenses/>. */
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
/* Define this to have a standalone program to test this implementation of
mktime. */
@@ -52,12 +53,14 @@
Define WRAPV to 1 if the assumption is valid and if
#pragma GCC optimize ("wrapv")
- does not trigger GCC bug
<http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51793>.
+ does not trigger GCC bug 51793
+ <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51793>.
Otherwise, define it to 0; this forces the use of slower code that,
while not guaranteed by the C Standard, works on all production
platforms that we know about. */
#ifndef WRAPV
-# if ((__GNUC__ == 4 && 4 <= __GNUC_MINOR__) || 4 < __GNUC__) && defined
__GLIBC__
+# if (((__GNUC__ == 4 && 4 <= __GNUC_MINOR__) || 4 < __GNUC__) \
+ && defined __GLIBC__)
# pragma GCC optimize ("wrapv")
# define WRAPV 1
# else
@@ -179,7 +182,7 @@ const unsigned short int __mon_yday[2][13] =
static int
isdst_differ (int a, int b)
{
- return (!a != !b) & (0 <= a) & (0 <= b);
+ return (!a != !b) && (0 <= a) && (0 <= b);
}
/* Return an integer value measuring (YEAR1-YDAY1 HOUR1:MIN1:SEC1) -
@@ -442,7 +445,7 @@ __mktime_internal (struct tm *tp,
int approx_biennia = SHR (t0, ALOG2_SECONDS_PER_BIENNIUM);
int diff = approx_biennia - approx_requested_biennia;
- int abs_diff = diff < 0 ? -1 - diff : diff;
+ int approx_abs_diff = diff < 0 ? -1 - diff : diff;
/* IRIX 4.0.5 cc miscalculates TIME_T_MIN / 3: it erroneously
gives a positive value of 715827882. Setting a variable
@@ -453,15 +456,15 @@ __mktime_internal (struct tm *tp,
time_t overflow_threshold =
(time_t_max / 3 - time_t_min / 3) >> ALOG2_SECONDS_PER_BIENNIUM;
- if (overflow_threshold < abs_diff)
+ if (overflow_threshold < approx_abs_diff)
{
/* Overflow occurred. Try repairing it; this might work if
the time zone offset is enough to undo the overflow. */
time_t repaired_t0 = -1 - t0;
approx_biennia = SHR (repaired_t0, ALOG2_SECONDS_PER_BIENNIUM);
diff = approx_biennia - approx_requested_biennia;
- abs_diff = diff < 0 ? -1 - diff : diff;
- if (overflow_threshold < abs_diff)
+ approx_abs_diff = diff < 0 ? -1 - diff : diff;
+ if (overflow_threshold < approx_abs_diff)
return -1;
guessed_offset += repaired_t0 - t0;
t0 = repaired_t0;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] mktime: sync from glibc,
Paul Eggert <=