Commit 37e11a63 authored by Chong Yidong's avatar Chong Yidong
Browse files

Lisp code shouldn't use set-time-zone-rule except through setenv.

* time.el (display-time-world-list, display-time-world-display):
* time-stamp.el (time-stamp-string):
* vc/add-log.el (add-change-log-entry): Use setenv instead of
set-time-zone-rule.

* src/editfns.c (Fset_time_zone_rule): Document relationship with the
setenv function.

Fixes: debbugs:7337
parent d5617611
2011-08-08 Chong Yidong <cyd@stupidchicken.com>
* time.el (display-time-world-list, display-time-world-display):
* time-stamp.el (time-stamp-string):
* vc/add-log.el (add-change-log-entry): Use setenv instead of
set-time-zone-rule (Bug#7337).
2011-08-08 Daiki Ueno <ueno@unixuser.org>
* epg.el (epg--status-KEYEXPIRED, epg--status-KEYREVOKED): Fix typo.
......
......@@ -424,10 +424,10 @@ format the string."
(let ((ts-real-time-zone (getenv "TZ")))
(unwind-protect
(progn
(set-time-zone-rule time-stamp-time-zone)
(setenv "TZ" time-stamp-time-zone)
(format-time-string
(time-stamp-string-preprocess ts-format)))
(set-time-zone-rule ts-real-time-zone)))
(setenv "TZ" ts-real-time-zone)))
(format-time-string
(time-stamp-string-preprocess ts-format)))
;; handle version 1 compatibility
......
......@@ -156,21 +156,24 @@ LABEL is a string to display as the label of that TIMEZONE's time."
(defcustom display-time-world-list
;; Determine if zoneinfo style timezones are supported by testing that
;; America/New York and Europe/London return different timezones.
(let (gmt nyt)
(set-time-zone-rule "America/New_York")
(setq nyt (format-time-string "%z"))
(set-time-zone-rule "Europe/London")
(setq gmt (format-time-string "%z"))
(set-time-zone-rule nil)
(let ((old-tz (getenv "TZ"))
gmt nyt)
(unwind-protect
(progn
(setenv "TZ" "America/New_York")
(setq nyt (format-time-string "%z"))
(setenv "TZ" "Europe/London")
(setq gmt (format-time-string "%z")))
(setenv "TZ" old-tz))
(if (string-equal nyt gmt)
legacy-style-world-list
zoneinfo-style-world-list))
"Alist of time zones and places for `display-time-world' to display.
Each element has the form (TIMEZONE LABEL).
TIMEZONE should be in the format supported by `set-time-zone-rule' on
your system. See the documentation of `zoneinfo-style-world-list' and
\`legacy-style-world-list' for two widely used formats.
LABEL is a string to display as the label of that TIMEZONE's time."
TIMEZONE should be in a format supported by your system. See the
documentation of `zoneinfo-style-world-list' and
\`legacy-style-world-list' for two widely used formats. LABEL is
a string to display as the label of that TIMEZONE's time."
:group 'display-time
:type '(repeat (list string string))
:version "23.1")
......@@ -521,26 +524,26 @@ See `display-time-world'."
(defun display-time-world-display (alist)
"Replace current buffer text with times in various zones, based on ALIST."
(let ((inhibit-read-only t)
(buffer-undo-list t))
(buffer-undo-list t)
(old-tz (getenv "TZ"))
(max-width 0)
result fmt)
(erase-buffer)
(let ((max-width 0)
(result ())
fmt)
(unwind-protect
(dolist (zone alist)
(let* ((label (cadr zone))
(width (string-width label)))
(set-time-zone-rule (car zone))
(push (cons label
(format-time-string display-time-world-time-format))
result)
(when (> width max-width)
(setq max-width width))))
(set-time-zone-rule nil))
(setq fmt (concat "%-" (int-to-string max-width) "s %s\n"))
(dolist (timedata (nreverse result))
(insert (format fmt (car timedata) (cdr timedata)))))
(delete-char -1)))
(unwind-protect
(dolist (zone alist)
(let* ((label (cadr zone))
(width (string-width label)))
(setenv "TZ" (car zone))
(push (cons label
(format-time-string display-time-world-time-format))
result)
(when (> width max-width)
(setq max-width width))))
(setenv "TZ" old-tz))
(setq fmt (concat "%-" (int-to-string max-width) "s %s\n"))
(dolist (timedata (nreverse result))
(insert (format fmt (car timedata) (cdr timedata)))))
(delete-char -1))
;;;###autoload
(defun display-time-world ()
......
......@@ -853,9 +853,9 @@ non-nil, otherwise in local time."
(let ((tz (getenv "TZ")))
(unwind-protect
(progn
(set-time-zone-rule add-log-time-zone-rule)
(setenv "TZ" add-log-time-zone-rule)
(funcall add-log-time-format))
(set-time-zone-rule tz)))
(setenv "TZ" tz)))
(funcall add-log-time-format))
" " full-name
" <" addr ">"))
......
2011-08-08 Chong Yidong <cyd@stupidchicken.com>
* editfns.c (Fset_time_zone_rule): Document relationship with the
setenv function.
* ftfont.c (ftfont_pattern_entity): Copy the extras argument to
the font entity extracted from the cache (Bug#8109).
......
......@@ -2053,7 +2053,12 @@ static char *initial_tz;
DEFUN ("set-time-zone-rule", Fset_time_zone_rule, Sset_time_zone_rule, 1, 1, 0,
doc: /* Set the local time zone using TZ, a string specifying a time zone rule.
If TZ is nil, use implementation-defined default time zone information.
If TZ is t, use Universal Time. */)
If TZ is t, use Universal Time.
Instead of calling this function, you typically want (setenv "TZ" TZ).
That changes both the environment of the Emacs process and the
variable `process-environment', whereas `set-time-zone-rule' affects
only the former. */)
(Lisp_Object tz)
{
const char *tzstring;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment