(let* ((real (probe-file stream))
(should-be-fasl-p
(and real (string= (pathname-type real) *fasl-file-type*))))
- (when (fasl-header-p stream :errorp should-be-fasl-p)
+ ;; Don't allow empty .fasls, and assume other empty files
+ ;; are source files.
+ (when (and (or should-be-fasl-p (not (eql 0 (file-length stream))))
+ (fasl-header-p stream :errorp should-be-fasl-p))
(return-from load (load-stream stream t)))))
;; Case 3: Open using the gived external format, process as source.
(with-open-file (stream pathname :external-format external-format)
(stimulate-sbcl)
(stimulate-sbcl)))
-
+(defun load-empty-file (type)
+ (let ((pathname (make-pathname :name "load-impure-lisp-empty-temp"
+ :type type)))
+ (unwind-protect
+ (progn
+ (with-open-file (f pathname
+ :if-exists :supersede
+ :direction :output))
+ (handler-case
+ (progn (load pathname) t)
+ (error () nil)))
+ (ignore-errors (delete-file pathname)))))
+
+(with-test (:name (load "empty.lisp"))
+ (assert (load-empty-file "lisp")))
+
+(with-test (:name (load "empty.fasl"))
+ (assert (not (load-empty-file "fasl"))))
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.29.35"
+"1.0.29.36"