const struct stat *st;
size_t size;
- if (i_stream_stat(stream->parent, exact, &st) < 0)
+ if (i_stream_stat(stream->parent, exact, &st) < 0) {
+ stream->istream.stream_errno = stream->parent->stream_errno;
return -1;
+ }
stream->statbuf = *st;
/* when exact=FALSE always return the parent stat's size, even if we
const struct stat *st;
size_t size;
- if (i_stream_stat(stream->parent, exact, &st) < 0)
+ if (i_stream_stat(stream->parent, exact, &st) < 0) {
+ stream->istream.stream_errno = stream->parent->stream_errno;
return -1;
+ }
stream->statbuf = *st;
/* when exact=FALSE always return the parent stat's size, even if we
const struct stat *st;
size_t size;
- if (i_stream_stat(stream->parent, exact, &st) < 0)
+ if (i_stream_stat(stream->parent, exact, &st) < 0) {
+ stream->istream.stream_errno = stream->parent->stream_errno;
return -1;
+ }
stream->statbuf = *st;
/* when exact=FALSE always return the parent stat's size, even if we
const struct stat *st;
size_t size;
- if (i_stream_stat(stream->parent, exact, &st) < 0)
+ if (i_stream_stat(stream->parent, exact, &st) < 0) {
+ stream->istream.stream_errno = stream->parent->stream_errno;
return -1;
+ }
stream->statbuf = *st;
/* when exact=FALSE always return the parent stat's size, even if we
const struct stat *st;
int ret;
- if (i_stream_stat(stream->parent, exact, &st) < 0)
+ if (i_stream_stat(stream->parent, exact, &st) < 0) {
+ stream->istream.stream_errno = stream->parent->stream_errno;
return -1;
+ }
stream->statbuf = *st;
if (mstream->in_metadata) {
const struct stat *st;
uoff_t old_offset;
- if (i_stream_stat(stream->parent, exact, &st) < 0)
+ if (i_stream_stat(stream->parent, exact, &st) < 0) {
+ stream->istream.stream_errno = stream->parent->stream_errno;
return -1;
+ }
stream->statbuf = *st;
if (stream->statbuf.st_size == -1 || !exact)
return 0;
const struct stat *st;
struct raw_mbox_istream *rstream = (struct raw_mbox_istream *)stream;
- if (i_stream_stat(stream->parent, exact, &st) < 0)
+ if (i_stream_stat(stream->parent, exact, &st) < 0) {
+ stream->istream.stream_errno = stream->parent->stream_errno;
return -1;
+ }
stream->statbuf = *st;
stream->statbuf.st_size =
struct limit_istream *lstream = (struct limit_istream *) stream;
const struct stat *st;
- if (i_stream_stat(stream->parent, exact, &st) < 0)
+ if (i_stream_stat(stream->parent, exact, &st) < 0) {
+ stream->istream.stream_errno = stream->parent->stream_errno;
return -1;
+ }
stream->statbuf = *st;
if (lstream->v_size != (uoff_t)-1)
/* parent stream may be base64-decoder. don't waste time decoding the
entire stream, since we already know what the size is supposed
to be. */
- if (i_stream_stat(stream->parent, FALSE, &st) < 0)
+ if (i_stream_stat(stream->parent, FALSE, &st) < 0) {
+ stream->istream.stream_errno = stream->parent->stream_errno;
return -1;
+ }
stream->statbuf = *st;
stream->statbuf.st_size = sstream->size;
if (stream->parent == NULL)
return stream->istream.stream_errno == 0 ? 0 : -1;
- if (i_stream_stat(stream->parent, exact, &st) < 0)
+ if (i_stream_stat(stream->parent, exact, &st) < 0) {
+ stream->istream.stream_errno = stream->parent->stream_errno;
return -1;
+ }
stream->statbuf = *st;
if (exact && !stream->stream_size_passthrough) {
/* exact size is not known, even if parent returned something */
i_stream_default_get_size(struct istream_private *stream,
bool exact, uoff_t *size_r)
{
- if (stream->stat(stream, exact) < 0)
+ if (stream->stat(stream, exact) < 0) {
+ stream->istream.stream_errno = stream->parent->stream_errno;
return -1;
+ }
if (stream->statbuf.st_size == -1)
return 0;
i_assert(!exact);
- if (i_stream_stat(stream->parent, exact, &st) < 0)
+ if (i_stream_stat(stream->parent, exact, &st) < 0) {
+ stream->istream.stream_errno = stream->parent->stream_errno;
return -1;
+ }
stream->statbuf = *st;
return 0;
}