Skip to content

Commit

Permalink
move Attach, AttachCtx to library
Browse files Browse the repository at this point in the history
  • Loading branch information
flatcap committed Jul 16, 2018
1 parent c91c800 commit 151c18d
Show file tree
Hide file tree
Showing 14 changed files with 271 additions and 122 deletions.
6 changes: 3 additions & 3 deletions Makefile.autosetup
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,12 @@ ALL_FILES!= (cd $(SRCDIR) && git ls-files 2>/dev/null) || true
###############################################################################
# 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 \
Expand All @@ -92,7 +92,7 @@ ALLOBJS+= $(NEOMUTTOBJS)
###############################################################################
# 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 \
Expand Down
2 changes: 1 addition & 1 deletion browser.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,14 @@
#include "conn/conn.h"
#include "mutt.h"
#include "browser.h"
#include "attach.h"
#include "buffy.h"
#include "context.h"
#include "format_flags.h"
#include "globals.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"
Expand Down
5 changes: 3 additions & 2 deletions compose.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@
#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"
Expand All @@ -48,6 +48,7 @@
#include "opcodes.h"
#include "options.h"
#include "protos.h"
#include "recvattach.h"
#include "sort.h"
#ifdef MIXMASTER
#include "remailer.h"
Expand Down Expand Up @@ -1940,7 +1941,7 @@ int mutt_compose_menu(struct Header *msg, char *fcc, size_t fcclen,
else
msg->content = NULL;

mutt_free_attach_context(&actx);
mutt_actx_free(&actx);

return r;
}
142 changes: 142 additions & 0 deletions mutt/attach.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
/**
* @file
* Handling of email attachments
*
* @authors
* Copyright (C) 1996-2000,2002,2013 Michael R. Elkins <[email protected]>
* Copyright (C) 1999-2004,2006 Thomas Roessler <[email protected]>
*
* @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);
}
30 changes: 2 additions & 28 deletions attach.h → mutt/attach.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,12 @@
* 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;

Expand Down Expand Up @@ -71,33 +68,10 @@ struct AttachCtx
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 */
2 changes: 2 additions & 0 deletions mutt/mutt.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
* | 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 |
Expand Down Expand Up @@ -61,6 +62,7 @@
#define _MUTT_MUTT_H

#include "address.h"
#include "attach.h"
#include "base64.h"
#include "body.h"
#include "buffer.h"
Expand Down
83 changes: 0 additions & 83 deletions attach.c → mutt_attach.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,6 @@
#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"
Expand All @@ -41,7 +38,6 @@
#include "mutt_curses.h"
#include "mx.h"
#include "ncrypt/ncrypt.h"
#include "options.h"
#include "pager.h"
#include "protos.h"
#include "rfc1524.h"
Expand Down Expand Up @@ -1121,82 +1117,3 @@ int mutt_print_attachment(FILE *fp, struct Body *a)
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);
}
Loading

0 comments on commit 151c18d

Please sign in to comment.