int imap_cmd_queue (IMAP_DATA* idata, const char* cmdstr)
{
IMAP_COMMAND* cmd;
- unsigned int cmdlen;
if (idata->status == IMAP_FATAL)
{
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;
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;
}
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)
{
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 */
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;
}
}
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;
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;
}
FREE (&(*idata)->capstr);
mutt_free_list (&(*idata)->flags);
- FREE (&((*idata)->buf));
- FREE (&((*idata)->cmdbuf));
+ mutt_buffer_free(&(*idata)->cmdbuf);
+ FREE (&(*idata)->buf);
FREE (idata);
}