]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Added i_stream_alloc()
authorTimo Sirainen <tss@iki.fi>
Thu, 28 Jun 2012 00:18:55 +0000 (03:18 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 28 Jun 2012 00:18:55 +0000 (03:18 +0300)
src/lib-mail/istream-binary-converter.c
src/lib/istream-private.h
src/lib/istream.c

index 74a896f80313c7f0229dafa75baf1e21675dbe18..215de9814e34408bb9dd41747f36cc0437c0b3fa 100644 (file)
@@ -30,25 +30,6 @@ struct binary_converter_istream {
 static void stream_add_data(struct binary_converter_istream *bstream,
                            const void *data, size_t size);
 
-static void *
-stream_alloc_data(struct binary_converter_istream *bstream, size_t size)
-{
-       struct istream_private *stream = &bstream->istream;
-       size_t old_size, avail_size;
-
-       i_stream_try_alloc(stream, size, &avail_size);
-       if (avail_size < size) {
-               old_size = stream->buffer_size;
-               stream->buffer_size = nearest_power(stream->pos + size);
-               stream->w_buffer = i_realloc(stream->w_buffer, old_size,
-                                            stream->buffer_size);
-               stream->buffer = stream->w_buffer;
-               i_stream_try_alloc(stream, size, &avail_size);
-               i_assert(avail_size >= size);
-       }
-       return stream->w_buffer + stream->pos;
-}
-
 static bool part_can_convert(const struct message_part *part)
 {
        /* some MUAs use "c-t-e: binary" for multiparts.
@@ -92,13 +73,14 @@ static void stream_add_data(struct binary_converter_istream *bstream,
                stream_finish_convert_decision(bstream);
        }
 
-       memcpy(stream_alloc_data(bstream, size), data, size);
+       memcpy(i_stream_alloc(&bstream->istream, size), data, size);
        bstream->istream.pos += size;
 }
 
 static void stream_encode_base64(struct binary_converter_istream *bstream,
                                 const void *_data, size_t size)
 {
+       struct istream_private *stream = &bstream->istream;
        const unsigned char *data = _data;
        buffer_t buf;
        void *dest;
@@ -128,23 +110,23 @@ static void stream_encode_base64(struct binary_converter_istream *bstream,
                }
 
                if (bstream->base64_block_pos == BASE64_BLOCKS_PER_LINE) {
-                       memcpy(stream_alloc_data(bstream, 2), "\r\n", 2);
-                       bstream->istream.pos += 2;
+                       memcpy(i_stream_alloc(stream, 2), "\r\n", 2);
+                       stream->pos += 2;
                        bstream->base64_block_pos = 0;
                }
 
-               dest = stream_alloc_data(bstream, BASE64_BLOCK_SIZE);
+               dest = i_stream_alloc(stream, BASE64_BLOCK_SIZE);
                buffer_create_data(&buf, dest, BASE64_BLOCK_SIZE);
                base64_encode(base64_block, base64_block_len, &buf);
-               bstream->istream.pos += buf.used;
+               stream->pos += buf.used;
                bstream->base64_block_pos++;
                bstream->base64_delayed_len = 0;
        }
 
        while (size >= BASE64_BLOCK_INPUT_SIZE) {
                if (bstream->base64_block_pos == BASE64_BLOCKS_PER_LINE) {
-                       memcpy(stream_alloc_data(bstream, 2), "\r\n", 2);
-                       bstream->istream.pos += 2;
+                       memcpy(i_stream_alloc(stream, 2), "\r\n", 2);
+                       stream->pos += 2;
                        bstream->base64_block_pos = 0;
                }
 
@@ -160,10 +142,10 @@ static void stream_encode_base64(struct binary_converter_istream *bstream,
                }
 
                max_encoded_size = MAX_BASE64_ENCODED_SIZE(encode_size);
-               dest = stream_alloc_data(bstream, max_encoded_size);
+               dest = i_stream_alloc(stream, max_encoded_size);
                buffer_create_data(&buf, dest, max_encoded_size);
                base64_encode(data, encode_size, &buf);
-               bstream->istream.pos += buf.used;
+               stream->pos += buf.used;
                bstream->base64_block_pos += encode_blocks;
 
                data += encode_size;
index 7fb51e67f126e93bd72051ac97da1a90a13c5faf..5cefe37af770cda9ea494941b23f993157eb87ee 100644 (file)
@@ -56,6 +56,7 @@ void i_stream_grow_buffer(struct istream_private *stream, size_t bytes);
 bool ATTR_NOWARN_UNUSED_RESULT
 i_stream_try_alloc(struct istream_private *stream,
                   size_t wanted_size, size_t *size_r);
+void *i_stream_alloc(struct istream_private *stream, size_t size);
 ssize_t i_stream_read_copy_from_parent(struct istream *istream);
 void i_stream_default_seek(struct istream_private *stream,
                           uoff_t v_offset, bool mark);
index 94e24df0cbd2a9ca55d6c968f1e32efb308cd46b..6207e3f9e7b4b89928f754c807a5b8c05d71c8ee 100644 (file)
@@ -515,6 +515,23 @@ bool i_stream_try_alloc(struct istream_private *stream,
        return stream->pos != stream->buffer_size;
 }
 
+void *i_stream_alloc(struct istream_private *stream, size_t size)
+{
+       size_t old_size, avail_size;
+
+       i_stream_try_alloc(stream, size, &avail_size);
+       if (avail_size < size) {
+               old_size = stream->buffer_size;
+               stream->buffer_size = nearest_power(stream->pos + size);
+               stream->w_buffer = i_realloc(stream->w_buffer, old_size,
+                                            stream->buffer_size);
+               stream->buffer = stream->w_buffer;
+               i_stream_try_alloc(stream, size, &avail_size);
+               i_assert(avail_size >= size);
+       }
+       return stream->w_buffer + stream->pos;
+}
+
 bool i_stream_add_data(struct istream *_stream, const unsigned char *data,
                       size_t size)
 {