Index: tcp.scm =================================================================== --- tcp.scm (revision 13272) +++ tcp.scm (working copy) @@ -414,28 +414,33 @@ m (loop n m start) ) ) ) ) ) (lambda (p limit) ; read-line - (let loop ((str #f)) + (let loop ((str #f) + (limit (or limit (##sys#fudge 21)))) (cond ((fx< bufindex buflen) (##sys#scan-buffer-line buf - buflen + (fxmin buflen limit) bufindex (lambda (pos2 next) - (let ((dest (##sys#make-string (fx- pos2 bufindex)))) + (let* ((len (fx- pos2 bufindex)) + (dest (##sys#make-string len))) (##core#inline "C_substring_copy" buf dest bufindex pos2 0) (set! bufindex next) - (cond ((eq? pos2 next) ; no line-terminator encountered + (cond ((eq? pos2 limit) ; no line-terminator, hit limit + (if str (##sys#string-append str dest) dest)) + ((eq? pos2 next) ; no line-terminator, hit buflen (read-input) (if (fx>= bufindex buflen) (or str "") - (loop (if str (##sys#string-append str dest) dest)) ) ) + (loop (if str (##sys#string-append str dest) dest) + (fx- limit len)) ) ) (else (##sys#setislot p 4 (fx+ (##sys#slot p 4) 1)) (if str (##sys#string-append str dest) dest)) ) ) ) ) ) (else (read-input) (if (fx< bufindex buflen) - (loop str) + (loop str limit) #!eof) ) ) ) ) ) ) (output (lambda (s)