stream->closed = TRUE;
}
- if (stream->stream_errno != 0)
- i_assert(stream->last_failed_errno != 0);
- else {
+ if (stream->stream_errno == 0)
stream->stream_errno = EPIPE;
- stream->last_failed_errno = EPIPE;
- }
}
void o_stream_destroy(struct ostream **stream)
return;
_stream->cork(_stream, FALSE);
- if (stream->stream_errno != 0)
- errno = stream->last_failed_errno = stream->stream_errno;
}
bool o_stream_is_corked(struct ostream *stream)
if (unlikely((ret = _stream->flush(_stream)) < 0)) {
i_assert(stream->stream_errno != 0);
- stream->last_failed_errno = stream->stream_errno;
errno = stream->stream_errno;
}
return ret;
if (unlikely(_stream->seek(_stream, offset) < 0)) {
i_assert(stream->stream_errno != 0);
- stream->last_failed_errno = stream->stream_errno;
errno = stream->stream_errno;
return -1;
}
if (unlikely(ret != (ssize_t)total_size)) {
if (ret < 0) {
i_assert(stream->stream_errno != 0);
- stream->last_failed_errno = stream->stream_errno;
errno = stream->stream_errno;
} else {
stream->overflow = TRUE;
{
o_stream_nflush(stream);
o_stream_ignore_last_errors(stream);
- errno = stream->last_failed_errno;
- return stream->last_failed_errno != 0 ? -1 : 0;
+ return stream->stream_errno != 0 ? -1 : 0;
}
void o_stream_ignore_last_errors(struct ostream *stream)
ret = _outstream->send_istream(_outstream, instream);
if (unlikely(ret < 0)) {
if (outstream->stream_errno != 0) {
- outstream->last_failed_errno = outstream->stream_errno;
errno = outstream->stream_errno;
} else {
i_assert(instream->stream_errno != 0);
data, size, offset);
if (unlikely(ret < 0)) {
i_assert(stream->stream_errno != 0);
- stream->last_failed_errno = stream->stream_errno;
errno = stream->stream_errno;
}
return ret;
struct ostream *dest = &_stream->ostream;
dest->stream_errno = src->stream_errno;
- dest->last_failed_errno = src->last_failed_errno;
dest->overflow = src->overflow;
if (src->closed)
o_stream_close(dest);
uoff_t offset ATTR_UNUSED)
{
_stream->ostream.stream_errno = ESPIPE;
- _stream->ostream.last_failed_errno = ESPIPE;
return -1;
}
size_t size ATTR_UNUSED, uoff_t offset ATTR_UNUSED)
{
_stream->ostream.stream_errno = ESPIPE;
- _stream->ostream.last_failed_errno = ESPIPE;
return -1;
}
stream = i_new(struct ostream_private, 1);
stream->ostream.closed = TRUE;
stream->ostream.stream_errno = stream_errno;
- stream->ostream.last_failed_errno = stream_errno;
output = o_stream_create(stream, NULL, -1);
o_stream_set_no_error_handling(output, TRUE);
/* errno for the last operation send/seek operation. cleared before
each call. */
int stream_errno;
- /* errno of the last failed send/seek. never cleared. */
- int last_failed_errno;
/* overflow is set when some of the data given to send()
functions was neither sent nor buffered. It's never unset inside
/* Return file descriptor for stream, or -1 if none is available. */
int o_stream_get_fd(struct ostream *stream);
-/* Returns error string for the previous error (stream_errno,
- not last_failed_errno). */
+/* Returns error string for the previous error. */
const char *o_stream_get_error(struct ostream *stream);
/* Close this stream (but not its parents) and unreference it. */
unsigned int iov_count);
void o_stream_nsend_str(struct ostream *stream, const char *str);
void o_stream_nflush(struct ostream *stream);
-/* Flushes the stream and returns -1 if stream->last_failed_errno is
- non-zero. Marks the stream's error handling as completed. errno is also set
- to last_failed_errno. */
+/* Flushes the stream and returns -1 if stream->stream_errno is non-zero.
+ Marks the stream's error handling as completed. */
int o_stream_nfinish(struct ostream *stream);
/* Marks the stream's error handling as completed to avoid i_panic() on
destroy. */