X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=pop.c;fp=pop.c;h=cb35c70f09cfdff496ab87c92268e45ff3ee5140;hp=7136ab0efa111a7911b900b2a97dd76514495645;hb=df70e07e24add1869bcc9b7af2277d9d0c09a281;hpb=31edbe030ac69952aa535730427246b5e9a1603c;ds=sidebyside diff --git a/pop.c b/pop.c index 7136ab0..cb35c70 100644 --- a/pop.c +++ b/pop.c @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. - */ + */ #if HAVE_CONFIG_H # include "config.h" @@ -48,7 +48,7 @@ static int fetch_message (char *line, void *file) * -2 - invalid command or execution error, * -3 - error writing to tempfile */ -static int pop_read_header (POP_DATA *pop_data, HEADER *h) +static int pop_read_header (POP_DATA * pop_data, HEADER * h) { FILE *f; int ret, index; @@ -57,64 +57,58 @@ static int pop_read_header (POP_DATA *pop_data, HEADER *h) char tempfile[_POSIX_PATH_MAX]; mutt_mktemp (tempfile); - if (!(f = safe_fopen (tempfile, "w+"))) - { + if (!(f = safe_fopen (tempfile, "w+"))) { mutt_perror (tempfile); return -3; } snprintf (buf, sizeof (buf), "LIST %d\r\n", h->refno); ret = pop_query (pop_data, buf, sizeof (buf)); - if (ret == 0) - { + if (ret == 0) { sscanf (buf, "+OK %d %ld", &index, &length); snprintf (buf, sizeof (buf), "TOP %d 0\r\n", h->refno); ret = pop_fetch_data (pop_data, buf, NULL, fetch_message, f); - if (pop_data->cmd_top == 2) - { - if (ret == 0) - { - pop_data->cmd_top = 1; + if (pop_data->cmd_top == 2) { + if (ret == 0) { + pop_data->cmd_top = 1; - dprint (1, (debugfile, "pop_read_header: set TOP capability\n")); + dprint (1, (debugfile, "pop_read_header: set TOP capability\n")); } - if (ret == -2) - { - pop_data->cmd_top = 0; + if (ret == -2) { + pop_data->cmd_top = 0; - dprint (1, (debugfile, "pop_read_header: unset TOP capability\n")); - snprintf (pop_data->err_msg, sizeof (pop_data->err_msg), - _("Command TOP is not supported by server.")); + dprint (1, (debugfile, "pop_read_header: unset TOP capability\n")); + snprintf (pop_data->err_msg, sizeof (pop_data->err_msg), + _("Command TOP is not supported by server.")); } } } - switch (ret) - { - case 0: + switch (ret) { + case 0: { rewind (f); h->env = mutt_read_rfc822_header (f, h, 0, 0); h->content->length = length - h->content->offset + 1; rewind (f); - while (!feof (f)) - { - h->content->length--; - fgets (buf, sizeof (buf), f); + while (!feof (f)) { + h->content->length--; + fgets (buf, sizeof (buf), f); } break; } - case -2: + case -2: { mutt_error ("%s", pop_data->err_msg); break; } - case -3: + case -3: { mutt_error _("Can't write header to temporary file!"); + break; } } @@ -128,20 +122,21 @@ static int pop_read_header (POP_DATA *pop_data, HEADER *h) static int fetch_uidl (char *line, void *data) { int i, index; - CONTEXT *ctx = (CONTEXT *)data; - POP_DATA *pop_data = (POP_DATA *)ctx->data; + CONTEXT *ctx = (CONTEXT *) data; + POP_DATA *pop_data = (POP_DATA *) ctx->data; sscanf (line, "%d %s", &index, line); for (i = 0; i < ctx->msgcount; i++) if (!mutt_strcmp (line, ctx->hdrs[i]->data)) break; - if (i == ctx->msgcount) - { - dprint (1, (debugfile, "pop_fetch_headers: new header %d %s\n", index, line)); + if (i == ctx->msgcount) { + dprint (1, + (debugfile, "pop_fetch_headers: new header %d %s\n", index, + line)); if (i >= ctx->hdrmax) - mx_alloc_memory(ctx); + mx_alloc_memory (ctx); ctx->msgcount++; ctx->hdrs[i] = mutt_new_header (); @@ -164,10 +159,10 @@ static int fetch_uidl (char *line, void *data) * -2 - invalid command or execution error, * -3 - error writing to tempfile */ -static int pop_fetch_headers (CONTEXT *ctx) +static int pop_fetch_headers (CONTEXT * ctx) { int i, ret, old_count, new_count; - POP_DATA *pop_data = (POP_DATA *)ctx->data; + POP_DATA *pop_data = (POP_DATA *) ctx->data; time (&pop_data->check_time); pop_data->clear_cache = 0; @@ -180,39 +175,34 @@ static int pop_fetch_headers (CONTEXT *ctx) new_count = ctx->msgcount; ctx->msgcount = old_count; - if (pop_data->cmd_uidl == 2) - { - if (ret == 0) - { + if (pop_data->cmd_uidl == 2) { + if (ret == 0) { pop_data->cmd_uidl = 1; dprint (1, (debugfile, "pop_fetch_headers: set UIDL capability\n")); } - if (ret == -2 && pop_data->cmd_uidl == 2) - { + if (ret == -2 && pop_data->cmd_uidl == 2) { pop_data->cmd_uidl = 0; dprint (1, (debugfile, "pop_fetch_headers: unset UIDL capability\n")); snprintf (pop_data->err_msg, sizeof (pop_data->err_msg), - _("Command UIDL is not supported by server.")); + _("Command UIDL is not supported by server.")); } } - if (ret == 0) - { + if (ret == 0) { for (i = 0; i < old_count; i++) if (ctx->hdrs[i]->refno == -1) - ctx->hdrs[i]->deleted = 1; + ctx->hdrs[i]->deleted = 1; - for (i = old_count; i < new_count; i++) - { + for (i = old_count; i < new_count; i++) { mutt_message (_("Fetching message headers... [%d/%d]"), - i + 1 - old_count, new_count - old_count); + i + 1 - old_count, new_count - old_count); ret = pop_read_header (pop_data, ctx->hdrs[i]); if (ret < 0) - break; + break; ctx->msgcount++; } @@ -221,8 +211,7 @@ static int pop_fetch_headers (CONTEXT *ctx) mx_update_context (ctx, i - old_count); } - if (ret < 0) - { + if (ret < 0) { for (i = ctx->msgcount; i < new_count; i++) mutt_free_header (&ctx->hdrs[i]); return ret; @@ -233,7 +222,7 @@ static int pop_fetch_headers (CONTEXT *ctx) } /* open POP mailbox - fetch only headers */ -int pop_open_mailbox (CONTEXT *ctx) +int pop_open_mailbox (CONTEXT * ctx) { int ret; char buf[LONG_STRING]; @@ -242,8 +231,7 @@ int pop_open_mailbox (CONTEXT *ctx) POP_DATA *pop_data; ciss_url_t url; - if (pop_parse_path (ctx->path, &acct)) - { + if (pop_parse_path (ctx->path, &acct)) { mutt_error (_("%s is an invalid POP path"), ctx->path); mutt_sleep (2); return -1; @@ -268,8 +256,7 @@ int pop_open_mailbox (CONTEXT *ctx) conn->data = pop_data; - FOREVER - { + FOREVER { if (pop_reconnect (ctx) < 0) return -1; @@ -282,8 +269,7 @@ int pop_open_mailbox (CONTEXT *ctx) if (ret >= 0) return 0; - if (ret < -1) - { + if (ret < -1) { mutt_sleep (2); return -1; } @@ -291,7 +277,7 @@ int pop_open_mailbox (CONTEXT *ctx) } /* delete all cached messages */ -static void pop_clear_cache (POP_DATA *pop_data) +static void pop_clear_cache (POP_DATA * pop_data) { int i; @@ -300,10 +286,8 @@ static void pop_clear_cache (POP_DATA *pop_data) dprint (1, (debugfile, "pop_clear_cache: delete cached messages\n")); - for (i = 0; i < POP_CACHE_LEN; i++) - { - if (pop_data->cache[i].path) - { + for (i = 0; i < POP_CACHE_LEN; i++) { + if (pop_data->cache[i].path) { unlink (pop_data->cache[i].path); FREE (&pop_data->cache[i].path); } @@ -311,9 +295,9 @@ static void pop_clear_cache (POP_DATA *pop_data) } /* close POP mailbox */ -void pop_close_mailbox (CONTEXT *ctx) +void pop_close_mailbox (CONTEXT * ctx) { - POP_DATA *pop_data = (POP_DATA *)ctx->data; + POP_DATA *pop_data = (POP_DATA *) ctx->data; if (!pop_data) return; @@ -335,50 +319,46 @@ void pop_close_mailbox (CONTEXT *ctx) } /* fetch message from POP server */ -int pop_fetch_message (MESSAGE* msg, CONTEXT* ctx, int msgno) +int pop_fetch_message (MESSAGE * msg, CONTEXT * ctx, int msgno) { int ret; void *uidl; char buf[LONG_STRING]; char path[_POSIX_PATH_MAX]; char *m = _("Fetching message..."); - POP_DATA *pop_data = (POP_DATA *)ctx->data; + POP_DATA *pop_data = (POP_DATA *) ctx->data; POP_CACHE *cache; HEADER *h = ctx->hdrs[msgno]; /* see if we already have the message in our cache */ cache = &pop_data->cache[h->index % POP_CACHE_LEN]; - if (cache->path) - { - if (cache->index == h->index) - { + if (cache->path) { + if (cache->index == h->index) { /* yes, so just return a pointer to the message */ msg->fp = fopen (cache->path, "r"); if (msg->fp) - return 0; + return 0; mutt_perror (cache->path); mutt_sleep (2); return -1; } - else - { + else { /* clear the previous entry */ unlink (cache->path); FREE (&cache->path); } } - FOREVER - { + FOREVER { if (pop_reconnect (ctx) < 0) return -1; /* verify that massage index is correct */ - if (h->refno < 0) - { - mutt_error _("The message index is incorrect. Try reopening the mailbox."); + if (h->refno < 0) { + mutt_error + _("The message index is incorrect. Try reopening the mailbox."); mutt_sleep (2); return -1; } @@ -387,8 +367,7 @@ int pop_fetch_message (MESSAGE* msg, CONTEXT* ctx, int msgno) mutt_mktemp (path); msg->fp = safe_fopen (path, "w+"); - if (!msg->fp) - { + if (!msg->fp) { mutt_perror (path); mutt_sleep (2); return -1; @@ -403,16 +382,15 @@ int pop_fetch_message (MESSAGE* msg, CONTEXT* ctx, int msgno) safe_fclose (&msg->fp); unlink (path); - if (ret == -2) - { + if (ret == -2) { mutt_error ("%s", pop_data->err_msg); mutt_sleep (2); return -1; } - if (ret == -3) - { + if (ret == -3) { mutt_error _("Can't write message to temporary file!"); + mutt_sleep (2); return -1; } @@ -430,8 +408,7 @@ int pop_fetch_message (MESSAGE* msg, CONTEXT* ctx, int msgno) h->data = uidl; h->lines = 0; fgets (buf, sizeof (buf), msg->fp); - while (!feof (msg->fp)) - { + while (!feof (msg->fp)) { ctx->hdrs[msgno]->lines++; fgets (buf, sizeof (buf), msg->fp); } @@ -442,53 +419,47 @@ int pop_fetch_message (MESSAGE* msg, CONTEXT* ctx, int msgno) if (!WithCrypto) h->security = crypt_query (h->content); - mutt_clear_error(); + mutt_clear_error (); rewind (msg->fp); return 0; } /* update POP mailbox - delete messages from server */ -int pop_sync_mailbox (CONTEXT *ctx, int *index_hint) +int pop_sync_mailbox (CONTEXT * ctx, int *index_hint) { int i, ret; char buf[LONG_STRING]; - POP_DATA *pop_data = (POP_DATA *)ctx->data; + POP_DATA *pop_data = (POP_DATA *) ctx->data; pop_data->check_time = 0; - FOREVER - { + FOREVER { if (pop_reconnect (ctx) < 0) return -1; mutt_message (_("Marking %d messages deleted..."), ctx->deleted); - for (i = 0, ret = 0; ret == 0 && i < ctx->msgcount; i++) - { - if (ctx->hdrs[i]->deleted) - { - snprintf (buf, sizeof (buf), "DELE %d\r\n", ctx->hdrs[i]->refno); - ret = pop_query (pop_data, buf, sizeof (buf)); + for (i = 0, ret = 0; ret == 0 && i < ctx->msgcount; i++) { + if (ctx->hdrs[i]->deleted) { + snprintf (buf, sizeof (buf), "DELE %d\r\n", ctx->hdrs[i]->refno); + ret = pop_query (pop_data, buf, sizeof (buf)); } } - if (ret == 0) - { + if (ret == 0) { strfcpy (buf, "QUIT\r\n", sizeof (buf)); ret = pop_query (pop_data, buf, sizeof (buf)); } - if (ret == 0) - { + if (ret == 0) { pop_data->clear_cache = 1; pop_clear_cache (pop_data); pop_data->status = POP_DISCONNECTED; return 0; } - if (ret == -2) - { + if (ret == -2) { mutt_error ("%s", pop_data->err_msg); mutt_sleep (2); return -1; @@ -497,10 +468,10 @@ int pop_sync_mailbox (CONTEXT *ctx, int *index_hint) } /* Check for new messages and fetch headers */ -int pop_check_mailbox (CONTEXT *ctx, int *index_hint) +int pop_check_mailbox (CONTEXT * ctx, int *index_hint) { int ret; - POP_DATA *pop_data = (POP_DATA *)ctx->data; + POP_DATA *pop_data = (POP_DATA *) ctx->data; if ((pop_data->check_time + PopCheckTimeout) > time (NULL)) return 0; @@ -541,24 +512,22 @@ void pop_fetch_mail (void) ACCOUNT acct; POP_DATA *pop_data; - if (!PopHost) - { + if (!PopHost) { mutt_error _("POP host is not defined."); + return; } url = p = safe_calloc (strlen (PopHost) + 7, sizeof (char)); - if (url_check_scheme (PopHost) == U_UNKNOWN) - { - strcpy (url, "pop://"); /* __STRCPY_CHECKED__ */ + if (url_check_scheme (PopHost) == U_UNKNOWN) { + strcpy (url, "pop://"); /* __STRCPY_CHECKED__ */ p = strchr (url, '\0'); } - strcpy (p, PopHost); /* __STRCPY_CHECKED__ */ + strcpy (p, PopHost); /* __STRCPY_CHECKED__ */ ret = pop_parse_path (url, &acct); FREE (&url); - if (ret) - { + if (ret) { mutt_error (_("%s is an invalid POP path"), PopHost); return; } @@ -570,8 +539,7 @@ void pop_fetch_mail (void) pop_data = safe_calloc (1, sizeof (POP_DATA)); pop_data->conn = conn; - if (pop_open_connection (pop_data) < 0) - { + if (pop_open_connection (pop_data) < 0) { mutt_socket_free (pop_data->conn); FREE (&pop_data); return; @@ -586,8 +554,7 @@ void pop_fetch_mail (void) ret = pop_query (pop_data, buffer, sizeof (buffer)); if (ret == -1) goto fail; - if (ret == -2) - { + if (ret == -2) { mutt_error ("%s", pop_data->err_msg); goto finish; } @@ -595,8 +562,7 @@ void pop_fetch_mail (void) sscanf (buffer, "+OK %d %d", &msgs, &bytes); /* only get unread messages */ - if (msgs > 0 && option (OPTPOPLAST)) - { + if (msgs > 0 && option (OPTPOPLAST)) { strfcpy (buffer, "LAST\r\n", sizeof (buffer)); ret = pop_query (pop_data, buffer, sizeof (buffer)); if (ret == -1) @@ -605,70 +571,66 @@ void pop_fetch_mail (void) sscanf (buffer, "+OK %d", &last); } - if (msgs <= last) - { + if (msgs <= last) { mutt_message _("No new mail in POP mailbox."); + goto finish; } if (mx_open_mailbox (NONULL (Spoolfile), M_APPEND, &ctx) == NULL) goto finish; - delanswer = query_quadoption (OPT_POPDELETE, _("Delete messages from server?")); + delanswer = + query_quadoption (OPT_POPDELETE, _("Delete messages from server?")); - snprintf (msgbuf, sizeof (msgbuf), _("Reading new messages (%d bytes)..."), bytes); + snprintf (msgbuf, sizeof (msgbuf), _("Reading new messages (%d bytes)..."), + bytes); mutt_message ("%s", msgbuf); - for (i = last + 1 ; i <= msgs ; i++) - { + for (i = last + 1; i <= msgs; i++) { if ((msg = mx_open_new_message (&ctx, NULL, M_ADD_FROM)) == NULL) ret = -3; - else - { + else { snprintf (buffer, sizeof (buffer), "RETR %d\r\n", i); ret = pop_fetch_data (pop_data, buffer, NULL, fetch_message, msg->fp); if (ret == -3) - rset = 1; + rset = 1; - if (ret == 0 && mx_commit_message (msg, &ctx) != 0) - { - rset = 1; - ret = -3; + if (ret == 0 && mx_commit_message (msg, &ctx) != 0) { + rset = 1; + ret = -3; } mx_close_message (&msg); } - if (ret == 0 && delanswer == M_YES) - { + if (ret == 0 && delanswer == M_YES) { /* delete the message on the server */ snprintf (buffer, sizeof (buffer), "DELE %d\r\n", i); ret = pop_query (pop_data, buffer, sizeof (buffer)); } - if (ret == -1) - { + if (ret == -1) { mx_close_mailbox (&ctx, NULL); goto fail; } - if (ret == -2) - { + if (ret == -2) { mutt_error ("%s", pop_data->err_msg); break; } - if (ret == -3) - { + if (ret == -3) { mutt_error _("Error while writing mailbox!"); + break; } - mutt_message (_("%s [%d of %d messages read]"), msgbuf, i - last, msgs - last); + mutt_message (_("%s [%d of %d messages read]"), msgbuf, i - last, + msgs - last); } mx_close_mailbox (&ctx, NULL); - if (rset) - { + if (rset) { /* make sure no messages get deleted */ strfcpy (buffer, "RSET\r\n", sizeof (buffer)); if (pop_query (pop_data, buffer, sizeof (buffer)) == -1)