if (!cmd)
return IMAP_CMD_BAD;
- if (mutt_buffer_printf(adata->cmdbuf, "%s %s\r\n", cmd->seq, cmdstr) < 0)
+ if (mutt_buffer_add_printf(adata->cmdbuf, "%s %s\r\n", cmd->seq, cmdstr) < 0)
return IMAP_CMD_BAD;
return 0;
/* successfully entered IDLE state */
adata->state = IMAP_IDLE;
/* queue automatic exit when next command is issued */
- mutt_buffer_printf(adata->cmdbuf, "DONE\r\n");
+ mutt_buffer_addstr(adata->cmdbuf, "DONE\r\n");
rc = IMAP_CMD_OK;
}
if (rc != IMAP_CMD_OK)
setstart = IMAP_EDATA(emails[n])->uid;
if (!started)
{
- mutt_buffer_printf(buf, "%u", IMAP_EDATA(emails[n])->uid);
+ mutt_buffer_add_printf(buf, "%u", IMAP_EDATA(emails[n])->uid);
started = true;
}
else
- mutt_buffer_printf(buf, ",%u", IMAP_EDATA(emails[n])->uid);
+ mutt_buffer_add_printf(buf, ",%u", IMAP_EDATA(emails[n])->uid);
}
/* tie up if the last message also matches */
else if (n == adata->ctx->mailbox->msg_count - 1)
- mutt_buffer_printf(buf, ":%u", IMAP_EDATA(emails[n])->uid);
+ mutt_buffer_add_printf(buf, ":%u", IMAP_EDATA(emails[n])->uid);
}
/* End current set if message doesn't match or we've reached the end
* of the mailbox via inactive messages following the last match. */
else if (setstart && (emails[n]->active || n == adata->ctx->mailbox->msg_count - 1))
{
if (IMAP_EDATA(emails[n - 1])->uid > setstart)
- mutt_buffer_printf(buf, ":%u", IMAP_EDATA(emails[n - 1])->uid);
+ mutt_buffer_add_printf(buf, ":%u", IMAP_EDATA(emails[n - 1])->uid);
setstart = 0;
}
}
do
{
cmd->dptr = cmd->data;
- mutt_buffer_printf(cmd, "%s ", pre);
+ mutt_buffer_add_printf(cmd, "%s ", pre);
rc = make_msg_set(adata, cmd, flag, changed, invert, &pos);
if (rc > 0)
{
- mutt_buffer_printf(cmd, " %s", post);
+ mutt_buffer_add_printf(cmd, " %s", post);
if (imap_exec(adata, cmd->data, IMAP_CMD_QUEUE))
{
rc = -1;
break;
if (state == 1)
- mutt_buffer_printf(b, "%u", range_begin);
+ mutt_buffer_add_printf(b, "%u", range_begin);
else if (state == 2)
- mutt_buffer_printf(b, "%u:%u", range_begin, range_end);
+ mutt_buffer_add_printf(b, "%u:%u", range_begin, range_end);
state = 0;
}
}
if ((chunks == 150) || (mutt_str_strlen(b->data) > 500))
{
b->dptr = b->data;
- mutt_buffer_printf(b, "%u:%u", msn_begin, msn_end);
+ mutt_buffer_add_printf(b, "%u:%u", msn_begin, msn_end);
}
}
imap_fetch_msn_seqset(b, adata, msn_begin, msn_end);
}
else
- mutt_buffer_printf(b, "%u:%u", msn_begin, msn_end);
+ mutt_buffer_add_printf(b, "%u:%u", msn_begin, msn_end);
fetch_msn_end = msn_end;
char *cmd = NULL;
else
{
mutt_message(_("Copying message %d to %s..."), e->index + 1, mbox);
- mutt_buffer_printf(&cmd, "UID COPY %u %s", IMAP_EDATA(e)->uid, mmbox);
+ mutt_buffer_add_printf(&cmd, "UID COPY %u %s", IMAP_EDATA(e)->uid, mmbox);
if (e->active && e->changed)
{
mutt_buffer_addch(b, ',');
if (state == 1)
- mutt_buffer_printf(b, "%u", range_begin);
+ mutt_buffer_add_printf(b, "%u", range_begin);
else if (state == 2)
- mutt_buffer_printf(b, "%u:%u", range_begin, range_end);
+ mutt_buffer_add_printf(b, "%u:%u", range_begin, range_end);
state = 1;
range_begin = cur_uid;
}
/**
- * mutt_buffer_printf - Format a string into a Buffer
+ * buffer_printf - Format a string into a Buffer
* @param buf Buffer
* @param fmt printf-style format string
- * @param ... Arguments to be formatted
+ * @param ap Arguments to be formatted
* @retval num Characters written
*/
-int mutt_buffer_printf(struct Buffer *buf, const char *fmt, ...)
+static int buffer_printf(struct Buffer *buf, const char *fmt, va_list ap)
{
if (!buf)
return 0;
- va_list ap, ap_retry;
+ va_list ap_retry;
int len, blen, doff;
- va_start(ap, fmt);
va_copy(ap_retry, ap);
if (!buf->dptr)
if (len > 0)
buf->dptr += len;
- va_end(ap);
va_end(ap_retry);
return len;
}
+/**
+ * mutt_buffer_printf - Format a string overwriting a Buffer
+ * @param buf Buffer
+ * @param fmt printf-style format string
+ * @param ... Arguments to be formatted
+ * @retval num Characters written
+ */
+int mutt_buffer_printf(struct Buffer *buf, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ mutt_buffer_reset(buf);
+ int len = buffer_printf(buf, fmt, ap);
+ va_end(ap);
+
+ return len;
+}
+
+/**
+ * mutt_buffer_add_printf - Format a string appending a Buffer
+ * @param buf Buffer
+ * @param fmt printf-style format string
+ * @param ... Arguments to be formatted
+ * @retval num Characters written
+ */
+int mutt_buffer_add_printf(struct Buffer *buf, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ int len = buffer_printf(buf, fmt, ap);
+ va_end(ap);
+
+ return len;
+}
+
/**
* mutt_buffer_addstr - Add a string to a Buffer
* @param buf Buffer to add to
size_t mutt_buffer_add (struct Buffer *buf, const char *s, size_t len);
size_t mutt_buffer_addch (struct Buffer *buf, char c);
size_t mutt_buffer_addstr (struct Buffer *buf, const char *s);
+int mutt_buffer_add_printf (struct Buffer *buf, const char *fmt, ...);
struct Buffer *mutt_buffer_alloc (size_t size);
void mutt_buffer_free (struct Buffer **p);
struct Buffer *mutt_buffer_from (const char *seed);
if (r != 0)
{
regerror(r, pat->p.regex, errmsg, sizeof(errmsg));
- mutt_buffer_printf(err, "'%s': %s", buf.data, errmsg);
+ mutt_buffer_add_printf(err, "'%s': %s", buf.data, errmsg);
FREE(&buf.data);
FREE(&pat->p.regex);
return false;