aboutsummaryrefslogtreecommitdiff
path: root/stream.c
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2025-08-29 20:03:43 +0100
committerAryadev Chavali <aryadev@aryadevchavali.com>2025-08-29 20:03:43 +0100
commitfadbbd892794e0298696f890d69ae72fcfdb4f85 (patch)
tree9bbba03b2aee17277ed7e480868a7ff21ab979b5 /stream.c
parentb403368d113197ee3e0d690b31cef4d9b85b3272 (diff)
downloadalisp-fadbbd892794e0298696f890d69ae72fcfdb4f85.tar.gz
alisp-fadbbd892794e0298696f890d69ae72fcfdb4f85.tar.bz2
alisp-fadbbd892794e0298696f890d69ae72fcfdb4f85.zip
make eoc also check feof on STREAM_TYPE_FILE
Diffstat (limited to 'stream.c')
-rw-r--r--stream.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/stream.c b/stream.c
index 573b14b..1823279 100644
--- a/stream.c
+++ b/stream.c
@@ -101,7 +101,8 @@ bool stream_eoc(stream_t *stream)
case STREAM_TYPE_STRING:
return stream->position >= stream->string.size;
case STREAM_TYPE_FILE:
- return stream->position >= stream->pipe.cache.size;
+ return feof(stream->pipe.file) &&
+ stream->position >= stream->pipe.cache.size;
default:
FAIL("Unreachable");
return 0;
@@ -144,7 +145,7 @@ char stream_peek(stream_t *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))
+ if (stream_eoc(stream))
return '\0';
switch (stream->type)
@@ -188,7 +189,7 @@ bool stream_seek(stream_t *stream, i64 offset)
bool stream_seek_forward(stream_t *stream, u64 offset)
{
- if (stream_eos(stream) && stream_eoc(stream))
+ if (stream_eoc(stream))
return false;
switch (stream->type)
@@ -242,7 +243,7 @@ bool stream_seek_backward(stream_t *stream, u64 offset)
sv_t stream_substr(stream_t *stream, u64 size)
{
- if (stream_eos(stream) && stream_eoc(stream))
+ if (stream_eoc(stream))
return SV(NULL, 0);
// TODO: this is kinda disgusting, any better way of doing this