summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-08-12 06:32:11 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-08-12 06:32:11 -0700
commit4da607e09383e71134c5ba1622f3c31803f8ea9b (patch)
tree3551d5544a37d50968c5b60000f18d0c08f76db6
parent8130fcae5f65bbc749459a91a3790a2e82e63b7b (diff)
downloadtxr-4da607e09383e71134c5ba1622f3c31803f8ea9b.tar.gz
txr-4da607e09383e71134c5ba1622f3c31803f8ea9b.tar.bz2
txr-4da607e09383e71134c5ba1622f3c31803f8ea9b.zip
Catenated stream reads must not close last stream.
* stream.c (cat_get_line, cat_get_char, cat_get_byte) Only close the head stream when popping it off the list.
-rw-r--r--stream.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/stream.c b/stream.c
index 20cf1e14..5a74bdc6 100644
--- a/stream.c
+++ b/stream.c
@@ -1720,9 +1720,10 @@ static val cat_get_line(val stream)
val line = get_line(fs);
if (line)
return line;
- close_stream(fs, t);
- if ((streams = rest(streams)) != nil)
+ if ((streams = rest(streams)) != nil) {
+ close_stream(fs, t);
set(mkloc(s->streams, stream), streams);
+ }
}
return nil;
@@ -1738,9 +1739,10 @@ static val cat_get_char(val stream)
val ch = get_char(fs);
if (ch)
return ch;
- close_stream(fs, t);
- if ((streams = rest(streams)) != nil)
+ if ((streams = rest(streams)) != nil) {
+ close_stream(fs, t);
set(mkloc(s->streams, stream), streams);
+ }
}
return nil;
@@ -1756,9 +1758,10 @@ static val cat_get_byte(val stream)
val byte = get_byte(fs);
if (byte)
return byte;
- close_stream(fs, t);
- if ((streams = rest(streams)) != nil)
+ if ((streams = rest(streams)) != nil) {
+ close_stream(fs, t);
set(mkloc(s->streams, stream), streams);
+ }
}
return nil;