[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Non-Bug in Random File Access



    Date: Thu, 10 Dec 87 12:52 EST
    From: Barry Margolin <barmar@Think.COM>

	Date: Wed, 9 Dec 87 16:30+0100
	From: "Juergen Krey" <unido!gmdzi!LISPM-3!krey@uunet.uu.net>

	The following bug concerns the Random Access File capability of Genera
	7.1 .  I tried to open a file in random access mode an another host with
	the following code.  There are no hints in Manual 5, that my options to
	opening a file are inconsistent.

	(defun do-it (&optional (path "aid:>krey>network>atu_2.lisp"))
	  (setq path (fs:parse-pathname path))
	  (with-open-file (in  path :direction :input :direct t)
	    (read-record in 0 10)))

	I think I remember this working in Rel 6.x

    The problem is that you are opening a character stream instead of a
    binary stream.  Whenever you open a character stream to a file, the
    Lispm always tries to read the attribute list (the -*- line at the
    beginning).  In the case of direct access streams this loses because it
    hasn't done a :READ-BYTES first.

    You'll have to add :element-type '(unsigned-byte 8) to your
    WITH-OPEN-FILE, and change READ-RECORD to convert the bytes to
    characters.

The bug here (shared with 6.1) is that it doesn't blow out with a nice
error message.  You can't do direct characters because characters
take a variable number of bytes.  (Consider CRLF on various systems,
never mind Rel 7 extended characters).

Release 7 offers various tools for encoding characters into bytes.
However, you will have to work with 1byte0 positions, not 1character
0positions.