X-Git-Url: http://git.kpe.io/?p=kmrcl.git;a=blobdiff_plain;f=buff-input.lisp;h=4868ba1690e293a9ab036b85159c5c11228239fd;hp=36ff2276527c3faa6ec0616937e76f3b1f7ff8d2;hb=a283ba48cb48da22968784700aeb607b12160cdd;hpb=14d0c045792f76bbc92f4d3304a608603d0b7524 diff --git a/buff-input.lisp b/buff-input.lisp index 36ff227..4868ba1 100644 --- a/buff-input.lisp +++ b/buff-input.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: buff-input.lisp,v 1.8 2003/05/06 01:50:04 kevin Exp $ +;;;; $Id$ ;;;; ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -158,7 +158,7 @@ (declare (optimize (speed 3) (space 0) (safety 0))) (let ((pos 0) (done nil)) - (declare (fixnum pos) (boolean done)) + (declare (fixnum pos) (type boolean done)) (setf (fill-pointer linebuffer) 0) (do ((c (read-char strm nil +eof-char+) (read-char strm nil +eof-char+))) @@ -167,13 +167,16 @@ (if (eql c +eof-char+) eof linebuffer))) (declare (character c)) (cond - ((char= c #\Newline) - (unless (zerop pos) - (setf (fill-pointer linebuffer) (1- pos))) - (setf done t)) - ((char= +eof-char+) - (setf done t)) - (t - (setf (char linebuffer pos) c) - (incf pos))))))) + ((>= pos +max-line+) + (warn "Line overflow") + (setf done t)) + ((char= c #\Newline) + (when (plusp pos) + (setf (fill-pointer linebuffer) (1- pos))) + (setf done t)) + ((char= +eof-char+) + (setf done t)) + (t + (setf (char linebuffer pos) c) + (incf pos)))))))