X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-load.lisp;h=f30b8f109d0bb2f33623a39e3a3775eb6f587b27;hb=7c5138fcbdb302abc563a2060493f2f0304ae902;hp=05d1e95ef285985070bcdd42294fd72993794bcd;hpb=75b52379bdc2269961af6a1308eca63610f38ac3;p=sbcl.git diff --git a/src/code/target-load.lisp b/src/code/target-load.lisp index 05d1e95..f30b8f1 100644 --- a/src/code/target-load.lisp +++ b/src/code/target-load.lisp @@ -80,14 +80,20 @@ :element-type '(unsigned-byte 8)) (load-as-fasl stream verbose print))) (t - (let ((first-line (with-open-file (stream truename :direction :input) - (read-line stream nil))) - (fhsss *fasl-header-string-start-string*)) + (let* ((fhsss *fasl-header-string-start-string*) + (first-line (make-array (length fhsss) + :element-type '(unsigned-byte 8))) + (read-length + (with-open-file (stream truename + :direction :input + :element-type '(unsigned-byte 8)) + (read-sequence first-line stream)))) (cond - ((and first-line - (>= (length (the simple-string first-line)) - (length fhsss)) - (string= first-line fhsss :end1 (length fhsss))) + ((and (= read-length (length fhsss)) + (do ((i 0 (1+ i))) + ((= i read-length) t) + (when (/= (char-code (aref fhsss i)) (aref first-line i)) + (return)))) (internal-load pathname truename if-does-not-exist verbose print :binary)) (t @@ -126,7 +132,7 @@ (> (file-write-date src-tn) (file-write-date obj-tn))) (restart-case (error "The object file ~A is~@ - older than the presumed source:~% ~A." + older than the presumed source:~% ~A." (namestring obj-tn) (namestring src-tn)) ;; FIXME: In CMU CL one of these was a CONTINUE case.