oops, I did it again: simplify a lot of code :]
[apps/madmutt.git] / lib-mime / mime-types.h
index 9d4d70e..6f8c4b7 100644 (file)
 #ifndef MUTT_LIB_MIME_MIME_TYPES_H
 #define MUTT_LIB_MIME_MIME_TYPES_H
 
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <lib-lib/mem.h>
-#include <lib-lib/buffer.h>
-#include <lib-lib/list.h>
+#include <lib-lib/lib-lib.h>
 
 /* Content-Type */
 enum {
@@ -60,7 +54,7 @@ enum {
     ENCQUOTEDPRINTABLE,
     ENCBASE64,
     ENCBINARY,
-    ENCUUENCODED
+    ENCUUENCODED,
 };
 
 /* Content-Disposition values */
@@ -75,30 +69,48 @@ enum {
 /****************************************************************************/
 
 typedef struct address_t {
+    struct address_t *next;
     char *personal;               /* real name of address */
     char *mailbox;                /* mailbox and host address */
     int group;                    /* group mailbox? */
-    struct address_t *next;
 } address_t;
 
 DO_INIT(address_t, address);
-void address_wipe(address_t *);
+static inline void address_wipe(address_t *addr) {
+    p_delete(&addr->personal);
+    p_delete(&addr->mailbox);
+}
 
 DO_NEW(address_t, address);
 DO_DELETE(address_t, address);
-DO_SLIST(address_t, address);
-
+DO_SLIST(address_t, address, address_delete);
 
 /****************************************************************************/
 /* rfc822 header parameters                                                 */
 /****************************************************************************/
 
-typedef struct parameter {
+typedef struct parameter_t {
+    struct parameter_t *next;
     char *attribute;
     char *value;
-    struct parameter *next;
-} PARAMETER;
+} parameter_t;
 
+DO_INIT(parameter_t, parameter);
+static inline void parameter_wipe(parameter_t *param) {
+    p_delete(&param->attribute);
+    p_delete(&param->value);
+}
+
+DO_NEW(parameter_t, parameter);
+DO_DELETE(parameter_t, parameter);
+DO_SLIST(parameter_t, parameter, parameter_delete);
+
+char *parameter_getval(parameter_t *, const char *);
+void parameter_setval(parameter_t **, const char *, const char *);
+void parameter_delval(parameter_t ** p, const char *);
+void parameter_set_boundary(parameter_t **);
+
+int parameter_equal(const parameter_t *, const parameter_t *);
 
 /****************************************************************************/
 /* rfc822 envelopes                                                         */
@@ -128,13 +140,18 @@ typedef struct envelope_t {
     char *x_comment_to;
 #endif
     BUFFER *spam;
-    LIST *references;             /* message references (in reverse order) */
-    LIST *in_reply_to;            /* in-reply-to header content */
-    LIST *userhdrs;               /* user defined headers */
+    string_list_t *references;             /* message references (in reverse order) */
+    string_list_t *in_reply_to;            /* in-reply-to header content */
+    string_list_t *userhdrs;               /* user defined headers */
     unsigned int irt_changed:1;   /* In-Reply-To changed to link/break threads */
     unsigned int refs_changed:1;  /* References changed to break thread */
 } ENVELOPE;
 
+DO_INIT(ENVELOPE, envelope);
+void envelope_wipe(ENVELOPE*);
+
+DO_NEW(ENVELOPE, envelope);
+DO_DELETE(ENVELOPE, envelope);
 
 /****************************************************************************/
 /* rfc822 content-*                                                         */
@@ -160,9 +177,11 @@ typedef struct content {
 /****************************************************************************/
 
 typedef struct body {
+    struct body *next;            /* next attachment in the list */
+
     char *xtype;                  /* content-type if x-unknown */
     char *subtype;                /* content-type subtype */
-    PARAMETER *parameter;         /* parameters of the content-type */
+    parameter_t *parameter;         /* parameters of the content-type */
     char *description;            /* content-description */
     char *form_name;              /* Content-Disposition form-data name param */
     off_t hdr_offset;             /* offset in stream where the headers begin.
@@ -186,7 +205,6 @@ typedef struct body {
                                    * to determine what content-transfer-encoding
                                    * is required when sending mail.
                                    */
-    struct body *next;            /* next attachment in the list */
     struct body *parts;           /* parts of a multipart or message/rfc822 */
     struct header *hdr;           /* header information for message/rfc822 */
 
@@ -230,6 +248,17 @@ typedef struct body {
     unsigned int attach_qualifies:1;
 } BODY;
 
+static inline BODY *body_init(BODY *b) {
+    b->disposition = DISPATTACH;
+    b->use_disp = 1;
+    return b;
+}
+void body_wipe(BODY *);
+
+DO_NEW(BODY, body);
+DO_DELETE(BODY, body);
+DO_SLIST(BODY, body, body_delete);
+
 
 /****************************************************************************/
 /* rfc822 Headers                                                           */
@@ -303,9 +332,7 @@ see: crypt.h pgplib.h, smime.h */
 
     short attach_total;
 
-#ifdef MIXMASTER
-    LIST *chain;
-#endif
+    string_list_t *chain;
 
     int refno;                    /* message number on server */
     void *data;                   /* driver-specific data */
@@ -313,4 +340,10 @@ see: crypt.h pgplib.h, smime.h */
     char *maildir_flags;          /* unknown maildir flags */
 } HEADER;
 
+DO_INIT(HEADER, header);
+void header_wipe(HEADER *);
+
+DO_NEW(HEADER, header);
+DO_DELETE(HEADER, header);
+
 #endif /* MUTT_LIB_MIME_MIME_TYPES_H */