diff options
author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2025-08-29 08:28:32 +0100 |
---|---|---|
committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2025-08-29 08:28:32 +0100 |
commit | 29d245328823b303047e45e11f82fb1513b5638d (patch) | |
tree | 8b9cf5548a00988ab5e6351e5ba619100ca42efc | |
parent | cc56a2ee2b5703f9ea5ac63a86870af188845c30 (diff) | |
download | alisp-29d245328823b303047e45e11f82fb1513b5638d.tar.gz alisp-29d245328823b303047e45e11f82fb1513b5638d.tar.bz2 alisp-29d245328823b303047e45e11f82fb1513b5638d.zip |
Cleaned up bugs with stream implementation
Principle was that we may have read all the content from the
underlying pipe (s.t. it set the EoF flag) but we haven't actually
iterated the content.
-rw-r--r-- | main.c | 13 | ||||
-rw-r--r-- | stream.c | 4 |
2 files changed, 12 insertions, 5 deletions
@@ -20,14 +20,18 @@ int main(void) { - stream_t stream = {0}; - // const char data[] = "Hello, world!"; - // const sv_t sv = SV(data, ARRSIZE(data) - 1); + stream_t stream = {0}; + const char data[] = "Hello, world!"; + const sv_t sv = SV(data, ARRSIZE(data) - 1); + char filename[] = "test.txt"; + // stream_init_string(&stream, NULL, sv); - // stream_init_file(&stream, "test.txt"); + // FILE *fp = fopen(filename, "rb"); + // stream_init_file(&stream, filename, fp); stream_init_file(&stream, "stdin", stdin); + printf("[debug]: setup stream pipe\n"); do { @@ -36,5 +40,6 @@ int main(void) } while (!stream_eoc(&stream)); printf("%lu/%lu\n", stream.position, stream_size(&stream)); stream_stop(&stream); + // fclose(fp); return 0; } @@ -142,7 +142,9 @@ char stream_next(stream_t *stream) char stream_peek(stream_t *stream) { - if (stream_eos(stream)) + // If we've reached end of stream, and end of content, there's really nothing + // to check here. + if (stream_eoc(stream) && stream_eos(stream)) return '\0'; switch (stream->type) |