projects
/
apps
/
madmutt.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add m_dirname that implement a non broken libgen-like function.
[apps/madmutt.git]
/
recvattach.c
diff --git
a/recvattach.c
b/recvattach.c
index
67326fb
..
b76c43a
100644
(file)
--- a/
recvattach.c
+++ b/
recvattach.c
@@
-8,41
+8,25
@@
* please see the file GPL in the top level source directory.
*/
* please see the file GPL in the top level source directory.
*/
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <lib-lib/mem.h>
-#include <lib-lib/str.h>
-#include <lib-lib/macros.h>
-#include <lib-lib/ascii.h>
-#include <lib-lib/file.h>
-#include <lib-lib/mapping.h>
+#include <lib-lib/lib-lib.h>
#include <lib-mime/mime.h>
#include <lib-ui/curses.h>
#include <lib-ui/enter.h>
#include <lib-ui/menu.h>
#include <lib-mime/mime.h>
#include <lib-ui/curses.h>
#include <lib-ui/enter.h>
#include <lib-ui/menu.h>
+#include <lib-mx/mx.h>
+
+#include <lib-sys/unix.h>
#include "mutt.h"
#include "handler.h"
#include "recvattach.h"
#include "mutt.h"
#include "handler.h"
#include "recvattach.h"
-#include "rfc1524.h"
#include "attach.h"
#include "attach.h"
-#include "mx.h"
#include "copy.h"
#include <lib-crypt/crypt.h>
#include "copy.h"
#include <lib-crypt/crypt.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/wait.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <errno.h>
-
static const char *Mailbox_is_read_only = N_("Mailbox is read-only.");
static char LastSaveFolder[_POSIX_PATH_MAX] = "";
static const char *Mailbox_is_read_only = N_("Mailbox is read-only.");
static char LastSaveFolder[_POSIX_PATH_MAX] = "";
@@
-64,7
+48,7
@@
static struct mapping_t AttachHelp[] = {
{NULL, OP_NULL}
};
{NULL, OP_NULL}
};
-static int mutt_extract_path (char *filename, char *path)
+static int mutt_extract_path (char *filename, char *path
, ssize_t pathlen
)
{
char *tmp = p_new(char, _POSIX_PATH_MAX);
char *help_ptr;
{
char *tmp = p_new(char, _POSIX_PATH_MAX);
char *help_ptr;
@@
-75,7
+59,7
@@
static int mutt_extract_path (char *filename, char *path)
if (*filename == '/') {
*help_ptr++ = *filename++;
*help_ptr++ = '\0';
if (*filename == '/') {
*help_ptr++ = *filename++;
*help_ptr++ = '\0';
-
strcat (path
, tmp);
+
m_strcat(path, pathlen
, tmp);
help_ptr = tmp;
}
*help_ptr++ = *filename++;
help_ptr = tmp;
}
*help_ptr++ = *filename++;
@@
-158,7
+142,7
@@
ATTACHPTR **mutt_gen_attach_list (BODY * m,
/* We don't support multipart messages in the compose menu yet */
if (!compose && !m->collapsed
&& ((m->type == TYPEMULTIPART && !mutt_is_multipart_encrypted(m))
/* We don't support multipart messages in the compose menu yet */
if (!compose && !m->collapsed
&& ((m->type == TYPEMULTIPART && !mutt_is_multipart_encrypted(m))
- || mutt_is_message_type
(m->type, m->subtype
)))
+ || mutt_is_message_type
(m
)))
{
idx = mutt_gen_attach_list (m->parts, m->type, idx, idxlen, idxmax,
level + 1, compose);
{
idx = mutt_gen_attach_list (m->parts, m->type, idx, idxlen, idxmax,
level + 1, compose);
@@
-188,7
+172,7
@@
ATTACHPTR **mutt_gen_attach_list (BODY * m,
* %u = unlink
*/
const char *mutt_attach_fmt (char *dest,
* %u = unlink
*/
const char *mutt_attach_fmt (char *dest,
- size_t destlen,
+ s
s
ize_t destlen,
char op,
const char *src,
const char *prefix,
char op,
const char *src,
const char *prefix,
@@
-201,7
+185,7
@@
const char *mutt_attach_fmt (char *dest,
char charset[SHORT_STRING];
ATTACHPTR *aptr = (ATTACHPTR *) data;
int optional = (flags & M_FORMAT_OPTIONAL);
char charset[SHORT_STRING];
ATTACHPTR *aptr = (ATTACHPTR *) data;
int optional = (flags & M_FORMAT_OPTIONAL);
- size_t l;
+ s
s
ize_t l;
switch (op) {
case 'C':
switch (op) {
case 'C':
@@
-233,8
+217,8
@@
const char *mutt_attach_fmt (char *dest,
mutt_format_s (dest, destlen, prefix, aptr->content->description);
break;
}
mutt_format_s (dest, destlen, prefix, aptr->content->description);
break;
}
- if (mutt_is_message_type
(aptr->content->type, aptr->content->subtype
)
-
&& MsgFmt && aptr->content->hdr)
{
+ if (mutt_is_message_type
(aptr->content) && MsgFmt && aptr->content->hdr
)
+ {
char s[SHORT_STRING];
_mutt_make_string (s, sizeof (s), MsgFmt, NULL, aptr->content->hdr,
char s[SHORT_STRING];
_mutt_make_string (s, sizeof (s), MsgFmt, NULL, aptr->content->hdr,
@@
-251,8
+235,7
@@
const char *mutt_attach_fmt (char *dest,
}
}
else if (aptr->content->description ||
}
}
else if (aptr->content->description ||
- (mutt_is_message_type
- (aptr->content->type, aptr->content->subtype)
+ (mutt_is_message_type(aptr->content)
&& MsgFmt && aptr->content->hdr))
break;
/* FALLS THROUGH TO 'f' */
&& MsgFmt && aptr->content->hdr))
break;
/* FALLS THROUGH TO 'f' */
@@
-385,16
+368,6
@@
int mutt_tag_attach (MUTTMENU * menu, int n, int m)
return cur->tagged - ot;
}
return cur->tagged - ot;
}
-int mutt_is_message_type (int type, const char *subtype)
-{
- if (type != TYPEMESSAGE)
- return 0;
-
- subtype = NONULL (subtype);
- return (ascii_strcasecmp (subtype, "rfc822") == 0
- || ascii_strcasecmp (subtype, "news") == 0);
-}
-
static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr,
char **directory)
{
static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr,
char **directory)
{
@@
-416,7
+389,7
@@
static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr,
else if (body->hdr &&
body->encoding != ENCBASE64 &&
body->encoding != ENCQUOTEDPRINTABLE &&
else if (body->hdr &&
body->encoding != ENCBASE64 &&
body->encoding != ENCQUOTEDPRINTABLE &&
- mutt_is_message_type
(body->type, body->subtype
))
+ mutt_is_message_type
(body
))
mutt_default_save (buf, sizeof (buf), body->hdr);
else
buf[0] = 0;
mutt_default_save (buf, sizeof (buf), body->hdr);
else
buf[0] = 0;
@@
-440,7
+413,7
@@
static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr,
return -1;
}
else {
return -1;
}
else {
- mutt_extract_path (buf, path);
+ mutt_extract_path (buf, path
, sizeof(path)
);
m_strcpy(LastSaveFolder, sizeof(LastSaveFolder), path);
}
m_strcpy(LastSaveFolder, sizeof(LastSaveFolder), path);
}
@@
-451,7
+424,7
@@
static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr,
body->hdr &&
body->encoding != ENCBASE64 &&
body->encoding != ENCQUOTEDPRINTABLE &&
body->hdr &&
body->encoding != ENCBASE64 &&
body->encoding != ENCQUOTEDPRINTABLE &&
- mutt_is_message_type
(body->type, body->subtype
));
+ mutt_is_message_type
(body
));
if (is_message) {
struct stat st;
if (is_message) {
struct stat st;
@@
-521,14
+494,14
@@
void mutt_save_attachment_list (FILE * fp, int tag, BODY * top, HEADER * hdr,
rc = mutt_save_attachment (fp, top, tfile, append, hdr);
if (rc == 0 && AttachSep && (fpout = fopen (tfile, "a")) != NULL) {
fprintf (fpout, "%s", AttachSep);
rc = mutt_save_attachment (fp, top, tfile, append, hdr);
if (rc == 0 && AttachSep && (fpout = fopen (tfile, "a")) != NULL) {
fprintf (fpout, "%s", AttachSep);
-
fclose (
fpout);
+
m_fclose(&
fpout);
}
}
else {
rc = mutt_save_attachment (fp, top, tfile, M_SAVE_APPEND, hdr);
if (rc == 0 && AttachSep && (fpout = fopen (tfile, "a")) != NULL) {
fprintf (fpout, "%s", AttachSep);
}
}
else {
rc = mutt_save_attachment (fp, top, tfile, M_SAVE_APPEND, hdr);
if (rc == 0 && AttachSep && (fpout = fopen (tfile, "a")) != NULL) {
fprintf (fpout, "%s", AttachSep);
-
fclose (
fpout);
+
m_fclose(&
fpout);
}
}
}
}
}
}
@@
-613,7
+586,7
@@
static void pipe_attachment (FILE * fp, BODY * b, STATE * state)
return;
}
mutt_copy_stream (ifp, state->fpout);
return;
}
mutt_copy_stream (ifp, state->fpout);
-
fclose (
ifp);
+
m_fclose(&
ifp);
if (AttachSep)
state_puts (AttachSep, state);
}
if (AttachSep)
state_puts (AttachSep, state);
}
@@
-659,7
+632,7
@@
void mutt_pipe_attachment_list (FILE * fp, int tag, BODY * top, int afilter)
mutt_endwin (NULL);
thepid = mutt_create_filter (buf, &state.fpout, NULL, NULL);
pipe_attachment_list (buf, fp, tag, top, afilter, &state);
mutt_endwin (NULL);
thepid = mutt_create_filter (buf, &state.fpout, NULL, NULL);
pipe_attachment_list (buf, fp, tag, top, afilter, &state);
-
fclose (
state.fpout);
+
m_fclose(&
state.fpout);
if (mutt_wait_filter (thepid) != 0 || option (OPTWAITKEY))
mutt_any_key_to_continue (NULL);
}
if (mutt_wait_filter (thepid) != 0 || option (OPTWAITKEY))
mutt_any_key_to_continue (NULL);
}
@@
-717,7
+690,7
@@
static void print_attachment_list (FILE * fp, int tag, BODY * top,
0) {
if ((ifp = fopen (newfile, "r")) != NULL) {
mutt_copy_stream (ifp, state->fpout);
0) {
if ((ifp = fopen (newfile, "r")) != NULL) {
mutt_copy_stream (ifp, state->fpout);
-
fclose (
ifp);
+
m_fclose(&
ifp);
if (AttachSep)
state_puts (AttachSep, state);
}
if (AttachSep)
state_puts (AttachSep, state);
}
@@
-754,7
+727,7
@@
void mutt_print_attachment_list (FILE * fp, int tag, BODY * top)
p_clear(&state, 1);
thepid = mutt_create_filter (NONULL (PrintCmd), &state.fpout, NULL, NULL);
print_attachment_list (fp, tag, top, &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);
+
m_fclose(&
state.fpout);
if (mutt_wait_filter (thepid) != 0 || option (OPTWAITKEY))
mutt_any_key_to_continue (NULL);
}
if (mutt_wait_filter (thepid) != 0 || option (OPTWAITKEY))
mutt_any_key_to_continue (NULL);
}
@@
-792,12
+765,6
@@
mutt_attach_display_loop (MUTTMENU * menu, int op, FILE * fp, HEADER * hdr,
{
ATTACHPTR **idx = *idxp;
{
ATTACHPTR **idx = *idxp;
-#if 0
- int old_optweed = option (OPTWEED);
-
- set_option (OPTWEED);
-#endif
-
do {
switch (op) {
case OP_DISPLAY_HEADERS:
do {
switch (op) {
case OP_DISPLAY_HEADERS:
@@
-853,10
+820,6
@@
mutt_attach_display_loop (MUTTMENU * menu, int op, FILE * fp, HEADER * hdr,
}
while (op != OP_NULL);
}
while (op != OP_NULL);
-#if 0
- if (option (OPTWEED) != old_optweed)
- toggle_option (OPTWEED);
-#endif
return op;
}
return op;
}
@@
-868,10
+831,9
@@
static void attach_collapse (BODY * b, short collapse, short init,
for (; b; b = b->next) {
i = init || b->collapsed;
if (i && option (OPTDIGESTCOLLAPSE) && b->type == TYPEMULTIPART
for (; b; b = b->next) {
i = init || b->collapsed;
if (i && option (OPTDIGESTCOLLAPSE) && b->type == TYPEMULTIPART
- &&
!ascii_strcasecmp (b->subtype, "digest")
)
+ &&
mime_which_token(b->subtype, -1) == MIME_DIGEST
)
attach_collapse (b->parts, 1, 1, 0);
attach_collapse (b->parts, 1, 1, 0);
- else if (b->type == TYPEMULTIPART
- || mutt_is_message_type (b->type, b->subtype))
+ else if (b->type == TYPEMULTIPART || mutt_is_message_type(b))
attach_collapse (b->parts, collapse, i, 0);
b->collapsed = collapse;
if (just_one)
attach_collapse (b->parts, collapse, i, 0);
b->collapsed = collapse;
if (just_one)
@@
-889,19
+851,6
@@
void mutt_attach_init (BODY * b)
}
}
}
}
-static const char *Function_not_permitted =
-N_("Function not permitted in attach-message mode.");
-
-#define CHECK_ATTACH if(option(OPTATTACHMSG)) \
- {\
- mutt_flushinp (); \
- mutt_error _(Function_not_permitted); \
- break; \
- }
-
-
-
-
void mutt_view_attachments (HEADER * hdr)
{
int secured = 0;
void mutt_view_attachments (HEADER * hdr)
{
int secured = 0;
@@
-953,8
+902,8
@@
void mutt_view_attachments (HEADER * hdr)
cur = NULL;
secured = !crypt_smime_decrypt_mime (_fp, &fp, _cur, &cur);
cur = NULL;
secured = !crypt_smime_decrypt_mime (_fp, &fp, _cur, &cur);
-
mutt_free_body
(&_cur);
-
safe_fclose
(&_fp);
+
body_list_wipe
(&_cur);
+
m_fclose
(&_fp);
}
}
else
}
}
else
@@
-992,9
+941,16
@@
void mutt_view_attachments (HEADER * hdr)
attach_collapse (cur, 0, 1, 0);
mutt_update_attach_index (cur, &idx, &idxlen, &idxmax, menu);
attach_collapse (cur, 0, 1, 0);
mutt_update_attach_index (cur, &idx, &idxlen, &idxmax, menu);
+#define CHECK_ATTACH \
+ if (option(OPTATTACHMSG)) { \
+ mutt_flushinp (); \
+ mutt_error _("Function not permitted in attach-message mode."); \
+ break; \
+ }
+
for (;;) {
if (op == OP_NULL)
for (;;) {
if (op == OP_NULL)
- op = mutt_menuLoop
(menu);
+ op = mutt_menuLoop(menu);
switch (op) {
case OP_ATTACH_VIEW_MAILCAP:
mutt_view_attachment (fp, idx[menu->current]->content, M_MAILCAP,
switch (op) {
case OP_ATTACH_VIEW_MAILCAP:
mutt_view_attachment (fp, idx[menu->current]->content, M_MAILCAP,
@@
-1244,8
+1200,8
@@
void mutt_view_attachments (HEADER * hdr)
idxmax = 0;
if (need_secured && secured) {
idxmax = 0;
if (need_secured && secured) {
-
fclose (
fp);
-
mutt_free_body
(&cur);
+
m_fclose(&
fp);
+
body_list_wipe
(&cur);
}
mutt_menuDestroy (&menu);
}
mutt_menuDestroy (&menu);
@@
-1254,6
+1210,5
@@
void mutt_view_attachments (HEADER * hdr)
op = OP_NULL;
}
op = OP_NULL;
}
-
/* not reached */
}
/* not reached */
}