Exemple #1
0
static enum ostream_send_istream_result
o_stream_temp_send_istream(struct ostream_private *_outstream,
			   struct istream *instream)
{
	struct temp_ostream *outstream = (struct temp_ostream *)_outstream;
	enum ostream_send_istream_result res;

	if ((outstream->flags & IOSTREAM_TEMP_FLAG_TRY_FD_DUP) != 0) {
		if (o_stream_temp_dup_istream(outstream, instream, &res))
			return res;
		outstream->flags &= ~IOSTREAM_TEMP_FLAG_TRY_FD_DUP;
	}
	return io_stream_copy(&outstream->ostream.ostream, instream);
}
Exemple #2
0
static off_t o_stream_temp_send_istream(struct ostream_private *_outstream,
					struct istream *instream)
{
	struct temp_ostream *outstream = (struct temp_ostream *)_outstream;
	uoff_t orig_offset;
	int ret;

	if ((outstream->flags & IOSTREAM_TEMP_FLAG_TRY_FD_DUP) != 0) {
		orig_offset = outstream->dupstream_offset;
		if ((ret = o_stream_temp_dup_istream(outstream, instream)) > 0)
			return outstream->dupstream_offset - orig_offset;
		if (ret < 0)
			return -1;
		outstream->flags &= ~IOSTREAM_TEMP_FLAG_TRY_FD_DUP;
	}
	return io_stream_copy(&outstream->ostream.ostream, instream);
}