NeoMutt  2022-04-29-81-g9c5a59
Teaching an old dog new tricks
body.h File Reference

Representation of the body of an email. More...

#include "config.h"
#include <stdbool.h>
#include <time.h>
#include "mutt/lib.h"
#include "parameter.h"
+ Include dependency graph for body.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  Body
 The body of an email. More...


 ARRAY_HEAD (BodyArray, struct Body *)
bool mutt_body_cmp_strict (const struct Body *b1, const struct Body *b2)
 Strictly compare two email Body's. More...
void mutt_body_free (struct Body **ptr)
 Free a Body. More...
char * mutt_body_get_charset (struct Body *b, char *buf, size_t buflen)
 Get a body's character set. More...
struct Bodymutt_body_new (void)
 Create a new Body. More...

Detailed Description

Representation of the body of an email.

  • Richard Russon

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

Definition in file body.h.

Function Documentation


ARRAY_HEAD ( BodyArray  ,
struct Body  

◆ mutt_body_cmp_strict()

bool mutt_body_cmp_strict ( const struct Body b1,
const struct Body b2 

Strictly compare two email Body's.

b1First Body
b2Second Body
Return values
trueBody's are strictly identical

Definition at line 108 of file body.c.

109 {
110  if (!b1 || !b2)
111  return false;
113  if ((b1->type != b2->type) || (b1->encoding != b2->encoding) ||
114  !mutt_str_equal(b1->subtype, b2->subtype) ||
116  !mutt_param_cmp_strict(&b1->parameter, &b2->parameter) || (b1->length != b2->length))
117  {
118  return false;
119  }
120  return true;
121 }
bool mutt_str_equal(const char *a, const char *b)
Compare two strings.
Definition: string.c:784
bool mutt_param_cmp_strict(const struct ParameterList *pl1, const struct ParameterList *pl2)
Strictly compare two ParameterLists.
Definition: parameter.c:165
LOFF_T length
length (in bytes) of attachment
Definition: body.h:53
struct ParameterList parameter
Parameters of the content-type.
Definition: body.h:62
char * description
Definition: body.h:55
char * subtype
content-type subtype
Definition: body.h:60
unsigned int encoding
content-transfer-encoding, ContentEncoding
Definition: body.h:41
unsigned int type
content-type primary type, ContentType
Definition: body.h:40
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mutt_body_free()

void mutt_body_free ( struct Body **  ptr)

Free a Body.

[out]ptrBody to free

Definition at line 57 of file body.c.

58 {
59  if (!ptr)
60  return;
62  struct Body *a = *ptr, *b = NULL;
64  while (a)
65  {
66  b = a;
67  a = a->next;
69  mutt_param_free(&b->parameter);
70  if (b->filename)
71  {
72  if (b->unlink)
73  unlink(b->filename);
74  mutt_debug(LL_DEBUG1, "%sunlinking %s\n", b->unlink ? "" : "not ", b->filename);
75  }
77  FREE(&b->filename);
78  FREE(&b->d_filename);
79  FREE(&b->charset);
80  FREE(&b->content);
81  FREE(&b->xtype);
82  FREE(&b->subtype);
83  FREE(&b->language);
84  FREE(&b->description);
85  FREE(&b->form_name);
87  if (b->email)
88  {
89  /* Don't free twice (b->email->body = b->parts) */
90  b->email->body = NULL;
91  email_free(&b->email);
92  }
94  mutt_env_free(&b->mime_headers);
95  mutt_body_free(&b->parts);
96  FREE(&b);
97  }
99  *ptr = NULL;
100 }
void mutt_body_free(struct Body **ptr)
Free a Body.
Definition: body.c:57
void email_free(struct Email **ptr)
Free an Email.
Definition: email.c:44
void mutt_env_free(struct Envelope **ptr)
Free an Envelope.
Definition: envelope.c:97
#define mutt_debug(LEVEL,...)
Definition: logging.h:84
Log at debug level 1.
Definition: logging.h:40
#define FREE(x)
Definition: memory.h:40
void mutt_param_free(struct ParameterList *pl)
Free a ParameterList.
Definition: parameter.c:61
The body of an email.
Definition: body.h:36
bool unlink
If true, filename should be unlink()ed before free()ing this structure.
Definition: body.h:67
struct Body * next
next attachment in the list
Definition: body.h:71
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mutt_body_get_charset()

char* mutt_body_get_charset ( struct Body b,
char *  buf,
size_t  buflen 

Get a body's character set.

bBody to examine
bufBuffer for the result
buflenLength of the buffer
Return values
ptrBuffer containing character set
NULLOn error, or if not a text type

Definition at line 131 of file body.c.

132 {
133  char *p = NULL;
135  if (b && (b->type != TYPE_TEXT))
136  return NULL;
138  if (b)
139  p = mutt_param_get(&b->parameter, "charset");
141  if (p)
142  mutt_ch_canonical_charset(buf, buflen, p);
143  else
144  mutt_str_copy(buf, "us-ascii", buflen);
146  return buf;
147 }
Type: 'text/*'.
Definition: mime.h:38
void mutt_ch_canonical_charset(char *buf, size_t buflen, const char *name)
Canonicalise the charset of a string.
Definition: charset.c:351
size_t mutt_str_copy(char *dest, const char *src, size_t dsize)
Copy a string into a buffer (guaranteeing NUL-termination)
Definition: string.c:629
char * mutt_param_get(const struct ParameterList *pl, const char *s)
Find a matching Parameter.
Definition: parameter.c:84
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mutt_body_new()

struct Body* mutt_body_new ( void  )

Create a new Body.

Return values
ptrNewly allocated Body

Definition at line 43 of file body.c.

44 {
45  struct Body *p = mutt_mem_calloc(1, sizeof(struct Body));
48  p->use_disp = true;
49  TAILQ_INIT(&p->parameter);
50  return p;
51 }
void * mutt_mem_calloc(size_t nmemb, size_t size)
Allocate zeroed memory on the heap.
Definition: memory.c:50
Content is attached.
Definition: mime.h:63
#define TAILQ_INIT(head)
Definition: queue.h:765
bool use_disp
Content-Disposition uses filename= ?
Definition: body.h:47
unsigned int disposition
content-disposition, ContentDisposition
Definition: body.h:42
+ Here is the call graph for this function:
+ Here is the caller graph for this function: