;;; -*- Mode:Lisp; Readtable:CL; Package:USER; Base:10; Patch-File:T -*- ;;; Patch file for System version 123.249 ;;; Reason: ;;; (mismatch seq1 seq2 :from-end t) where seq2 was shorter than seq1 ;;; could loop infinitely. ;;; Written 4-May-88 12:18:35 by pld at site Gigamos Cambridge ;;; while running on Azathoth from band 3 ;;; with Experimental System 123.247, Experimental Local-File 73.4, Experimental FILE-Server 22.2, Experimental Unix-Interface 11.0, Experimental KERMIT 34.3, Experimental ZMail 71.0, Experimental Lambda-Diag 15.0, Experimental Tape 22.3, Experimental Serial-IP 1.1, Experimental Tiger 27.1, microcode 1756, SDU Boot Tape 3.14, SDU ROM 8, the old ones. ; From modified file DJ: L.SYS; GENRIC.LISP#57 at 4-May-88 12:18:36 #10R SYSTEM-INTERNALS#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: SYS; GENRIC  " (defun mismatch-sequences-from-end (sequence1 sequence2 start1 end1 start2 end2 test invertp key) (or test (setq test #'eql)) (let ((compare-length (min (- end1 start1) (- end2 start2)))) (do ((index1 (seq-start sequence1 (- end1 compare-length))) (index2 (seq-start sequence2 (- end2 compare-length))) (i (- end1 compare-length) (1+ i)) (last-mismatch-index1 (unless (= (- end1 start1) (- end2 start2)) (- end1 compare-length)))) ((= i end1) last-mismatch-index1) (unless (eq invertp (not (funcall test (key-fetch-inc key sequence1 index1) (key-fetch-inc key sequence2 index2)))) (setq last-mismatch-index1 (1+ i)))))) ))