mirror of
https://https.git.savannah.gnu.org/git/diffutils.git
synced 2026-01-26 15:03:22 +00:00
diff: fix timezone bug on Solaris
Problem reported by Vladimir Marek (bug#51228). * NEWS: Mention this. * src/context.c (print_context_label): Pass localtz to nstrftime, instead of always passing 0. * src/diff.c (main) [!HAVE_TM_GMTOFF]: Initialize localtz if time_format uses %z. * src/diff.h (localtz): New decl. * tests/Makefile.am (TESTS): Add timezone. * tests/timezone: New test.
This commit is contained in:
parent
08b103ff4d
commit
074cbe590b
6
NEWS
6
NEWS
@ -2,6 +2,12 @@ GNU diffutils NEWS -*- outline -*-
|
||||
|
||||
* Noteworthy changes in release ?.? (????-??-??) [?]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
diff -c and -u no longer output incorrect timezones in headers
|
||||
on platforms like Solaris where struct tm lacks tm_gmtoff.
|
||||
[bug#51228 introduced in 3.4]
|
||||
|
||||
|
||||
* Noteworthy changes in release 3.8 (2021-08-01) [stable]
|
||||
|
||||
|
||||
@ -52,7 +52,7 @@ print_context_label (char const *mark,
|
||||
INT_STRLEN_BOUND (time_t) + 11)];
|
||||
struct tm const *tm = localtime (&inf->stat.st_mtime);
|
||||
int nsec = get_stat_mtime_ns (&inf->stat);
|
||||
if (! (tm && nstrftime (buf, sizeof buf, time_format, tm, 0, nsec)))
|
||||
if (! (tm && nstrftime (buf, sizeof buf, time_format, tm, localtz, nsec)))
|
||||
{
|
||||
verify (TYPE_IS_INTEGER (time_t));
|
||||
if (LONG_MIN <= TYPE_MINIMUM (time_t)
|
||||
|
||||
@ -728,6 +728,9 @@ main (int argc, char **argv)
|
||||
time_format = "%Y-%m-%d %H:%M:%S.%N %z";
|
||||
#else
|
||||
time_format = "%Y-%m-%d %H:%M:%S %z";
|
||||
#endif
|
||||
#if !HAVE_TM_GMTOFF
|
||||
localtz = tzalloc (getenv ("TZ"));
|
||||
#endif
|
||||
}
|
||||
else
|
||||
|
||||
@ -155,6 +155,13 @@ XTERN bool ignore_file_name_case;
|
||||
(--no-dereference). */
|
||||
XTERN bool no_dereference_symlinks;
|
||||
|
||||
/* Local timezone for 'c' output headers, if needed. */
|
||||
#if HAVE_TM_GMTOFF
|
||||
# define localtz 0 /* Placeholder since localtz is never needed. */
|
||||
#else
|
||||
XTERN timezone_t localtz;
|
||||
#endif
|
||||
|
||||
/* File labels for '-c' output headers (--label). */
|
||||
XTERN char *file_label[2];
|
||||
|
||||
|
||||
@ -22,6 +22,7 @@ TESTS = \
|
||||
strcoll-0-names \
|
||||
filename-quoting \
|
||||
strip-trailing-cr \
|
||||
timezone \
|
||||
colors
|
||||
|
||||
XFAIL_TESTS = large-subopt
|
||||
|
||||
14
tests/timezone
Executable file
14
tests/timezone
Executable file
@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
# In diff 3.4 through 3.8, this would output the wrong timezone on Solaris.
|
||||
|
||||
. "${srcdir=.}/init.sh"; path_prepend_ ../src
|
||||
|
||||
fail=0
|
||||
|
||||
echo a >a || fail=1
|
||||
case $(LC_ALL=C TZ=EST5 diff -u /dev/null a) in
|
||||
*' -0500'*) ;;
|
||||
*) fail=1 ;;
|
||||
esac
|
||||
|
||||
Exit $fail
|
||||
Loading…
x
Reference in New Issue
Block a user