Mercurial > emacs
changeset 15841:80a852988718
(set_time_zone_rule): Don't put a string literal
"TZ=..." in environ.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 08 Aug 1996 20:04:18 +0000 |
parents | 1d300843f03c |
children | e8d7059aadc3 |
files | src/editfns.c |
diffstat | 1 files changed, 15 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/editfns.c Thu Aug 08 20:00:16 1996 +0000 +++ b/src/editfns.c Thu Aug 08 20:04:18 1996 +0000 @@ -936,6 +936,17 @@ return Qnil; } +/* These two values are known to load tz files in buggy implementations. + Their values shouldn't matter in non-buggy implementations. + We don't use string literals for these strings, + since if a string in the environment is in readonly + storage, it runs afoul of bugs in SVR4 and Solaris 2.3. + See Sun bugs 1113095 and 1114114, ``Timezone routines + improperly modify environment''. */ + +static char set_time_zone_rule_tz1[] = "TZ=GMT0"; +static char set_time_zone_rule_tz2[] = "TZ=GMT1"; + /* Set the local time zone rule to TZSTRING. This allocates memory into `environ', which it is the caller's responsibility to free. */ @@ -986,17 +997,13 @@ not load a tz file, tzset can dump core (see Sun bug#1225179). The following code works around these bugs. */ - /* These two values are known to load tz files in buggy implementations. - Their values shouldn't matter in non-buggy implementations. */ - char *tz1 = "TZ=GMT0"; - char *tz2 = "TZ=GMT1"; - if (tzstring) { /* Temporarily set TZ to a value that loads a tz file and that differs from tzstring. */ char *tz = *newenv; - *newenv = strcmp (tzstring, tz1 + 3) == 0 ? tz2 : tz1; + *newenv = (strcmp (tzstring, set_time_zone_rule_tz1 + 3) == 0 + ? set_time_zone_rule_tz2 : set_time_zone_rule_tz1); tzset (); *newenv = tz; } @@ -1004,10 +1011,10 @@ { /* The implied tzstring is unknown, so temporarily set TZ to two different values that each load a tz file. */ - *to = tz1; + *to = set_time_zone_rule_tz1; to[1] = 0; tzset (); - *to = tz2; + *to = set_time_zone_rule_tz2; tzset (); *to = 0; }