| BASH PATCH REPORT |
| ================= |
| |
| Bash-Release: 4.2 |
| Patch-ID: bash42-005 |
| |
| Bug-Reported-by: Dennis Williamson <dennistwilliamson@gmail.com> |
| Bug-Reference-ID: <AANLkTikDbEV5rnbPc0zOfmZfBcg0xGetzLLzK+KjRiNa@mail.gmail.com> |
| Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00147.html |
| |
| Bug-Description: |
| |
| Systems that use tzset() to set the local timezone require the TZ variable |
| to be in the environment. Bash must make sure the environment has been |
| modified with any updated value for TZ before calling tzset(). This |
| affects prompt string expansions and the `%T' printf conversion specification |
| on systems that do not allow bash to supply a replacement for getenv(3). |
| |
| Patch (apply with `patch -p0'): |
| |
| *** ../bash-4.2-patched/variables.h 2010-12-02 20:22:01.000000000 -0500 |
| --- ./variables.h 2011-02-19 19:57:12.000000000 -0500 |
| *************** |
| *** 314,317 **** |
| --- 314,318 ---- |
| extern void sort_variables __P((SHELL_VAR **)); |
| |
| + extern int chkexport __P((char *)); |
| extern void maybe_make_export_env __P((void)); |
| extern void update_export_env_inplace __P((char *, int, char *)); |
| *** ../bash-4.2-patched/variables.c 2011-01-24 20:07:48.000000000 -0500 |
| --- ./variables.c 2011-02-19 20:04:50.000000000 -0500 |
| *************** |
| *** 3654,3657 **** |
| --- 3654,3673 ---- |
| } |
| |
| + int |
| + chkexport (name) |
| + char *name; |
| + { |
| + SHELL_VAR *v; |
| + |
| + v = find_variable (name); |
| + if (exported_p (v)) |
| + { |
| + array_needs_making = 1; |
| + maybe_make_export_env (); |
| + return 1; |
| + } |
| + return 0; |
| + } |
| + |
| void |
| maybe_make_export_env () |
| *************** |
| *** 4215,4219 **** |
| { "TEXTDOMAINDIR", sv_locale }, |
| |
| ! #if defined (HAVE_TZSET) && defined (PROMPT_STRING_DECODE) |
| { "TZ", sv_tz }, |
| #endif |
| --- 4231,4235 ---- |
| { "TEXTDOMAINDIR", sv_locale }, |
| |
| ! #if defined (HAVE_TZSET) |
| { "TZ", sv_tz }, |
| #endif |
| *************** |
| *** 4559,4568 **** |
| #endif /* HISTORY */ |
| |
| ! #if defined (HAVE_TZSET) && defined (PROMPT_STRING_DECODE) |
| void |
| sv_tz (name) |
| char *name; |
| { |
| ! tzset (); |
| } |
| #endif |
| --- 4575,4585 ---- |
| #endif /* HISTORY */ |
| |
| ! #if defined (HAVE_TZSET) |
| void |
| sv_tz (name) |
| char *name; |
| { |
| ! if (chkexport (name)) |
| ! tzset (); |
| } |
| #endif |
| *** ../bash-4.2-patched/parse.y 2011-01-02 15:48:11.000000000 -0500 |
| --- ./parse.y 2011-02-19 20:05:00.000000000 -0500 |
| *************** |
| *** 5136,5139 **** |
| --- 5136,5142 ---- |
| /* Make the current time/date into a string. */ |
| (void) time (&the_time); |
| + #if defined (HAVE_TZSET) |
| + sv_tz ("TZ"); /* XXX -- just make sure */ |
| + #endif |
| tm = localtime (&the_time); |
| |
| *** ../bash-4.2-patched/builtins/printf.def 2010-11-23 10:02:55.000000000 -0500 |
| --- ./builtins/printf.def 2011-02-19 20:05:04.000000000 -0500 |
| *************** |
| *** 466,469 **** |
| --- 466,472 ---- |
| else |
| secs = arg; |
| + #if defined (HAVE_TZSET) |
| + sv_tz ("TZ"); /* XXX -- just make sure */ |
| + #endif |
| tm = localtime (&secs); |
| n = strftime (timebuf, sizeof (timebuf), timefmt, tm); |
| *** ../bash-4.2-patched/patchlevel.h Sat Jun 12 20:14:48 2010 |
| --- ./patchlevel.h Thu Feb 24 21:41:34 2011 |
| *************** |
| *** 26,30 **** |
| looks for to find the patch level (for the sccs version string). */ |
| |
| ! #define PATCHLEVEL 4 |
| |
| #endif /* _PATCHLEVEL_H_ */ |
| --- 26,30 ---- |
| looks for to find the patch level (for the sccs version string). */ |
| |
| ! #define PATCHLEVEL 5 |
| |
| #endif /* _PATCHLEVEL_H_ */ |