fclose -> m_fclose
[apps/madmutt.git] / lib-mime / rfc822parse.c
index 77cbe47..65b03b4 100644 (file)
  * please see the file GPL in the top level source directory.
  */
 
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-
-#include <lib-lib/mem.h>
-#include <lib-lib/str.h>
-#include <lib-lib/ascii.h>
-#include <lib-lib/macros.h>
-#include <lib-lib/buffer.h>
-#include <lib-lib/date.h>
-#include <lib-lib/url.h>
+#include <lib-lib/lib-lib.h>
 
 #include "recvattach.h"
 
@@ -201,14 +189,14 @@ int mutt_check_mime_type(const char *s)
     }
 }
 
-static PARAMETER *parse_parameters(const char *s)
+static parameter_t *parse_parameters(const char *s)
 {
-    PARAMETER *res = NULL;
-    PARAMETER **list = &res;
+    parameter_t *res = NULL;
+    parameter_t **list = &res;
 
     while (*s) {
         const char *p;
-        PARAMETER *new;
+        parameter_t *new;
         int i;
 
         s = skipspaces(s);
@@ -291,7 +279,7 @@ void mutt_parse_content_type(char *s, BODY *ct)
         /* Some pre-RFC1521 gateways still use the "name=filename" convention,
          * but if a filename has already been set in the content-disposition,
          * let that take precedence, and don't set it here */
-        pc = mutt_get_parameter("name", ct->parameter);
+        pc = parameter_getval(ct->parameter, "name");
         if (pc && !ct->filename)
             ct->filename = m_strdup(pc);
     }
@@ -343,17 +331,17 @@ void mutt_parse_content_type(char *s, BODY *ct)
 
     /* Default character set for text types. */
     if (ct->type == TYPETEXT) {
-        pc = mutt_get_parameter("charset", ct->parameter);
+        pc = parameter_getval(ct->parameter, "charset");
         if (!pc) {
-            mutt_set_parameter("charset",
-                               option(OPTSTRICTMIME) ? "us-ascii" :
-                               mutt_get_first_charset(AssumedCharset),
-                               &ct->parameter);
+            parameter_setval(&ct->parameter, "charset",
+                             option(OPTSTRICTMIME)
+                             ? "us-ascii"
+                             : charset_getfirst(AssumedCharset));
         }
     }
 }
 
