Revert "Avoid resizing mutation in subst-char-in-string"
authorMattias Engdegård <mattiase@acm.org>
Sun, 12 May 2024 13:18:19 +0000 (15:18 +0200)
committerMattias Engdegård <mattiase@acm.org>
Sun, 12 May 2024 13:18:25 +0000 (15:18 +0200)
This reverts commit 184d6e8c02345583264b053bb59ae031bb1c5a00.

It wasn't quite correct: the path through `string-replace` would not
preserve text properties in the input string, which broke Gnus.

lisp/subr.el

index 444afc0e486ac22588fbd8c984950cfcf5d85ba9..0ac71560c591dcf9ba0ae6291c7af956090f05b1 100644 (file)
@@ -5690,19 +5690,13 @@ The SEPARATOR regexp defaults to \"\\s-+\"."
 (defun subst-char-in-string (fromchar tochar string &optional inplace)
   "Replace FROMCHAR with TOCHAR in STRING each time it occurs.
 Unless optional argument INPLACE is non-nil, return a new string."
-  (if (and (not inplace)
-           (if (multibyte-string-p string)
-               (> (max fromchar tochar) 127)
-             (> tochar 255)))
-      ;; Avoid quadratic behaviour from resizing replacement.
-      (string-replace (string fromchar) (string tochar) string)
-    (let ((i (length string))
-         (newstr (if inplace string (copy-sequence string))))
-      (while (> i 0)
-        (setq i (1- i))
-        (if (eq (aref newstr i) fromchar)
-           (aset newstr i tochar)))
-      newstr)))
+  (let ((i (length string))
+       (newstr (if inplace string (copy-sequence string))))
+    (while (> i 0)
+      (setq i (1- i))
+      (if (eq (aref newstr i) fromchar)
+         (aset newstr i tochar)))
+    newstr))
 
 (defun string-replace (from-string to-string in-string)
   "Replace FROM-STRING with TO-STRING in IN-STRING each time it occurs."