summaryrefslogtreecommitdiff
path: root/lisp/subr.el
diff options
context:
space:
mode:
authorShigeru Fukaya <shigeru.fukaya@gmail.com>2015-07-26 10:43:10 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2015-07-26 10:43:28 -0700
commit4c55786d9b2a5d571f3e543cc261ce0702c7341e (patch)
tree676c9e5a2663ff32c744a45814f82ac3abc23159 /lisp/subr.el
parentfac8492664246c49ee145802cc124aa9e1636e7b (diff)
downloademacs-4c55786d9b2a5d571f3e543cc261ce0702c7341e.tar.gz
Fix infinite loop in delete-consecutive-dups
* lisp/subr.el (delete-consecutive-dups): Work even if the last element is nil (Bug#20588). Avoid rescan of a circular list in deletion of last element.
Diffstat (limited to 'lisp/subr.el')
-rw-r--r--lisp/subr.el12
1 files changed, 6 insertions, 6 deletions
diff --git a/lisp/subr.el b/lisp/subr.el
index e2c1baea442..bfdc0ff4a13 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -440,16 +440,16 @@ one is kept."
First and last elements are considered consecutive if CIRCULAR is
non-nil."
(let ((tail list) last)
- (while (consp tail)
+ (while (cdr tail)
(if (equal (car tail) (cadr tail))
(setcdr tail (cddr tail))
- (setq last (car tail)
+ (setq last tail
tail (cdr tail))))
(if (and circular
- (cdr list)
- (equal last (car list)))
- (nbutlast list)
- list)))
+ last
+ (equal (car tail) (car list)))
+ (setcdr last nil)))
+ list)
(defun number-sequence (from &optional to inc)
"Return a sequence of numbers from FROM to TO (both inclusive) as a list.