###############################################################################
# neomutt
NEOMUTT= neomutt$(EXEEXT)
-NEOMUTTOBJS= addrbook.o alias.o attach.o bcache.o browser.o buffy.o \
+NEOMUTTOBJS= addrbook.o alias.o bcache.o browser.o buffy.o \
color.o commands.o complete.o compose.o compress.o \
conststrings.o copy.o curs_lib.o curs_main.o edit.o editmsg.o \
enriched.o enter.o filter.o flags.o from.o group.o handler.o \
hdrline.o header.o help.o history.o hook.o init.o keymap.o \
- main.o mbox.o menu.o mh.o muttlib.o mutt_account.o mutt_body.o \
+ main.o mbox.o menu.o mh.o muttlib.o mutt_account.o mutt_attach.o mutt_body.o \
mutt_logging.o mutt_signal.o mutt_socket.o mutt_window.o mx.o newsrc.o \
nntp.o pager.o parse.o pattern.o pop.o pop_auth.o pop_lib.o \
postpone.o progress.o query.o recvattach.o recvcmd.o resize.o rfc1524.o \
###############################################################################
# libmutt
LIBMUTT= libmutt.a
-LIBMUTTOBJS= mutt/address.o mutt/base64.o mutt/body.o mutt/buffer.o mutt/charset.o \
+LIBMUTTOBJS= mutt/address.o mutt/attach.o mutt/base64.o mutt/body.o mutt/buffer.o mutt/charset.o \
mutt/date.o mutt/envelope.o mutt/envlist.o mutt/exit.o mutt/file.o mutt/hash.o \
mutt/idna.o mutt/list.o mutt/logging.o mutt/mapping.o \
mutt/mbyte.o mutt/md5.o mutt/memory.o mutt/mime.o \
#include "conn/conn.h"
#include "mutt.h"
#include "browser.h"
-#include "attach.h"
#include "buffy.h"
#include "context.h"
#include "format_flags.h"
#include "keymap.h"
#include "mailbox.h"
#include "mutt_account.h"
+#include "mutt_attach.h"
#include "mutt_curses.h"
#include "mutt_menu.h"
#include "mutt_window.h"
#include "conn/conn.h"
#include "mutt.h"
#include "alias.h"
-#include "attach.h"
#include "context.h"
#include "format_flags.h"
#include "globals.h"
#include "header.h"
#include "keymap.h"
#include "mailbox.h"
+#include "mutt_attach.h"
#include "mutt_curses.h"
#include "mutt_menu.h"
#include "mutt_window.h"
#include "opcodes.h"
#include "options.h"
#include "protos.h"
+#include "recvattach.h"
#include "sort.h"
#ifdef MIXMASTER
#include "remailer.h"
else
msg->content = NULL;
- mutt_free_attach_context(&actx);
+ mutt_actx_free(&actx);
return r;
}
--- /dev/null
+/**
+ * @file
+ * Handling of email attachments
+ *
+ * @authors
+ * Copyright (C) 1996-2000,2002,2013 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2004,2006 Thomas Roessler <roessler@does-not-exist.org>
+ *
+ * @copyright
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @page attach Handling of email attachments
+ *
+ * Handling of email attachments
+ */
+
+#include "config.h"
+#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include "attach.h"
+#include "body.h"
+#include "file.h"
+#include "memory.h"
+
+/**
+ * mutt_actx_add_attach - Add an Attachment to an Attachment Context
+ * @param actx Attachment context
+ * @param attach Attachment to add
+ */
+void mutt_actx_add_attach(struct AttachCtx *actx, struct AttachPtr *attach)
+{
+ if (actx->idxlen == actx->idxmax)
+ {
+ actx->idxmax += 5;
+ mutt_mem_realloc(&actx->idx, sizeof(struct AttachPtr *) * actx->idxmax);
+ mutt_mem_realloc(&actx->v2r, sizeof(short) * actx->idxmax);
+ for (int i = actx->idxlen; i < actx->idxmax; i++)
+ actx->idx[i] = NULL;
+ }
+
+ actx->idx[actx->idxlen++] = attach;
+}
+
+/**
+ * mutt_actx_add_fp - Save a File handle to the Attachment Context
+ * @param actx Attachment context
+ * @param new_fp File handle to save
+ */
+void mutt_actx_add_fp(struct AttachCtx *actx, FILE *new_fp)
+{
+ if (actx->fp_len == actx->fp_max)
+ {
+ actx->fp_max += 5;
+ mutt_mem_realloc(&actx->fp_idx, sizeof(FILE *) * actx->fp_max);
+ for (int i = actx->fp_len; i < actx->fp_max; i++)
+ actx->fp_idx[i] = NULL;
+ }
+
+ actx->fp_idx[actx->fp_len++] = new_fp;
+}
+
+/**
+ * mutt_actx_add_body - Add an email box to an Attachment Context
+ * @param actx Attachment context
+ * @param new_body Email Body to add
+ */
+void mutt_actx_add_body(struct AttachCtx *actx, struct Body *new_body)
+{
+ if (actx->body_len == actx->body_max)
+ {
+ actx->body_max += 5;
+ mutt_mem_realloc(&actx->body_idx, sizeof(struct Body *) * actx->body_max);
+ for (int i = actx->body_len; i < actx->body_max; i++)
+ actx->body_idx[i] = NULL;
+ }
+
+ actx->body_idx[actx->body_len++] = new_body;
+}
+
+/**
+ * mutt_actx_free_entries - Free entries in an Attachment Context
+ * @param actx Attachment context
+ */
+void mutt_actx_free_entries(struct AttachCtx *actx)
+{
+ int i;
+
+ for (i = 0; i < actx->idxlen; i++)
+ {
+ if (actx->idx[i]->content)
+ actx->idx[i]->content->aptr = NULL;
+ FREE(&actx->idx[i]->tree);
+ FREE(&actx->idx[i]);
+ }
+ actx->idxlen = 0;
+ actx->vcount = 0;
+
+ for (i = 0; i < actx->fp_len; i++)
+ mutt_file_fclose(&actx->fp_idx[i]);
+ actx->fp_len = 0;
+
+ for (i = 0; i < actx->body_len; i++)
+ mutt_body_free(&actx->body_idx[i]);
+ actx->body_len = 0;
+}
+
+/**
+ * mutt_actx_free - Free an Attachment Context
+ * @param pactx Attachment context
+ */
+void mutt_actx_free(struct AttachCtx **pactx)
+{
+ struct AttachCtx *actx = NULL;
+
+ if (!pactx || !*pactx)
+ return;
+
+ actx = *pactx;
+ mutt_actx_free_entries(actx);
+ FREE(&actx->idx);
+ FREE(&actx->v2r);
+ FREE(&actx->fp_idx);
+ FREE(&actx->body_idx);
+ FREE(pactx);
+}
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/* common protos for compose / attach menus */
-
#ifndef _MUTT_ATTACH_H
#define _MUTT_ATTACH_H
#include <stdbool.h>
#include <stdio.h>
-struct Menu;
struct Header;
struct Body;
short body_max;
};
-void mutt_attach_init(struct AttachCtx *actx);
-void mutt_update_tree(struct AttachCtx *actx);
-int mutt_view_attachment(FILE *fp, struct Body *a, int flag, struct Header *hdr,
- struct AttachCtx *actx);
-
-int mutt_tag_attach(struct Menu *menu, int n, int m);
-int mutt_attach_display_loop(struct Menu *menu, int op, struct Header *hdr,
- struct AttachCtx *actx, bool recv);
-
-void mutt_save_attachment_list(struct AttachCtx *actx, FILE *fp, bool tag,
- struct Body *top, struct Header *hdr, struct Menu *menu);
-void mutt_pipe_attachment_list(struct AttachCtx *actx, FILE *fp, bool tag,
- struct Body *top, bool filter);
-void mutt_print_attachment_list(struct AttachCtx *actx, FILE *fp, bool tag,
- struct Body *top);
-
-void mutt_attach_bounce(FILE *fp, struct AttachCtx *actx, struct Body *cur);
-void mutt_attach_resend(FILE *fp, struct AttachCtx *actx, struct Body *cur);
-void mutt_attach_forward(FILE *fp, struct Header *hdr, struct AttachCtx *actx,
- struct Body *cur, int flags);
-void mutt_attach_reply(FILE *fp, struct Header *hdr, struct AttachCtx *actx,
- struct Body *cur, int flags);
-
void mutt_actx_add_attach(struct AttachCtx *actx, struct AttachPtr *attach);
-void mutt_actx_add_fp(struct AttachCtx *actx, FILE *new_fp);
void mutt_actx_add_body(struct AttachCtx *actx, struct Body *new_body);
+void mutt_actx_add_fp(struct AttachCtx *actx, FILE *new_fp);
+void mutt_actx_free(struct AttachCtx **pactx);
void mutt_actx_free_entries(struct AttachCtx *actx);
-void mutt_free_attach_context(struct AttachCtx **pactx);
#endif /* _MUTT_ATTACH_H */
* | File | Description |
* | :--------------- | :----------------- |
* | mutt/address.c | @subpage address |
+ * | mutt/attach.c | @subpage attach |
* | mutt/base64.c | @subpage base64 |
* | mutt/body.c | @subpage base64 |
* | mutt/buffer.c | @subpage buffer |
#define _MUTT_MUTT_H
#include "address.h"
+#include "attach.h"
#include "base64.h"
#include "body.h"
#include "buffer.h"
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
-#include "mutt/mutt.h"
-#include "mutt.h"
-#include "attach.h"
#include "context.h"
#include "copy.h"
#include "filter.h"
#include "mutt_curses.h"
#include "mx.h"
#include "ncrypt/ncrypt.h"
-#include "options.h"
#include "pager.h"
#include "protos.h"
#include "rfc1524.h"
return 0;
}
}
-
-void mutt_actx_add_attach(struct AttachCtx *actx, struct AttachPtr *attach)
-{
- if (actx->idxlen == actx->idxmax)
- {
- actx->idxmax += 5;
- mutt_mem_realloc(&actx->idx, sizeof(struct AttachPtr *) * actx->idxmax);
- mutt_mem_realloc(&actx->v2r, sizeof(short) * actx->idxmax);
- for (int i = actx->idxlen; i < actx->idxmax; i++)
- actx->idx[i] = NULL;
- }
-
- actx->idx[actx->idxlen++] = attach;
-}
-
-void mutt_actx_add_fp(struct AttachCtx *actx, FILE *new_fp)
-{
- if (actx->fp_len == actx->fp_max)
- {
- actx->fp_max += 5;
- mutt_mem_realloc(&actx->fp_idx, sizeof(FILE *) * actx->fp_max);
- for (int i = actx->fp_len; i < actx->fp_max; i++)
- actx->fp_idx[i] = NULL;
- }
-
- actx->fp_idx[actx->fp_len++] = new_fp;
-}
-
-void mutt_actx_add_body(struct AttachCtx *actx, struct Body *new_body)
-{
- if (actx->body_len == actx->body_max)
- {
- actx->body_max += 5;
- mutt_mem_realloc(&actx->body_idx, sizeof(struct Body *) * actx->body_max);
- for (int i = actx->body_len; i < actx->body_max; i++)
- actx->body_idx[i] = NULL;
- }
-
- actx->body_idx[actx->body_len++] = new_body;
-}
-
-void mutt_actx_free_entries(struct AttachCtx *actx)
-{
- int i;
-
- for (i = 0; i < actx->idxlen; i++)
- {
- if (actx->idx[i]->content)
- actx->idx[i]->content->aptr = NULL;
- FREE(&actx->idx[i]->tree);
- FREE(&actx->idx[i]);
- }
- actx->idxlen = 0;
- actx->vcount = 0;
-
- for (i = 0; i < actx->fp_len; i++)
- mutt_file_fclose(&actx->fp_idx[i]);
- actx->fp_len = 0;
-
- for (i = 0; i < actx->body_len; i++)
- mutt_body_free(&actx->body_idx[i]);
- actx->body_len = 0;
-}
-
-void mutt_free_attach_context(struct AttachCtx **pactx)
-{
- struct AttachCtx *actx = NULL;
-
- if (!pactx || !*pactx)
- return;
-
- actx = *pactx;
- mutt_actx_free_entries(actx);
- FREE(&actx->idx);
- FREE(&actx->v2r);
- FREE(&actx->fp_idx);
- FREE(&actx->body_idx);
- FREE(pactx);
-}
--- /dev/null
+/**
+ * @file
+ * Handling of email attachments
+ *
+ * @authors
+ * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
+ *
+ * @copyright
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* common protos for compose / attach menus */
+
+#ifndef _MUTT_ATTACH2_H
+#define _MUTT_ATTACH2_H
+
+#include "config.h"
+#include <stdbool.h>
+#include <stdio.h>
+#include "mutt/mutt.h"
+
+struct Menu;
+struct Header;
+struct Body;
+
+int mutt_tag_attach(struct Menu *menu, int n, int m);
+int mutt_attach_display_loop(struct Menu *menu, int op, struct Header *hdr,
+ struct AttachCtx *actx, bool recv);
+
+void mutt_save_attachment_list(struct AttachCtx *actx, FILE *fp, bool tag,
+ struct Body *top, struct Header *hdr, struct Menu *menu);
+void mutt_pipe_attachment_list(struct AttachCtx *actx, FILE *fp, bool tag,
+ struct Body *top, bool filter);
+void mutt_print_attachment_list(struct AttachCtx *actx, FILE *fp, bool tag,
+ struct Body *top);
+
+int mutt_view_attachment(FILE *fp, struct Body *a, int flag, struct Header *hdr, struct AttachCtx *actx);
+
+#endif /* _MUTT_ATTACH2_H */
#include "mutt.h"
#include "pager.h"
#include "alias.h"
-#include "attach.h"
#include "context.h"
#include "format_flags.h"
#include "globals.h"
#include "header.h"
#include "keymap.h"
#include "mailbox.h"
+#include "mutt_attach.h"
#include "mutt_curses.h"
#include "mutt_menu.h"
#include "mutt_window.h"
#include "opcodes.h"
#include "options.h"
#include "protos.h"
+#include "recvcmd.h"
#include "sort.h"
#include "terminal.h"
#ifdef USE_SIDEBAR
addrbook.c
alias.c
-attach.c
bcache.c
browser.c
buffy.c
menu.c
mh.c
mutt/address.c
+mutt/attach.c
mutt/base64.c
mutt/body.c
mutt/buffer.c
mutt/signal.c
mutt/string.c
mutt_account.c
+mutt_attach.c
mutt_body.c
mutt_logging.c
mutt_lua.c
#include <unistd.h>
#include "mutt/mutt.h"
#include "mutt.h"
-#include "attach.h"
#include "context.h"
#include "filter.h"
#include "format_flags.h"
#include "header.h"
#include "keymap.h"
#include "mailbox.h"
+#include "mutt_attach.h"
#include "mutt_curses.h"
#include "mutt_menu.h"
#include "mutt_window.h"
#include "opcodes.h"
#include "options.h"
#include "protos.h"
+#include "recvcmd.h"
#include "rfc1524.h"
#include "state.h"
if (hdr->attach_del)
hdr->changed = true;
- mutt_free_attach_context(&actx);
+ mutt_actx_free(&actx);
mutt_menu_pop_current(menu);
mutt_menu_destroy(&menu);
--- /dev/null
+/**
+ * @file
+ * Routines for managing attachments
+ *
+ * @authors
+ * Copyright (C) 1996-2000,2002,2007,2010 Michael R. Elkins <me@mutt.org>
+ * Copyright (C) 1999-2006 Thomas Roessler <roessler@does-not-exist.org>
+ *
+ * @copyright
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _MUTT_RECVATTACH_H
+#define _MUTT_RECVATTACH_H
+
+void mutt_attach_init(struct AttachCtx *actx);
+void mutt_update_tree(struct AttachCtx *actx);
+
+#endif /* _MUTT_RECVATTACH_H */
#include "mutt/mutt.h"
#include "mutt.h"
#include "alias.h"
-#include "attach.h"
#include "copy.h"
#include "globals.h"
#include "handler.h"
--- /dev/null
+/**
+ * @file
+ * Send/reply with an attachment
+ *
+ * @authors
+ * Copyright (C) 1999-2004 Thomas Roessler <roessler@does-not-exist.org>
+ *
+ * @copyright
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _MUTT_RECVCMD_H
+#define _MUTT_RECVCMD_H
+
+void mutt_attach_bounce(FILE *fp, struct AttachCtx *actx, struct Body *cur);
+void mutt_attach_resend(FILE *fp, struct AttachCtx *actx, struct Body *cur);
+void mutt_attach_forward(FILE *fp, struct Header *hdr, struct AttachCtx *actx, struct Body *cur, int flags);
+void mutt_attach_reply(FILE *fp, struct Header *hdr, struct AttachCtx *actx, struct Body *cur, int flags);
+
+#endif /* _MUTT_RECVCMD_H */