/* Copyright (C) 2002 Timo Sirainen */
#include "common.h"
-#include "str.h"
+#include "buffer.h"
#include "istream.h"
#include "ostream.h"
#include "message-parser.h"
#define MAX_HEADER_BUFFER_SIZE (32*1024)
struct fetch_header_field_context {
- string_t *dest;
+ buffer_t *dest;
struct ostream *output;
uoff_t dest_size;
}
if (ctx->dest != NULL)
- str_append_n(ctx->dest, str, size);
+ buffer_append(ctx->dest, str, size);
ctx->dest_size += size;
if (ctx->output != NULL) {
message_parse_header_deinit(hdr_ctx);
i_assert(ctx->dest_size <= ctx->max_size);
- i_assert(ctx->dest == NULL || str_len(ctx->dest) == ctx->dest_size);
+ i_assert(ctx->dest == NULL ||
+ buffer_get_used_size(ctx->dest) == ctx->dest_size);
return TRUE;
}
{
struct fetch_header_field_context hdr_ctx;
const char *str;
+ const void *data;
+ size_t data_size;
uoff_t start_offset;
int failed;
i_assert(hdr_ctx.dest_size <= size->virtual_size);
} else {
- hdr_ctx.dest = t_str_new(size->virtual_size < 8192 ?
- size->virtual_size : 8192);
+ hdr_ctx.dest =
+ buffer_create_dynamic(data_stack_pool,
+ I_MIN(size->virtual_size, 8192),
+ (size_t)-1);
if (!fetch_header_fields(input, header_section, &hdr_ctx))
failed = TRUE;
}
i_assert(first_size == hdr_ctx.dest_size);
} else {
- if (o_stream_send(ctx->output, str_data(hdr_ctx.dest),
- str_len(hdr_ctx.dest)) < 0)
+ data = buffer_get_data(hdr_ctx.dest, &data_size);
+ if (o_stream_send(ctx->output, data, data_size) < 0)
failed = TRUE;
}
}