Fix READ-PACKET in swank.scm to cope with partial reads.
authorTaylor R Campbell <campbell@mumble.net>
Tue, 11 Dec 2012 20:16:28 +0000 (20:16 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Tue, 11 Dec 2012 20:16:28 +0000 (20:16 +0000)
Thanks, ecraven.

src/runtime/swank.scm

index 48239cf71e4160541f0f357e7cdb8663aec25d0c..77bb51c78cda4bc0d5cd446591d1b6308b17cc4d 100644 (file)
@@ -144,8 +144,15 @@ USA.
   (dispatch (decode-message socket (read-packet socket)) socket level))
 
 (define (read-packet in)
-  (if (eof-object? (peek-char in))
-      (disconnect))
+  (define (read-string! buffer in)
+    (let loop ((i 0))
+      (if (< i (string-length buffer))
+         (let ((n (read-substring! buffer i (string-length buffer) in)))
+           ;; (assert (exact-nonnegative-integer? n))
+           ;; (assert (<= n (- (string-length buffer) i)))
+           (if (zero? n)               ;EOF
+               (disconnect))
+           (loop (+ i n))))))
   (let ((buffer
         (make-string
          (let ((buffer (make-string 6)))