- (if (string-equal "TZ" variable)
- (set-time-zone-rule value))
- (block nil
- ;; Look for an existing entry for VARIABLE; try `process-environment' first.
- (while (and scan (stringp (car scan)))
- (when (string-match pattern (car scan))
- (if value
- (setcar scan (concat variable "=" value))
- ;; Leave unset variables in `process-environment',
- ;; otherwise the overridden value in `global-environment'
- ;; or frame-env would become unmasked.
- (setcar scan variable))
- (return value))
- (setq scan (cdr scan)))
-
- ;; Look in the local or global environment, whichever is relevant.
- (let ((local-var-p (and frame-env
- (or frame-forced
- (eq t local-environment-variables)
- (member variable local-environment-variables)))))
- (setq scan (if local-var-p
- frame-env
- global-environment))
- (while scan
- (when (string-match pattern (car scan))
- (if value
- (setcar scan (concat variable "=" value))
- (if local-var-p
- (set-frame-parameter frame 'environment
- (delq (car scan) frame-env))
- (setq global-environment (delq (car scan) global-environment))))
- (return value))
- (setq scan (cdr scan)))
-
- ;; VARIABLE is not in any environment list.
- (if value
- (if local-var-p
- (set-frame-parameter frame 'environment
- (cons (concat variable "=" value)
- frame-env))
- (setq global-environment
- (cons (concat variable "=" value)
- global-environment))))
- (return value)))))