READ-SUBSTRING! can return less than the requested number of bytes.
authorChris Hanson <org/chris-hanson/cph>
Sat, 9 Jun 2001 00:29:48 +0000 (00:29 +0000)
committerChris Hanson <org/chris-hanson/cph>
Sat, 9 Jun 2001 00:29:48 +0000 (00:29 +0000)
Deal with it.

v7/src/imail/imail-util.scm

index 9321feb137c25629a7e73c7b9a17069fb934bf34..45923a8ad5c4a5e6e49309d6324646faac84d452 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: imail-util.scm,v 1.38 2001/05/15 19:47:02 cph Exp $
+;;; $Id: imail-util.scm,v 1.39 2001/06/09 00:29:48 cph Exp $
 ;;;
 ;;; Copyright (c) 1999-2001 Massachusetts Institute of Technology
 ;;;
     (lambda (port)
       (let ((n-bytes ((port/operation port 'LENGTH) port)))
        (let ((xstring (allocate-external-string n-bytes)))
-         (let ((n-read (read-substring! xstring 0 n-bytes port)))
-           (if (not (= n-read n-bytes))
-               (error "Failed to read complete file:"
-                      pathname n-read n-bytes)))
+         (let loop ((start 0))
+           (if (< start n-bytes)
+               (let ((n-read (read-substring! xstring 0 n-bytes port)))
+                 (if (= n-read 0)
+                     (error "Failed to read complete file:"
+                            (+ start n-read) n-bytes pathname))
+                 (loop (+ start n-read)))))
          xstring)))))
 
 (define (call-with-input-xstring xstring position receiver)