~ chicken-core (chicken-5) f815158289343a4021eb739694462289853ccce1
commit f815158289343a4021eb739694462289853ccce1 Author: Evan Hanson <evhan@foldling.org> AuthorDate: Tue Apr 5 20:33:15 2016 +1200 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Tue Apr 5 20:35:25 2016 +1200 Return #!eof on end-of-file in read-u8vector This change is for uniformity with read-string, and fixes an invalid memory access in read-u8vector's use of `##sys#read-string/port`, which didn't check for #!eof. diff --git a/manual/Unit srfi-4 b/manual/Unit srfi-4 index dfc42345..8043dd96 100644 --- a/manual/Unit srfi-4 +++ b/manual/Unit srfi-4 @@ -87,10 +87,12 @@ not including {{TO}}. <procedure>(read-u8vector [LENGTH [PORT]])</procedure> Reads {{LENGTH}} bytes from the {{PORT}} and returns a fresh -{{u8vector}} or less if end-of-file is encountered. {{PORT}} defaults to the -value of {{(current-input-port)}}. +{{u8vector}}, or as many as are available before end-of-file is +encountered. {{PORT}} defaults to the value of {{(current-input-port)}}. +If no bytes are available before the end-of-file, {{#!eof}} is returned. -If {{LENGTH}} is {{#f}}, the vector will be filled completely until end-of-file is reached. +If {{LENGTH}} is {{#f}}, the vector will be filled completely until +end-of-file is reached. <procedure>(read-u8vector! LENGTH U8VECTOR [PORT [START]])</procedure> diff --git a/srfi-4.scm b/srfi-4.scm index 6403f3f4..25a15cd4 100644 --- a/srfi-4.scm +++ b/srfi-4.scm @@ -816,7 +816,9 @@ EOF (define (read-u8vector #!optional n (p ##sys#standard-input)) (let ((str (##sys#read-string/port n p))) - (##core#inline "C_string_to_bytevector" str) - (##sys#make-structure 'u8vector str))) + (cond ((eof-object? str) str) + (else + (##core#inline "C_string_to_bytevector" str) + (##sys#make-structure 'u8vector str))))) (register-feature! 'srfi-4))Trap