# include "config.h"
#endif
+#include <lib-lib/mem.h>
+#include <lib-lib/ascii.h>
+#include <lib-lib/str.h>
+#include <lib-lib/buffer.h>
+
#include "mutt.h"
-#include "ascii.h"
-#include "buffer.h"
#include "mx.h"
#include "globals.h"
#include "sort.h"
#endif
#include "buffy.h"
-#include "lib/mem.h"
-#include "lib/intl.h"
-#include "lib/str.h"
+#include <lib-lib/macros.h>
#include "lib/debug.h"
#include <unistd.h>
if (!(idata = imap_conn_find (&mx.account,
option (OPTIMAPPASSIVE) ? M_IMAP_CONN_NONEW :
0))) {
- mem_free (&mx.mbox);
+ p_delete(&mx.mbox);
return -1;
}
/* we may already be in the folder we're checking */
if (!ascii_strcmp(idata->mailbox, mx.mbox)) {
- mem_free (&mx.mbox);
+ p_delete(&mx.mbox);
return 0;
}
- mem_free (&mx.mbox);
+ p_delete(&mx.mbox);
imap_munge_mbox_name (mbox, sizeof (mbox), mailbox);
if (mutt_bit_isset (idata->capabilities, IMAP4REV1))
if (!(idata = imap_conn_find (&mx.account,
option (OPTIMAPPASSIVE) ? M_IMAP_CONN_NONEW
: 0))) {
- mem_free (&mx.mbox);
+ p_delete(&mx.mbox);
return -1;
}
}
if (bar && !(pos % 1024))
mutt_progress_bar (bar, pos);
#ifdef DEBUG
- if (DebugLevel >= IMAP_LOG_LTRL)
+ if (DebugFile && DebugLevel >= IMAP_LOG_LTRL)
fputc (c, DebugFile);
#endif
}
if (idata->cache[cacheno].uid == HEADER_DATA (h)->uid &&
idata->cache[cacheno].path) {
unlink (idata->cache[cacheno].path);
- mem_free (&idata->cache[cacheno].path);
+ p_delete(&idata->cache[cacheno].path);
}
imap_free_header_data (&h->data);
else
mutt_account_unsetpass (&idata->conn->account);
- mem_free (&idata->capstr);
+ p_delete(&idata->capstr);
}
if (new && idata->state == IMAP_AUTHENTICATED) {
imap_get_delim (idata);
idata->state = IMAP_AUTHENTICATED;
if (imap_check_capabilities (idata) != 0)
goto bail;
- mem_free (&idata->capstr);
+ p_delete(&idata->capstr);
}
else {
imap_error ("imap_open_connection()", buf);
mutt_socket_close (idata->conn);
idata->state = IMAP_DISCONNECTED;
bail:
- mem_free (&idata->capstr);
+ p_delete(&idata->capstr);
return -1;
}
debug_print (1, ("not a FLAGS response: %s\n", s));
return NULL;
}
- s += 5;
- SKIPWS (s);
+ s = vskipspaces(s + 5);
if (*s != '(') {
debug_print (1, ("bogus FLAGS response: %s\n", s));
return NULL;
*hflags = flags;
while (*s && *s != ')') {
- s++;
- SKIPWS (s);
+ s = vskipspaces(s + 1);
flag_word = s;
while (*s && (*s != ')') && !ISSPACE (*s))
s++;
/* Clean up path and replace the one in the ctx */
imap_fix_path (idata, mx.mbox, buf, sizeof (buf));
- mem_free (&(idata->mailbox));
- idata->mailbox = str_dup (buf);
+ p_delete(&(idata->mailbox));
+ idata->mailbox = m_strdup(buf);
imap_qualify_path (buf, sizeof (buf), &mx, idata->mailbox);
- mem_free (&(ctx->path));
- ctx->path = str_dup (buf);
+ p_delete(&(ctx->path));
+ ctx->path = m_strdup(buf);
idata->ctx = ctx;
}
ctx->hdrmax = count;
- ctx->hdrs = mem_calloc (count, sizeof (HEADER *));
- ctx->v2r = mem_calloc (count, sizeof (int));
+ ctx->hdrs = p_new(HEADER *, count);
+ ctx->v2r = p_new(int, count);
ctx->msgcount = 0;
if (count && (imap_read_headers (idata, 0, count - 1) < 0)) {
mutt_error _("Error opening mailbox");
}
debug_print (2, ("msgcount is %d\n", ctx->msgcount));
- mem_free (&mx.mbox);
+ p_delete(&mx.mbox);
return 0;
fail:
if (idata->state == IMAP_SELECTED)
idata->state = IMAP_AUTHENTICATED;
fail_noidata:
- mem_free (&mx.mbox);
+ p_delete(&mx.mbox);
return -1;
}
* ctx is brand new and mostly empty */
if (!(idata = imap_conn_find (&(mx.account), 0))) {
- mem_free(&mx.mbox);
+ p_delete(&mx.mbox);
return (-1);
}
conn = idata->conn;
imap_fix_path (idata, mx.mbox, mailbox, sizeof (mailbox));
- mem_free(&mx.mbox);
+ p_delete(&mx.mbox);
/* really we should also check for W_OK */
if (!imap_access (ctx->path, F_OK))
idata->status = IMAP_BYE;
imap_cmd_start (idata, "LOGOUT");
while (imap_cmd_step (idata) == IMAP_CMD_CONTINUE);
- mem_free (&idata->cmd.buf);
- mem_free (&idata);
+ p_delete(&idata->cmd.buf);
+ p_delete(&idata);
}
/*
/* imap_set_flag: append str to flags if we currently have permission
* according to aclbit */
-static void imap_set_flag (IMAP_DATA * idata, int aclbit, int flag,
- const char *str, char *flags, size_t flsize)
+static void imap_set_flag(IMAP_DATA *idata, int aclbit, int flag,
+ const char *str, char *flags, size_t flsize)
{
- if (mutt_bit_isset (idata->rights, aclbit))
- if (flag)
- str_cat (flags, flsize, str);
+ if (mutt_bit_isset(idata->rights, aclbit)) {
+ if (flag)
+ m_strcat(flags, flsize, str);
+ }
}
/* imap_make_msg_set: make an IMAP4rev1 UID message set out of a set of
int started = 0;
/* make copy of header pointers to sort in natural order */
- hdrs = mem_calloc (idata->ctx->msgcount, sizeof (HEADER *));
- memcpy (hdrs, idata->ctx->hdrs, idata->ctx->msgcount * sizeof (HEADER *));
+ hdrs = p_dup(idata->ctx->hdrs, idata->ctx->msgcount);
if (Sort != SORT_ORDER) {
oldsort = Sort;
}
}
- mem_free (&hdrs);
+ p_delete(&hdrs);
return count;
}
if ((rc = imap_check_mailbox (ctx, index_hint, 0)) != 0)
return rc;
- memset (&cmd, 0, sizeof (cmd));
+ p_clear(&cmd, 1);
/* if we are expunging anyway, we can do deleted messages very quickly... */
if (expunge && mutt_bit_isset (idata->rights, ACL_DELETE)) {
rc = 0;
out:
if (cmd.data)
- mem_free (&cmd.data);
+ p_delete(&cmd.data);
if (appendctx) {
mx_fastclose_mailbox (appendctx);
- mem_free (&appendctx);
+ p_delete(&appendctx);
}
return rc;
}
}
idata->reopen &= IMAP_REOPEN_ALLOW;
- mem_free (&(idata->mailbox));
+ p_delete(&(idata->mailbox));
mutt_free_list (&idata->flags);
idata->ctx = NULL;
}
for (i = 0; i < IMAP_CACHE_LEN; i++) {
if (idata->cache[i].path) {
unlink (idata->cache[i].path);
- mem_free (&idata->cache[i].path);
+ p_delete(&idata->cache[i].path);
}
}
}
return result;
}
-/* returns count of recent messages if new = 1, else count of total messages.
- * (useful for at least postponed function)
- * Question of taste: use RECENT or UNSEEN for new?
+/*
+ * count messages:
+ * new == 1: recent
+ * new == 2: unseen
+ * otherwise: total
+ * return:
* 0+ number of messages in mailbox
* -1 error while polling mailboxes
*/
connflags = M_IMAP_CONN_NONEW;
if (!(idata = imap_conn_find (&(mx.account), connflags))) {
- mem_free (&mx.mbox);
+ p_delete(&mx.mbox);
return -1;
}
conn = idata->conn;
imap_fix_path (idata, mx.mbox, buf, sizeof (buf));
- mem_free (&mx.mbox);
+ p_delete(&mx.mbox);
imap_munge_mbox_name (mbox, sizeof (mbox), buf);
- strfcpy (mbox_unquoted, buf, sizeof (mbox_unquoted));
+ m_strcpy(mbox_unquoted, sizeof(mbox_unquoted), buf);
/* The draft IMAP implementor's guide warns againts using the STATUS
* command on a mailbox that you have selected
*/
- if (str_cmp (mbox_unquoted, idata->mailbox) == 0
+ if (m_strcmp(mbox_unquoted, idata->mailbox) == 0
|| (ascii_strcasecmp (mbox_unquoted, "INBOX") == 0
- && str_casecmp (mbox_unquoted, idata->mailbox) == 0)) {
- strfcpy (buf, "NOOP", sizeof (buf));
+ && m_strcasecmp(mbox_unquoted, idata->mailbox) == 0)) {
+ m_strcpy(buf, sizeof(buf), "NOOP");
}
else if (mutt_bit_isset (idata->capabilities, IMAP4REV1) ||
mutt_bit_isset (idata->capabilities, STATUS)) {
snprintf (buf, sizeof (buf), "STATUS %s (%s)", mbox,
- new ? "RECENT" : "MESSAGES");
+ new == 1 ? "RECENT" : (new == 2 ? "UNSEEN" : "MESSAGES"));
}
else
/* Server does not support STATUS, and this is not the current mailbox.
/* The mailbox name may or may not be quoted here. We could try to
* munge the server response and compare with quoted (or vise versa)
* but it is probably more efficient to just strncmp against both. */
- if (str_ncmp (mbox_unquoted, s, str_len (mbox_unquoted)) == 0
- || str_ncmp (mbox, s, str_len (mbox)) == 0) {
+ if (m_strncmp(mbox_unquoted, s, m_strlen(mbox_unquoted)) == 0
+ || m_strncmp(mbox, s, m_strlen(mbox)) == 0) {
s = imap_next_word (s);
s = imap_next_word (s);
if (isdigit ((unsigned char) *s)) {
* match types, and does a better job (eg server doesn't support regexps). */
static int imap_compile_search (const pattern_t* pat, BUFFER* buf)
{
- char term[STRING];
-
if (! do_search (pat, 0))
return 0;
mutt_buffer_addch (buf, ')');
}
} else {
+ char term[STRING];
char *delim;
switch (pat->op) {
mutt_buffer_addch (buf, ' ');
/* and field */
- *delim = ':';
- delim++;
- SKIPWS(delim);
+ *delim++ = ':';
+ delim = vskipspaces(delim);
imap_quote_string (term, sizeof (term), delim);
mutt_buffer_addstr (buf, term);
break;
if (!do_search (pat, 1))
return 0;
- memset (&buf, 0, sizeof (buf));
+ p_clear(&buf, 1);
mutt_buffer_addstr (&buf, "UID SEARCH ");
if (imap_compile_search (pat, &buf) < 0) {
- mem_free (&buf.data);
+ p_delete(&buf.data);
return -1;
}
if (imap_exec (idata, buf.data, 0) < 0) {
- mem_free (&buf.data);
+ p_delete(&buf.data);
return -1;
}
- mem_free (&buf.data);
+ p_delete(&buf.data);
return 0;
}
BUFFER err, token;
IMAP_MBOX mx;
- if (mx_get_magic (path) == M_IMAP || imap_parse_path (path, &mx)) {
+ if (mx_get_magic (path) != M_IMAP || imap_parse_path (path, &mx) < 0) {
mutt_error (_("Bad mailbox name"));
return -1;
}
imap_fix_path (idata, mx.mbox, buf, sizeof (buf));
if (option (OPTIMAPCHECKSUBSCRIBED)) {
- memset (&token, 0, sizeof (token));
+ p_clear(&token, 1);
err.data = errstr;
err.dsize = sizeof (errstr);
snprintf (mbox, sizeof (mbox), "%smailboxes \"%s\"",
subscribe ? "" : "un", path);
if (mutt_parse_rc_line (mbox, &token, &err))
debug_print (1, ("Error adding subscribed mailbox: %s\n", errstr));
- mem_free (&token.data);
+ p_delete(&token.data);
}
if (subscribe)
if (imap_exec (idata, buf, 0) < 0)
goto fail;
- mem_free (&mx.mbox);
+ p_delete(&mx.mbox);
return 0;
fail:
- mem_free (&mx.mbox);
+ p_delete(&mx.mbox);
return -1;
}
int matchlen;
int i = 0;
- matchlen = str_len (dest);
+ matchlen = m_strlen(dest);
if (list_empty (Incoming))
return (-1);
for (i = 0; i < Incoming->length; i++) {
mailbox = (BUFFY*) Incoming->data[i];
- if (!str_ncmp (dest, mailbox->path, matchlen)) {
+ if (!m_strncmp(dest, mailbox->path, matchlen)) {
if (rc) {
- strfcpy (dest, mailbox->path, len);
+ m_strcpy(dest, len, mailbox->path);
rc = 0;
} else
longest_common_prefix (dest, mailbox->path, matchlen, len);
url.user = NULL;
url.path = NULL;
url_ciss_tostring (&url, urlstr, sizeof (urlstr), 0);
- if (!str_ncmp (dest, urlstr, matchlen)) {
+ if (!m_strncmp(dest, urlstr, matchlen)) {
if (rc) {
- strfcpy (dest, urlstr, len);
+ m_strcpy(dest, len, urlstr);
rc = 0;
} else
longest_common_prefix (dest, urlstr, matchlen, len);
IMAP_MBOX mx;
if (imap_parse_path (path, &mx) || !mx.mbox) {
- strfcpy (dest, path, dlen);
+ m_strcpy(dest, dlen, path);
return imap_complete_hosts (dest, dlen);
}
/* don't open a new socket just for completion. Instead complete over
* known mailboxes/hooks/etc */
if (!(idata = imap_conn_find (&(mx.account), M_IMAP_CONN_NONEW))) {
- mem_free (&mx.mbox);
- strfcpy (dest, path, dlen);
+ p_delete(&mx.mbox);
+ m_strcpy(dest, dlen, path);
return imap_complete_hosts (dest, dlen);
}
conn = idata->conn;
imap_cmd_start (idata, buf);
/* and see what the results are */
- strfcpy (completion, NONULL (mx.mbox), sizeof (completion));
+ m_strcpy(completion, sizeof(completion), NONULL(mx.mbox));
do {
if (imap_parse_list_response (idata, &list_word, &noselect, &noinferiors,
&delim))
/* if the folder isn't selectable, append delimiter to force browse
* to enter it on second tab. */
if (noselect) {
- clen = str_len (list_word);
+ clen = m_strlen(list_word);
list_word[clen++] = delim;
list_word[clen] = '\0';
}
/* copy in first word */
if (!completions) {
- strfcpy (completion, list_word, sizeof (completion));
- matchlen = str_len (completion);
+ m_strcpy(completion, sizeof(completion), list_word);
+ matchlen = m_strlen(completion);
completions++;
continue;
}
imap_qualify_path (dest, dlen, &mx, completion);
mutt_pretty_mailbox (dest);
- mem_free (&mx.mbox);
+ p_delete(&mx.mbox);
return 0;
}