is read-string with custom binary port supported? pasted by klm` on Mon Aug 24 15:47:40 2026
(import chicken.port scheme.base) ;; is read-string with custom binary port supported? (define (custom-port) (let ((p (open-input-bytevector #u8(100 101 102 103 104 105 106 107))) (peek #f)) (make-binary-input-port (lambda () (read-u8 p)) (lambda () (char-ready? p)) (lambda () (close-input-port p)) #:peek-u8 #f #:read-bytevector (lambda (bv start end) (read-bytevector! bv p start end))))) ;; returns (100 #u8(101 102 103) 104) which is great (with-input-from-port (custom-port) (lambda () (list (read-u8) (read-bytevector 3) (read-u8)))) ;; changing to read-char still works: (with-input-from-port (custom-port) (lambda () (list (read-char) (read-bytevector 3) (read-char)))) ;; changing to read-read seems to break things: (with-input-from-port (custom-port) (lambda () (list (read-char) (read-string 3) (read-char)))) ;; changing to read-read seems to break things: (with-input-from-port (custom-port) (lambda () (list (read-u8) (read-string 3) (read-u8))))
revised version added by klm` on Mon Aug 24 15:54:19 2026
(import chicken.port scheme.base) (define (custom-port) (let ((p (open-input-bytevector #u8(100 101 102 103 104 105 106 107))) (peek #f)) (make-binary-input-port (lambda () (read-u8 p)) (lambda () (char-ready? p)) (lambda () (close-input-port p)) #:peek-u8 #f #:read-bytevector (lambda (bv start end) (read-bytevector! bv p start end))))) ;; returns (100 #u8(101 102 103) 104) which is great (with-input-from-port (custom-port) (lambda () (list (read-u8) (read-bytevector 3) (read-u8)))) ;; changing to read-char still works, still returns (100 #u8(101 102 103) 104) (with-input-from-port (custom-port) (lambda () (list (read-char) (read-bytevector 3) (read-char)))) ;; expected: (#\d "efg" #\h) ;; actual: (#\d "" #\h) (with-input-from-port (custom-port) (lambda () (list (read-char) (read-string 3) (read-char)))) ;; changing to read-u8 seems to break things in the same manner. ;; expected: (100 "efg" 104) ;; actual: (100 "" 104) (with-input-from-port (custom-port) (lambda () (list (read-u8) (read-string 3) (read-u8))))