istream-crlf.c revision 6006aa91665cec400dcec3c40176361a84305aea
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen/* Copyright (c) 2007-2008 Dovecot authors, see the included COPYING file */
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainenstatic void i_stream_crlf_destroy(struct iostream_private *stream)
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen struct crlf_istream *cstream = (struct crlf_istream *)stream;
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Siraineni_stream_crlf_set_max_buffer_size(struct iostream_private *stream,
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen struct crlf_istream *cstream = (struct crlf_istream *)stream;
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen i_stream_set_max_buffer_size(cstream->istream.parent, max_size);
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainenstatic int i_stream_crlf_read_common(struct crlf_istream *cstream)
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen struct istream_private *stream = &cstream->istream;
5cc9289a900f5d40d126ca663790dca2a7456416Timo Sirainen const unsigned char *data;
5cc9289a900f5d40d126ca663790dca2a7456416Timo Sirainen data = i_stream_get_data(stream->parent, &size);
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen if (ret <= 0 && (ret != -2 || stream->skip == 0)) {
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen data = i_stream_get_data(stream->parent, &size);
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen if (!i_stream_get_buffer_space(stream, size, NULL))
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainenstatic ssize_t i_stream_crlf_read_crlf(struct istream_private *stream)
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen struct crlf_istream *cstream = (struct crlf_istream *)stream;
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen const unsigned char *data;
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen data = i_stream_get_data(stream->parent, &size);
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen /* @UNSAFE: add missing CRs */
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen for (i = 0; i < size && dest < stream->buffer_size; i++) {
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen if (i == 0) {
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen cstream->last_cr = stream->w_buffer[dest-1] == '\r';
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainenstatic ssize_t i_stream_crlf_read_lf(struct istream_private *stream)
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen struct crlf_istream *cstream = (struct crlf_istream *)stream;
596f582a422eddef951ee445f9a0ed3d4bf14ff8Timo Sirainen const unsigned char *data;
int diff;
if (ret <= 0)
return ret;
diff = 0;
if (ret == 0) {
return ret;
if (available == 0) {
static const struct stat *
static struct istream *