diff options
author | Pierre Habouzit <madcoder@debian.org> | 2007-09-10 12:35:08 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-09-10 12:50:42 -0700 |
commit | 635d043f30c60f5ec8121bd94304e529f90407c7 (patch) | |
tree | 71320b13cc7ea160704196e5c68e8bfce620721d /imap-send.c | |
parent | b655d46bb2d8aa12f3203f93c323b41df161fd26 (diff) | |
download | git-635d043f30c60f5ec8121bd94304e529f90407c7.tar.gz |
Use strbufs to in read_message (imap-send.c), custom buffer--.
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'imap-send.c')
-rw-r--r-- | imap-send.c | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/imap-send.c b/imap-send.c index a5a0696084..ecd4216a56 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; } |