aboutsummaryrefslogtreecommitdiff
path: root/pnm/read.scm
diff options
context:
space:
mode:
authorMasaya Tojo <masaya@tojo.tokyo>2024-08-03 23:46:10 +0900
committerMasaya Tojo <masaya@tojo.tokyo>2024-08-03 23:46:10 +0900
commit55b4c1c976190d9e92523e9cae2dee03e975bb4a (patch)
tree16df7f1c105415e531f09778c7e7d96e5871506c /pnm/read.scm
parentd4ad3d9686a2e4d02d600d05d319424924e07881 (diff)
Fix read-whitespaces behavior
Diffstat (limited to 'pnm/read.scm')
-rw-r--r--pnm/read.scm27
1 files changed, 19 insertions, 8 deletions
diff --git a/pnm/read.scm b/pnm/read.scm
index 5cfec94..e3cb84b 100644
--- a/pnm/read.scm
+++ b/pnm/read.scm
@@ -49,8 +49,11 @@
(unexpected-char-error))
n))
(define (read-whitespaces*)
- (when (eof-object? (read-whitespaces in))
- (unexpected-eof-error)))
+ (let ((result (read-whitespaces in)))
+ (when (eof-object? result)
+ (unexpected-eof-error))
+ (unless result
+ (error "(pnm read) image-read: Unexpected character (expected whitespace)"))))
(let ((magic-number (read-magic-number*)))
(read-whitespaces*)
@@ -105,11 +108,22 @@
(cond ((eof-object? u8) (eof-object))
((newline? u8)
(read-u8 in)
- (read-whitespaces in))
+ (skip-whitespace in))
(else
(read-u8 in)
(read-comment in)))))
+ (define (skip-whitespace in)
+ (let ((u8 (peek-u8 in)))
+ (cond ((eof-object? u8) #t)
+ ((whitespace? u8)
+ (read-u8 in)
+ (skip-whitespace in))
+ ((comment? u8)
+ (read-u8 in)
+ (read-comment in))
+ (else #t))))
+
(define (digit? u8)
(and (<= 48 u8)
(<= u8 57)))
@@ -134,11 +148,8 @@
(cond ((eof-object? u8) (eof-object))
((whitespace? u8)
(read-u8 in)
- (read-whitespaces in))
- ((comment? u8)
- (read-u8 in)
- (read-comment in))
- (else #t))))
+ (skip-whitespace in))
+ (else #f))))
(define (read-number in)
(call-with-current-continuation