NeoMutt  2022-04-29-249-gaae397
Teaching an old dog new tricks
DOXYGEN
mutt_body.c
Go to the documentation of this file.
1
29#include "config.h"
30#include <stdbool.h>
31#include <stdio.h>
32#include <string.h>
33#include "mutt/lib.h"
34#include "email/lib.h"
35#include "mutt_body.h"
36#include "attach/lib.h"
37#include "send/lib.h"
38#include "muttlib.h"
39
48int mutt_body_copy(FILE *fp, struct Body **tgt, struct Body *src)
49{
50 if (!tgt || !src)
51 return -1;
52
53 struct Body *b = NULL;
54 bool use_disp;
55 struct Buffer *tmp = mutt_buffer_pool_get();
56
57 if (src->filename)
58 {
59 use_disp = true;
61 }
62 else
63 {
64 use_disp = false;
65 }
66
67 mutt_adv_mktemp(tmp);
68 if (mutt_save_attachment(fp, src, mutt_buffer_string(tmp), MUTT_SAVE_NO_FLAGS, NULL) == -1)
69 {
71 return -1;
72 }
73
74 *tgt = mutt_body_new();
75 b = *tgt;
76
77 memcpy(b, src, sizeof(struct Body));
79 b->parts = NULL;
80 b->next = NULL;
81
83 b->use_disp = use_disp;
84 b->unlink = true;
85
86 if (mutt_is_text_part(b))
87 b->noconv = true;
88
89 b->xtype = mutt_str_dup(b->xtype);
93 /* mutt_adv_mktemp() will mangle the filename in tmp,
94 * so preserve it in d_filename */
95 if (!b->d_filename && use_disp)
98
101
102 b->content = NULL;
103 b->aptr = NULL;
104 b->mime_headers = NULL;
105
106 /* we don't seem to need the Email structure currently.
107 * XXX this may change in the future */
108 b->email = NULL;
109
110 /* copy parameters */
111 struct Parameter *np = NULL, *new_param = NULL;
112 TAILQ_FOREACH(np, &src->parameter, entries)
113 {
114 new_param = mutt_param_new();
115 new_param->attribute = mutt_str_dup(np->attribute);
116 new_param->value = mutt_str_dup(np->value);
117 TAILQ_INSERT_HEAD(&b->parameter, new_param, entries);
118 }
119
122 return 0;
123}
GUI display the mailboxes in a side panel.
size_t mutt_buffer_strcpy(struct Buffer *buf, const char *s)
Copy a string into a Buffer.
Definition: buffer.c:327
char * mutt_buffer_strdup(const struct Buffer *buf)
Copy a Buffer's string.
Definition: buffer.c:447
static const char * mutt_buffer_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
Definition: buffer.h:77
struct Body * mutt_body_new(void)
Create a new Body.
Definition: body.c:43
Structs that make up an email.
Convenience wrapper for the library headers.
char * mutt_str_dup(const char *str)
Copy a string, safely.
Definition: string.c:250
int mutt_save_attachment(FILE *fp, struct Body *m, const char *path, enum SaveAttach opt, struct Email *e)
Save an attachment.
Definition: mutt_attach.c:896
@ MUTT_SAVE_NO_FLAGS
No flags set.
Definition: mutt_attach.h:57
int mutt_body_copy(FILE *fp, struct Body **tgt, struct Body *src)
Create a send-mode duplicate from a receive-mode body.
Definition: mutt_body.c:48
Representation of the body of an email.
bool mutt_is_text_part(struct Body *b)
Is this part of an email in plain text?
Definition: muttlib.c:433
void mutt_adv_mktemp(struct Buffer *buf)
Create a temporary file.
Definition: muttlib.c:84
Some miscellaneous functions.
struct Parameter * mutt_param_new(void)
Create a new Parameter.
Definition: parameter.c:39
void mutt_buffer_pool_release(struct Buffer **pbuf)
Free a Buffer from the pool.
Definition: pool.c:112
struct Buffer * mutt_buffer_pool_get(void)
Get a Buffer from the pool.
Definition: pool.c:101
#define TAILQ_FOREACH(var, head, field)
Definition: queue.h:725
#define TAILQ_INIT(head)
Definition: queue.h:765
#define TAILQ_INSERT_HEAD(head, elm, field)
Definition: queue.h:796
Convenience wrapper for the send headers.
void mutt_stamp_attachment(struct Body *a)
Timestamp an Attachment.
Definition: sendlib.c:401
The body of an email.
Definition: body.h:36
char * language
content-language (RFC8255)
Definition: body.h:77
char * d_filename
filename to be used for the content-disposition header If NULL, filename is used instead.
Definition: body.h:56
struct Body * parts
parts of a multipart or message/rfc822
Definition: body.h:72
char * xtype
content-type if x-unknown
Definition: body.h:61
bool noconv
Don't do character set conversion.
Definition: body.h:46
bool unlink
If true, filename should be unlink()ed before free()ing this structure.
Definition: body.h:67
struct Envelope * mime_headers
Memory hole protected headers.
Definition: body.h:75
char * charset
Send mode: charset of attached file as stored on disk.
Definition: body.h:78
struct ParameterList parameter
Parameters of the content-type.
Definition: body.h:62
struct AttachPtr * aptr
Menu information, used in recvattach.c.
Definition: body.h:74
bool use_disp
Content-Disposition uses filename= ?
Definition: body.h:47
struct Email * email
header information for message/rfc822
Definition: body.h:73
char * description
content-description
Definition: body.h:55
struct Content * content
Detailed info about the content of the attachment.
Definition: body.h:69
struct Body * next
next attachment in the list
Definition: body.h:71
char * subtype
content-type subtype
Definition: body.h:60
char * form_name
Content-Disposition form-data name param.
Definition: body.h:59
char * filename
When sending a message, this is the file to which this structure refers.
Definition: body.h:58
String manipulation buffer.
Definition: buffer.h:34
Attribute associated with a MIME part.
Definition: parameter.h:33
char * attribute
Parameter name.
Definition: parameter.h:34
char * value
Parameter value.
Definition: parameter.h:35