X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=imap%2Fimap.c;h=3f988e83cf62ceda243394114e534fe41a4bc0c0;hb=49f1156410e9a037404101696d37b2c0d5c67564;hp=4f0395f7148ad5e09d6f35dbab5bf500536b520b;hpb=a0aa3d4bba449529dfed997214b34e309ce451dd;p=apps%2Fmadmutt.git diff --git a/imap/imap.c b/imap/imap.c index 4f0395f..3f988e8 100644 --- a/imap/imap.c +++ b/imap/imap.c @@ -15,6 +15,8 @@ # include "config.h" #endif +#include + #include "mutt.h" #include "ascii.h" #include "buffer.h" @@ -66,7 +68,7 @@ int imap_access (const char *path, int flags) if (!(idata = imap_conn_find (&mx.account, option (OPTIMAPPASSIVE) ? M_IMAP_CONN_NONEW : 0))) { - mem_free (&mx.mbox); + p_delete(&mx.mbox); return -1; } @@ -74,11 +76,11 @@ int imap_access (const char *path, int flags) /* 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)) @@ -138,7 +140,7 @@ int imap_delete_mailbox (CONTEXT * ctx, IMAP_MBOX mx) if (!(idata = imap_conn_find (&mx.account, option (OPTIMAPPASSIVE) ? M_IMAP_CONN_NONEW : 0))) { - mem_free (&mx.mbox); + p_delete(&mx.mbox); return -1; } } @@ -211,12 +213,10 @@ int imap_read_literal (FILE * fp, IMAP_DATA * idata, long bytes, progress_t* bar r = 0; #endif fputc (c, fp); -#ifdef USE_SOCKET - if (bar && pos % 1024) + if (bar && !(pos % 1024)) mutt_progress_bar (bar, pos); -#endif #ifdef DEBUG - if (DebugLevel >= IMAP_LOG_LTRL) + if (DebugFile && DebugLevel >= IMAP_LOG_LTRL) fputc (c, DebugFile); #endif } @@ -245,7 +245,7 @@ void imap_expunge_mailbox (IMAP_DATA * idata) 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); @@ -389,7 +389,7 @@ IMAP_DATA *imap_conn_find (const ACCOUNT * account, int flags) 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); @@ -464,7 +464,7 @@ int imap_open_connection (IMAP_DATA * 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); @@ -477,7 +477,7 @@ err_close_conn: mutt_socket_close (idata->conn); idata->state = IMAP_DISCONNECTED; bail: - mem_free (&idata->capstr); + p_delete(&idata->capstr); return -1; } @@ -559,11 +559,11 @@ int imap_open_mailbox (CONTEXT * ctx) /* Clean up path and replace the one in the ctx */ imap_fix_path (idata, mx.mbox, buf, sizeof (buf)); - mem_free (&(idata->mailbox)); + p_delete(&(idata->mailbox)); idata->mailbox = str_dup (buf); imap_qualify_path (buf, sizeof (buf), &mx, idata->mailbox); - mem_free (&(ctx->path)); + p_delete(&(ctx->path)); ctx->path = str_dup (buf); idata->ctx = ctx; @@ -692,8 +692,8 @@ int imap_open_mailbox (CONTEXT * 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"); @@ -703,14 +703,14 @@ int imap_open_mailbox (CONTEXT * ctx) } 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; } @@ -729,7 +729,7 @@ int imap_open_mailbox_append (CONTEXT * ctx) * 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; @@ -739,7 +739,7 @@ int imap_open_mailbox_append (CONTEXT * ctx) 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)) @@ -763,8 +763,8 @@ void imap_logout (IMAP_DATA * idata) 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); } /* @@ -816,8 +816,7 @@ int imap_make_msg_set (IMAP_DATA * idata, BUFFER * buf, int flag, int changed) 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; @@ -872,7 +871,7 @@ int imap_make_msg_set (IMAP_DATA * idata, BUFFER * buf, int flag, int changed) } } - mem_free (&hdrs); + p_delete(&hdrs); return count; } @@ -1055,10 +1054,10 @@ int imap_sync_mailbox (CONTEXT * ctx, int expunge, int *index_hint) 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; } @@ -1084,7 +1083,7 @@ void imap_close_mailbox (CONTEXT * ctx) } idata->reopen &= IMAP_REOPEN_ALLOW; - mem_free (&(idata->mailbox)); + p_delete(&(idata->mailbox)); mutt_free_list (&idata->flags); idata->ctx = NULL; } @@ -1096,7 +1095,7 @@ void imap_close_mailbox (CONTEXT * ctx) 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); } } } @@ -1138,9 +1137,12 @@ int imap_check_mailbox (CONTEXT * ctx, int *index_hint, int force) 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 */ @@ -1165,13 +1167,13 @@ int imap_mailbox_check (char *path, int new) 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)); @@ -1188,7 +1190,7 @@ int imap_mailbox_check (char *path, int new) 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. @@ -1259,8 +1261,6 @@ static int do_search (const pattern_t* search, int allpats) * 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; @@ -1293,6 +1293,7 @@ static int imap_compile_search (const pattern_t* pat, BUFFER* buf) mutt_buffer_addch (buf, ')'); } } else { + char term[STRING]; char *delim; switch (pat->op) { @@ -1348,15 +1349,15 @@ int imap_search (CONTEXT* ctx, const pattern_t* pat) { memset (&buf, 0, sizeof (buf)); 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; } @@ -1444,7 +1445,7 @@ int imap_subscribe (char *path, int subscribe) 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; } @@ -1464,7 +1465,7 @@ int imap_subscribe (char *path, int subscribe) 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) @@ -1478,11 +1479,11 @@ int imap_subscribe (char *path, int 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; } @@ -1522,7 +1523,7 @@ static int imap_complete_hosts (char *dest, size_t len) { } } - for (conn = mutt_socket_head (); conn->next; conn = conn->next) { + for (conn = mutt_socket_head (); conn && conn->next; conn = conn->next) { ciss_url_t url; char urlstr[LONG_STRING]; @@ -1569,7 +1570,7 @@ int imap_complete (char *dest, size_t dlen, char *path) { /* 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); + p_delete(&mx.mbox); strfcpy (dest, path, dlen); return imap_complete_hosts (dest, dlen); } @@ -1625,7 +1626,7 @@ int imap_complete (char *dest, size_t dlen, char *path) { imap_qualify_path (dest, dlen, &mx, completion); mutt_pretty_mailbox (dest); - mem_free (&mx.mbox); + p_delete(&mx.mbox); return 0; }