From: Pierre Habouzit Date: Mon, 10 Sep 2007 10:35:08 +0000 (+0200) Subject: Use strbufs to in read_message (imap-send.c), custom buffer--. X-Git-Tag: v1.5.4-rc0~295^2~21 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=635d043f30c60f5ec8121bd94304e529f90407c7;p=git.git Use strbufs to in read_message (imap-send.c), custom buffer--. Signed-off-by: Pierre Habouzit Signed-off-by: Junio C Hamano --- diff --git a/imap-send.c b/imap-send.c index a5a069608..ecd4216a5 100644 --- a/imap-send.c +++ b/imap-send.c @@ -23,6 +23,7 @@ */ #include "cache.h" +#include "strbuf.h" typedef struct store_conf { char *name; @@ -1160,28 +1161,18 @@ imap_store_msg( store_t *gctx, msg_data_t *data, int *uid ) static int read_message( FILE *f, msg_data_t *msg ) { - int len, r; + struct strbuf buf; - memset( msg, 0, sizeof *msg ); - len = CHUNKSIZE; - msg->data = xmalloc( len+1 ); - msg->data[0] = 0; - - while(!feof( f )) { - if (msg->len >= len) { - void *p; - len += CHUNKSIZE; - p = xrealloc(msg->data, len+1); - if (!p) - break; - msg->data = p; - } - r = fread( &msg->data[msg->len], 1, len - msg->len, f ); - if (r <= 0) + memset(msg, 0, sizeof(*msg)); + strbuf_init(&buf, 0); + + do { + if (strbuf_fread(&buf, CHUNKSIZE, f) <= 0) break; - msg->len += r; - } - msg->data[msg->len] = 0; + } while (!feof(f)); + + msg->len = buf.len; + msg->data = strbuf_detach(&buf); return msg->len; }