diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-08-12 06:32:11 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-08-12 06:32:11 -0700 |
commit | 4da607e09383e71134c5ba1622f3c31803f8ea9b (patch) | |
tree | 3551d5544a37d50968c5b60000f18d0c08f76db6 | |
parent | 8130fcae5f65bbc749459a91a3790a2e82e63b7b (diff) | |
download | txr-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.c | 15 |
1 files changed, 9 insertions, 6 deletions
@@ -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; |