INPUT-BUFFER/READ-SUBSTRING must use generic arithmetic for indexes
authorChris Hanson <org/chris-hanson/cph>
Sat, 9 Jun 2001 00:30:38 +0000 (00:30 +0000)
committerChris Hanson <org/chris-hanson/cph>
Sat, 9 Jun 2001 00:30:38 +0000 (00:30 +0000)
into the substring, because it might be an xstring that is larger than
the fixnum range.

v7/src/runtime/io.scm

index 469691f4f5d1151f5796e51b1c2db61957779e47..baa837d56db7f34aba787880a94ac1232d12d19c 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: io.scm,v 14.63 2001/03/21 05:40:33 cph Exp $
+$Id: io.scm,v 14.64 2001/06/09 00:30:38 cph Exp $
 
 Copyright (c) 1988-2001 Massachusetts Institute of Technology
 
@@ -1066,8 +1066,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
       (cond ((fix:< bstart bend)
             (let ((bstring (input-buffer/string buffer))
                   (available (fix:- bend bstart))
-                  (needed (fix:- end index)))
-              (if (fix:>= available needed)
+                  (needed (- end index)))
+              (if (>= available needed)
                   (begin
                     (let ((bend (fix:+ bstart needed)))
                       (substring-move! bstring bstart bend string index)
@@ -1077,8 +1077,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
                     (substring-move! bstring bstart bend string index)
                     (set-input-buffer/start-index! buffer bend)
                     (if (input-buffer/char-ready? buffer 0)
-                        (transfer-input-buffer (fix:+ index available))
-                        (fix:+ index available))))))
+                        (transfer-input-buffer (+ index available))
+                        (+ index available))))))
            ((input-buffer/closed? buffer)
             index)
            (else
@@ -1086,21 +1086,21 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 
   (define (read-directly index)
     (if (and (not (input-buffer/line-translation buffer))
-            (fix:>= (fix:- end index) (input-buffer/size buffer)))
+            (>= (- end index) (input-buffer/size buffer)))
        (let ((n
               (channel-read (input-buffer/channel buffer) string index end)))
          (if n
-             (fix:+ index n)
-             (and (not (fix:= index start)) index)))
+             (+ index n)
+             (and (not (= index start)) index)))
        (if (input-buffer/fill buffer)
            (transfer-input-buffer index)
-           (and (not (fix:= index start)) index))))
+           (and (not (= index start)) index))))
 
   (without-interrupts
    (lambda ()
      (let ((index (transfer-input-buffer start)))
        (and index
-           (fix:- index start))))))
+           (- index start))))))
 \f
 (define (input-buffer/read-until-delimiter buffer delimiters)
   (without-interrupts