-static void parse_content_disposition(char *s, BODY *ct)
+static void parse_content_disposition(const char *s, BODY *ct)
 {
     if (!ascii_strncasecmp(s, "inline", 6)) {
         ct->disposition = DISPINLINE;
@@ -365,11 +353,11 @@ static void parse_content_disposition(char *s, BODY *ct)
 
     /* Check to see if a default filename was given */
     if ((s = strchr (s, ';'))) {
-        PARAMETER *parms = parse_parameters(vskipspaces(s));
+        parameter_t *parms = parse_parameters(vskipspaces(s));
 
-        if ((s = mutt_get_parameter("filename", parms)))
+        if ((s = parameter_getval(parms, "filename")))
             m_strreplace(&ct->filename, s);
-        if ((s = mutt_get_parameter ("name", parms)))
+        if ((s = parameter_getval(parms, "name")))
             ct->form_name = m_strdup(s);
 
         parameter_list_wipe(&parms);
@@ -384,7 +372,7 @@ static void parse_content_disposition(char *s, BODY *ct)
  */
 BODY *mutt_read_mime_header(FILE *fp, int digest)
 {
-    BODY *body = mutt_new_body ();
+    BODY *body = body_new();
     char *line = p_new(char, LONG_STRING);
     ssize_t linelen = LONG_STRING;
     char *p;
@@ -445,7 +433,7 @@ void mutt_parse_part(FILE *fp, BODY *b)
 
     switch (b->type) {
       case TYPEMULTIPART:
-        bound = mutt_get_parameter("boundary", b->parameter);
+        bound = parameter_getval(b->parameter, "boundary");
         fseeko(fp, b->offset, SEEK_SET);
         b->parts = mutt_parse_multipart(fp, bound, b->offset + b->length,
                                         mime_which_token(b->subtype, -1) == MIME_DIGEST);
@@ -573,7 +561,7 @@ mutt_parse_multipart(FILE *fp, const char *bound, off_t end_off, int digest)
                  */
 
                 if (new->offset > end_off) {
-                    mutt_free_body(&new);
+                    body_list_wipe(&new);
                     break;
                 }
 
@@ -615,62 +603,6 @@ uncomment_timezone(char *buf, size_t buflen, const char *tz)
     return buf;
 }
 
-static struct tz_t {
-    char tzname[5];
-    unsigned char zhours;
-    unsigned char zminutes;
-    unsigned char zoccident;      /* west of UTC? */
-} TimeZones[] = {
-    {"aat", 1, 0, 1},             /* Atlantic Africa Time */
-    {"adt", 4, 0, 0},             /* Arabia DST */
-    {"ast", 3, 0, 0},             /* Arabia */
-    /*{ "ast",   4,  0, 1 }, *//* Atlantic */
-    {"bst", 1, 0, 0},             /* British DST */
-    {"cat", 1, 0, 0},             /* Central Africa */
-    {"cdt", 5, 0, 1},
-    {"cest", 2, 0, 0},            /* Central Europe DST */
-    {"cet", 1, 0, 0},             /* Central Europe */
-    {"cst", 6, 0, 1},
-    /*{ "cst",   8,  0, 0 }, *//* China */
-    /*{ "cst",   9, 30, 0 }, *//* Australian Central Standard Time */
-    {"eat", 3, 0, 0},             /* East Africa */
-    {"edt", 4, 0, 1},
-    {"eest", 3, 0, 0},            /* Eastern Europe DST */
-    {"eet", 2, 0, 0},             /* Eastern Europe */
-    {"egst", 0, 0, 0},            /* Eastern Greenland DST */
-    {"egt", 1, 0, 1},             /* Eastern Greenland */
-    {"est", 5, 0, 1},
-    {"gmt", 0, 0, 0},
-    {"gst", 4, 0, 0},             /* Presian Gulf */
-    {"hkt", 8, 0, 0},             /* Hong Kong */
-    {"ict", 7, 0, 0},             /* Indochina */
-    {"idt", 3, 0, 0},             /* Israel DST */
-    {"ist", 2, 0, 0},             /* Israel */
-    /*{ "ist",   5, 30, 0 }, *//* India */
-    {"jst", 9, 0, 0},             /* Japan */
-    {"kst", 9, 0, 0},             /* Korea */
-    {"mdt", 6, 0, 1},
-    {"met", 1, 0, 0},             /* this is now officially CET */
-    {"msd", 4, 0, 0},             /* Moscow DST */
-    {"msk", 3, 0, 0},             /* Moscow */
-    {"mst", 7, 0, 1},
-    {"nzdt", 13, 0, 0},           /* New Zealand DST */
-    {"nzst", 12, 0, 0},           /* New Zealand */
-    {"pdt", 7, 0, 1},
-    {"pst", 8, 0, 1},
-    {"sat", 2, 0, 0},             /* South Africa */
-    {"smt", 4, 0, 0},             /* Seychelles */
-    {"sst", 11, 0, 1},            /* Samoa */
-    /*{ "sst",   8,  0, 0 }, *//* Singapore */
-    {"utc", 0, 0, 0},
-    {"wat", 0, 0, 0},             /* West Africa */
-    {"west", 1, 0, 0},            /* Western Europe DST */
-    {"wet", 0, 0, 0},             /* Western Europe */
-    {"wgst", 2, 0, 1},            /* Western Greenland DST */
-    {"wgt", 3, 0, 1},             /* Western Greenland */
-    {"wst", 8, 0, 0},             /* Western Australia */
-};
-
 /* parses a date string in RFC822 format:
  *
  * Date: [ weekday , ] day-of-month month year hour:minute:second timezone
@@ -752,26 +684,6 @@ time_t mutt_parse_date(const char *s, HEADER *h)
                     zhours    = (ptz[1] - '0') * 10 + (ptz[2] - '0');
                     zminutes  = (ptz[3] - '0') * 10 + (ptz[4] - '0');
                 }
-            } else {
-                struct tz_t *tz;
-
-                /* This is safe to do: A pointer to a struct equals a pointer to its
-                 * first element*/
-                tz = bsearch(ptz, TimeZones, countof(TimeZones), sizeof(TimeZones[0]),
-                             (int (*)(const void *, const void *))ascii_strcasecmp);
-
-                if (tz) {
-                    zhours = tz->zhours;
-                    zminutes = tz->zminutes;
-                    zoccident = tz->zoccident;
-                }
-
-                /* ad hoc support for the European MET (now officially CET) TZ */
-                if (ascii_strcasecmp(p, "MET") == 0) {
-                    if ((p = strtok (NULL, " \t")) && !ascii_strcasecmp(p, "DST")) {
-                        zhours++;
-                    }
-                }
             }
             break;
         }
@@ -1094,7 +1006,7 @@ mutt_read_rfc822_header(FILE *f, HEADER *hdr, short user_hdrs, short weed)
     off_t loc;
 
     if (hdr && !hdr->content) {
-        hdr->content = mutt_new_body ();
+        hdr->content = body_new();
 
         /* set the defaults from RFC1521 */
         hdr->content->type     = TYPETEXT;