ostream-cmp.c revision 534e41e436a7546f36f61e0dc49c0c191d850f6b
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (c) 2010-2016 Dovecot authors, see the included COPYING file */
e2ce8d4a6ac5d82a906178148453e7613fab9ba0Timo Sirainenstatic void o_stream_cmp_close(struct iostream_private *stream,
c33d3f93abf8392fdc60e12bea41ffd12cc85a8dTimo Sirainen struct cmp_ostream *cstream = (struct cmp_ostream *)stream;
e2a88d59c0d47d63ce1ad5b1fd95e487124a3fd4Timo Sirainen (void)o_stream_flush(&cstream->ostream.ostream);
c33d3f93abf8392fdc60e12bea41ffd12cc85a8dTimo Sirainen const unsigned char *indata;
c33d3f93abf8392fdc60e12bea41ffd12cc85a8dTimo Sirainen while (size > 0) {
534e41e436a7546f36f61e0dc49c0c191d850f6bPhil Carmody (void)i_stream_read_bytes(input, &indata, &insize, size);
c33d3f93abf8392fdc60e12bea41ffd12cc85a8dTimo Sirainen if (insize == 0 || memcmp(data, indata, max) != 0)
c33d3f93abf8392fdc60e12bea41ffd12cc85a8dTimo Siraineno_stream_cmp_sendv(struct ostream_private *stream,
c33d3f93abf8392fdc60e12bea41ffd12cc85a8dTimo Sirainen const struct const_iovec *iov, unsigned int iov_count)
c33d3f93abf8392fdc60e12bea41ffd12cc85a8dTimo Sirainen struct cmp_ostream *cstream = (struct cmp_ostream *)stream;
c33d3f93abf8392fdc60e12bea41ffd12cc85a8dTimo Sirainen unsigned int i;
c33d3f93abf8392fdc60e12bea41ffd12cc85a8dTimo Sirainen for (i = 0; i < iov_count; i++) {
c33d3f93abf8392fdc60e12bea41ffd12cc85a8dTimo Sirainen if (!stream_cmp_block(cstream->input, iov[i].iov_base,
e3678f7bfba87b5aa1446a1a7b9928272b4f72a3Timo Sirainen if ((ret = o_stream_sendv(stream->parent, iov, iov_count)) < 0) {
c33d3f93abf8392fdc60e12bea41ffd12cc85a8dTimo Siraineno_stream_create_cmp(struct ostream *output, struct istream *input)
c33d3f93abf8392fdc60e12bea41ffd12cc85a8dTimo Sirainen cstream->ostream.iostream.close = o_stream_cmp_close;
8b247780e911909a9fdc47f69ce6d1478902ad98Timo Sirainen return o_stream_create(&cstream->ostream, output,