struct istream_private istream;
uoff_t size;
+ bool failed;
};
static ssize_t i_stream_sized_read(struct istream_private *stream)
ssize_t ret;
size_t pos;
+ if (sstream->failed) {
+ /* avoid duplicate errors */
+ stream->istream.stream_errno = EINVAL;
+ return -1;
+ }
+
if (stream->istream.v_offset +
(stream->pos - stream->skip) >= sstream->size) {
stream->istream.eof = TRUE;
stream->iostream.error);
pos = left;
stream->istream.eof = TRUE;
+ stream->istream.stream_errno = EINVAL;
+ sstream->failed = TRUE;
+ return -1;
} else if (!stream->istream.eof) {
/* still more to read */
} else if (stream->istream.stream_errno == ENOENT) {