X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=recvattach.c;h=1121d2d259409024ba317a4f2d1bb8a63635f9e1;hp=69614edf35f3e41ccab61819a61a1cddf6cdc0b0;hb=91d0c04349c9345f0ee29a61cc18dfc144b60edc;hpb=a8477ebaa09990b3688164cbe5cf661c4189541d diff --git a/recvattach.c b/recvattach.c index 69614ed..1121d2d 100644 --- a/recvattach.c +++ b/recvattach.c @@ -12,20 +12,26 @@ # include "config.h" #endif +#include +#include +#include +#include +#include +#include + #include "mutt.h" +#include "enter.h" +#include "handler.h" +#include "recvattach.h" #include "mutt_curses.h" #include "mutt_menu.h" #include "rfc1524.h" #include "mime.h" #include "attach.h" -#include "mapping.h" #include "mx.h" #include "copy.h" #include "mutt_crypt.h" -#include "lib/mem.h" -#include "lib/intl.h" -#include "lib/str.h" #include #include @@ -45,18 +51,20 @@ static char LastSaveFolder[_POSIX_PATH_MAX] = ""; break; \ } +#define SW (option(OPTMBOXPANE)?SidebarWidth:0) + static struct mapping_t AttachHelp[] = { {N_("Exit"), OP_EXIT}, {N_("Save"), OP_SAVE}, {N_("Pipe"), OP_PIPE}, {N_("Print"), OP_PRINT}, {N_("Help"), OP_HELP}, - {NULL} + {NULL, OP_NULL} }; -int mutt_extract_path (char *filename, char *path) +static int mutt_extract_path (char *filename, char *path) { - char *tmp = safe_malloc (sizeof (char) * _POSIX_PATH_MAX); + char *tmp = p_new(char, _POSIX_PATH_MAX); char *help_ptr; help_ptr = tmp; @@ -70,7 +78,7 @@ int mutt_extract_path (char *filename, char *path) } *help_ptr++ = *filename++; } - FREE (&tmp); + p_delete(&tmp); return 0; } @@ -95,11 +103,11 @@ void mutt_update_tree (ATTACHPTR ** idx, short idxlen) } if (idx[x]->tree) { - if (str_cmp (idx[x]->tree, buf) != 0) + if (m_strcmp(idx[x]->tree, buf) != 0) str_replace (&idx[x]->tree, buf); } else - idx[x]->tree = str_dup (buf); + idx[x]->tree = m_strdup(buf); if (2 * (idx[x]->level + 2) < sizeof (buf) && idx[x]->level) { s = buf + 2 * (idx[x]->level - 1); @@ -120,7 +128,7 @@ ATTACHPTR **mutt_gen_attach_list (BODY * m, for (; m; m = m->next) { if (*idxlen == *idxmax) { - safe_realloc (&idx, sizeof (ATTACHPTR *) * ((*idxmax) += 5)); + p_realloc(&idx, (*idxmax) += 5); for (i = *idxlen; i < *idxmax; i++) idx[i] = NULL; } @@ -138,7 +146,7 @@ ATTACHPTR **mutt_gen_attach_list (BODY * m, } else { if (!idx[*idxlen]) - idx[*idxlen] = (ATTACHPTR *) safe_calloc (1, sizeof (ATTACHPTR)); + idx[*idxlen] = p_new(ATTACHPTR, 1); new = idx[(*idxlen)++]; new->content = m; @@ -254,7 +262,7 @@ const char *mutt_attach_fmt (char *dest, if (aptr->content->filename && *aptr->content->filename == '/') { char path[_POSIX_PATH_MAX]; - strfcpy (path, aptr->content->filename, sizeof (path)); + m_strcpy(path, sizeof(path), aptr->content->filename); mutt_pretty_mailbox (path); mutt_format_s (dest, destlen, prefix, path); } @@ -298,6 +306,14 @@ const char *mutt_attach_fmt (char *dest, snprintf (dest, destlen, fmt, aptr->num + 1); } break; + case 'Q': + if (optional) + optional = aptr->content->attach_qualifies; + else { + snprintf (fmt, sizeof (fmt), "%%%sc", prefix); + mutt_format_s (dest, destlen, fmt, "Q"); + } + break; case 's': if (flags & M_FORMAT_STAT_FILE) { struct stat st; @@ -334,6 +350,14 @@ const char *mutt_attach_fmt (char *dest, else if (!aptr->content->unlink) optional = 0; break; + case 'X': + if (optional) + optional = (aptr->content->attach_count + aptr->content->attach_qualifies) != 0; + else { + snprintf (fmt, sizeof (fmt), "%%%sd", prefix); + snprintf (dest, destlen, fmt, aptr->content->attach_count + aptr->content->attach_qualifies); + } + break; default: *dest = 0; } @@ -345,9 +369,10 @@ const char *mutt_attach_fmt (char *dest, return (src); } -void attach_entry (char *b, size_t blen, MUTTMENU * menu, int num) +static void attach_entry (char *b, size_t blen, MUTTMENU * menu, int num) { - mutt_FormatString (b, blen, NONULL (AttachFormat), mutt_attach_fmt, + int w=(COLS-SW)>blen?blen:(COLS-SW); + mutt_FormatString (b, w, NONULL (AttachFormat), mutt_attach_fmt, (unsigned long) (((ATTACHPTR **) menu->data)[num]), M_FORMAT_ARROWCURSOR); } @@ -384,10 +409,10 @@ static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr, if (body->filename) { if (directory && *directory) - mutt_concat_path (buf, *directory, mutt_basename (body->filename), - sizeof (buf)); + mutt_concat_path(buf, sizeof(buf), *directory, + mutt_basename(body->filename)); else - strfcpy (buf, body->filename, sizeof (buf)); + m_strcpy(buf, sizeof(buf), body->filename); } else if (body->hdr && body->encoding != ENCBASE64 && @@ -409,7 +434,7 @@ static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr, char tmpbuf[_POSIX_PATH_MAX]; snprintf (tmpbuf, sizeof (tmpbuf), "%s%s", LastSaveFolder, buf); - strfcpy (buf, tmpbuf, sizeof (buf)); + m_strcpy(buf, sizeof(buf), tmpbuf); ret = mutt_get_field (_("Save to file: ") , buf, sizeof (buf), M_FILE); if ((ret != 0) || (!buf[0])) @@ -417,7 +442,7 @@ static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr, } else { mutt_extract_path (buf, path); - strfcpy (LastSaveFolder, path, sizeof (LastSaveFolder)); + m_strcpy(LastSaveFolder, sizeof(LastSaveFolder), path); } prompt = NULL; @@ -439,7 +464,7 @@ static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr, } else if (rc == -1) return -1; - strfcpy (tfile, buf, sizeof (tfile)); + m_strcpy(tfile, sizeof(tfile), buf); } else { if ((rc = @@ -486,7 +511,7 @@ void mutt_save_attachment_list (FILE * fp, int tag, BODY * top, HEADER * hdr, if (!buf[0]) { int append = 0; - strfcpy (buf, NONULL (top->filename), sizeof (buf)); + m_strcpy(buf, sizeof(buf), NONULL(top->filename)); if (mutt_get_field (_("Save to file: "), buf, sizeof (buf), M_FILE | M_CLEAR) != 0 || !buf[0]) return; @@ -527,7 +552,7 @@ void mutt_save_attachment_list (FILE * fp, int tag, BODY * top, HEADER * hdr, break; } - FREE (&directory); + p_delete(&directory); if (tag && menu) { menu->oldcurrent = menu->current; @@ -623,7 +648,7 @@ void mutt_pipe_attachment_list (FILE * fp, int tag, BODY * top, int filter) filter = 0; /* sanity check: we can't filter in the recv case yet */ buf[0] = 0; - memset (&state, 0, sizeof (STATE)); + p_clear(&state, 1); if (mutt_get_field ((filter ? _("Filter through: ") : _("Pipe to: ")), buf, sizeof (buf), M_CMD) != 0 || !buf[0]) @@ -727,7 +752,7 @@ void mutt_print_attachment_list (FILE * fp, int tag, BODY * top) if (!can_print (top, tag)) return; mutt_endwin (NULL); - memset (&state, 0, sizeof (STATE)); + p_clear(&state, 1); thepid = mutt_create_filter (NONULL (PrintCmd), &state.fpout, NULL, NULL); print_attachment_list (fp, tag, top, &state); fclose (state.fpout); @@ -738,7 +763,7 @@ void mutt_print_attachment_list (FILE * fp, int tag, BODY * top) print_attachment_list (fp, tag, top, &state); } -void +static void mutt_update_attach_index (BODY * cur, ATTACHPTR *** idxp, short *idxlen, short *idxmax, MUTTMENU * menu) { @@ -970,7 +995,7 @@ void mutt_view_attachments (HEADER * hdr) attach_collapse (cur, 0, 1, 0); mutt_update_attach_index (cur, &idx, &idxlen, &idxmax, menu); - FOREVER { + for (;;) { if (op == OP_NULL) op = mutt_menuLoop (menu); switch (op) { @@ -1175,7 +1200,7 @@ void mutt_view_attachments (HEADER * hdr) CHECK_ATTACH; if (!idx[menu->current]->content->hdr->env->followup_to || - str_casecmp (idx[menu->current]->content->hdr->env->followup_to, + m_strcasecmp(idx[menu->current]->content->hdr->env->followup_to, "poster") || query_quadoption (OPT_FOLLOWUPTOPOSTER, _("Reply by mail as poster prefers?")) != @@ -1218,12 +1243,12 @@ void mutt_view_attachments (HEADER * hdr) hdr->attach_del = 1; if (idx[idxmax]->content) idx[idxmax]->content->aptr = NULL; - FREE (&idx[idxmax]->tree); - FREE (&idx[idxmax]); + p_delete(&idx[idxmax]->tree); + p_delete(&idx[idxmax]); } if (hdr->attach_del) hdr->changed = 1; - FREE (&idx); + p_delete(&idx); idxmax = 0; if (WithCrypto && need_secured && secured) {