From c6103603bf535f0111f664f3f456f1fbf7cf2a2d Mon Sep 17 00:00:00 2001 From: Brendan Cully Date: Thu, 15 Dec 2005 18:55:41 +0000 Subject: [PATCH] Use mutt_buffer_printf in several places instead of a homebrew version. --- imap/command.c | 29 ++++++++--------------------- imap/imap.c | 20 ++++---------------- imap/imap_private.h | 4 +--- imap/util.c | 12 +++++++++--- 4 files changed, 22 insertions(+), 43 deletions(-) diff --git a/imap/command.c b/imap/command.c index 54e5b07e5..738e38aca 100644 --- a/imap/command.c +++ b/imap/command.c @@ -70,7 +70,6 @@ static char *Capabilities[] = { int imap_cmd_queue (IMAP_DATA* idata, const char* cmdstr) { IMAP_COMMAND* cmd; - unsigned int cmdlen; if (idata->status == IMAP_FATAL) { @@ -81,20 +80,8 @@ int imap_cmd_queue (IMAP_DATA* idata, const char* cmdstr) if (!(cmd = cmd_new (idata))) return IMAP_CMD_BAD; - /* seq, space, cmd, \r\n\0 */ - cmdlen = strlen (cmd->seq) + strlen (cmdstr) + 4; - if (idata->state == IMAP_IDLE) - cmdlen += 6; /* DONE\r\n */ - if (idata->cmdbuflen < cmdlen + (idata->cmdtail - idata->cmdbuf)) - { - unsigned int tailoff = idata->cmdtail - idata->cmdbuf; - safe_realloc (&idata->cmdbuf, tailoff + cmdlen); - idata->cmdbuflen = tailoff + cmdlen; - idata->cmdtail = idata->cmdbuf + tailoff; - } - snprintf (idata->cmdtail, cmdlen, "%s%s %s\r\n", - idata->state == IMAP_IDLE ? "DONE\r\n" : "", cmd->seq, cmdstr); - idata->cmdtail += cmdlen - 1; + mutt_buffer_printf (idata->cmdbuf, "%s%s %s\r\n", + idata->state == IMAP_IDLE ? "DONE\r\n" : "", cmd->seq, cmdstr); if (idata->state == IMAP_IDLE) idata->state = IMAP_SELECTED; @@ -112,11 +99,11 @@ int imap_cmd_start (IMAP_DATA* idata, const char* cmdstr) return rc; /* don't write old or empty commands */ - if (idata->cmdtail == idata->cmdbuf) + if (idata->cmdbuf->dptr == idata->cmdbuf->data) return IMAP_CMD_BAD; - rc = mutt_socket_write (idata->conn, idata->cmdbuf); - idata->cmdtail = idata->cmdbuf; + rc = mutt_socket_write (idata->conn, idata->cmdbuf->data); + idata->cmdbuf->dptr = idata->cmdbuf->data; return (rc < 0) ? IMAP_CMD_BAD : 0; } @@ -229,12 +216,12 @@ int imap_exec (IMAP_DATA* idata, const char* cmdstr, int flags) return rc; /* don't write old or empty commands */ - if (idata->cmdtail == idata->cmdbuf) + if (idata->cmdbuf->dptr == idata->cmdbuf->data) return IMAP_CMD_BAD; - rc = mutt_socket_write_d (idata->conn, idata->cmdbuf, + rc = mutt_socket_write_d (idata->conn, idata->cmdbuf->data, flags & IMAP_CMD_PASS ? IMAP_LOG_PASS : IMAP_LOG_CMD); - idata->cmdtail = idata->cmdbuf; + idata->cmdbuf->dptr = idata->cmdbuf->data; if (rc < 0) { diff --git a/imap/imap.c b/imap/imap.c index 8f14a84c7..60bd5e4c7 100644 --- a/imap/imap.c +++ b/imap/imap.c @@ -851,8 +851,6 @@ int imap_make_msg_set (IMAP_DATA* idata, BUFFER* buf, int flag, int changed) unsigned int setstart = 0; /* start of current message range */ int n; short oldsort; /* we clobber reverse, must restore it */ - /* assuming 32-bit UIDs */ - char uid[12]; int started = 0; /* make copy of header pointers to sort in natural order */ @@ -893,31 +891,21 @@ int imap_make_msg_set (IMAP_DATA* idata, BUFFER* buf, int flag, int changed) setstart = HEADER_DATA (hdrs[n])->uid; if (started == 0) { - snprintf (uid, sizeof (uid), "%u", HEADER_DATA (hdrs[n])->uid); - mutt_buffer_addstr (buf, uid); + mutt_buffer_printf (buf, "%u", HEADER_DATA (hdrs[n])->uid); started = 1; } else - { - snprintf (uid, sizeof (uid), ",%u", HEADER_DATA (hdrs[n])->uid); - mutt_buffer_addstr (buf, uid); - } + mutt_buffer_printf (buf, ",%u", HEADER_DATA (hdrs[n])->uid); } /* tie up if the last message also matches */ else if (n == idata->ctx->msgcount-1) - { - snprintf (uid, sizeof (uid), ":%u", HEADER_DATA (hdrs[n])->uid); - mutt_buffer_addstr (buf, uid); - } + mutt_buffer_printf (buf, ":%u", HEADER_DATA (hdrs[n])->uid); } /* this message is not expunged and doesn't match. End current set. */ else if (setstart && hdrs[n]->active) { if (HEADER_DATA (hdrs[n-1])->uid > setstart) - { - snprintf (uid, sizeof (uid), ":%u", HEADER_DATA (hdrs[n-1])->uid); - mutt_buffer_addstr (buf, uid); - } + mutt_buffer_printf (buf, ":%u", HEADER_DATA (hdrs[n-1])->uid); setstart = 0; } } diff --git a/imap/imap_private.h b/imap/imap_private.h index ed978c41d..fe1cdcef9 100644 --- a/imap/imap_private.h +++ b/imap/imap_private.h @@ -196,9 +196,7 @@ typedef struct IMAP_COMMAND cmds[IMAP_PIPELINE_DEPTH]; int nextcmd; int lastcmd; - char* cmdbuf; - char* cmdtail; - unsigned int cmdbuflen; + BUFFER* cmdbuf; /* The following data is all specific to the currently SELECTED mbox */ char delim; diff --git a/imap/util.c b/imap/util.c index cfd65d3df..1f6bebe00 100644 --- a/imap/util.c +++ b/imap/util.c @@ -248,7 +248,13 @@ void imap_error (const char *where, const char *msg) IMAP_DATA* imap_new_idata (void) { IMAP_DATA* idata = safe_calloc (1, sizeof (IMAP_DATA)); - + + if (!idata) + return NULL; + + if (!(idata->cmdbuf = mutt_buffer_init (NULL))) + FREE (&idata); + return idata; } @@ -260,8 +266,8 @@ void imap_free_idata (IMAP_DATA** idata) FREE (&(*idata)->capstr); mutt_free_list (&(*idata)->flags); - FREE (&((*idata)->buf)); - FREE (&((*idata)->cmdbuf)); + mutt_buffer_free(&(*idata)->cmdbuf); + FREE (&(*idata)->buf); FREE (idata); } -- 2.40.0