move intl.h into lib-lib/macros.h
[apps/madmutt.git] / imap / message.c
index 58fe61f..660f954 100644 (file)
@@ -17,6 +17,8 @@
 #include <stdlib.h>
 #include <ctype.h>
 
+#include <lib-lib/mem.h>
+
 #include "mutt.h"
 #include "ascii.h"
 #include "buffer.h"
@@ -30,8 +32,7 @@
 #include "pgp.h"
 #endif
 
-#include "lib/mem.h"
-#include "lib/intl.h"
+#include <lib-lib/macros.h>
 #include "lib/str.h"
 #include "lib/debug.h"
 
@@ -48,7 +49,7 @@ static int msg_has_flag (LIST * flag_list, const char *flag);
 static int msg_parse_fetch (IMAP_HEADER * h, char *s);
 static char *msg_parse_flags (IMAP_HEADER * h, char *s);
 
-#if USE_HCACHE
+#ifdef USE_HCACHE
 static int msg_fetch_header_fetch (CONTEXT * ctx, IMAP_HEADER * h, char *buf,
                                    FILE * fp);
 static size_t imap_hcache_keylen (const char *fn);
@@ -73,7 +74,7 @@ int imap_read_headers (IMAP_DATA * idata, int msgbegin, int msgend)
   const char *want_headers =
     "DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES CONTENT-TYPE CONTENT-DESCRIPTION IN-REPLY-TO REPLY-TO LINES LIST-POST X-LABEL";
 
-#if USE_HCACHE
+#ifdef USE_HCACHE
   void *hc = NULL;
   unsigned long *uid_validity = NULL;
   char uid_buf[64];
@@ -116,79 +117,80 @@ int imap_read_headers (IMAP_DATA * idata, int msgbegin, int msgend)
   idata->reopen &= ~IMAP_NEWMAIL_PENDING;
   idata->newMailCount = 0;
 
-#if USE_HCACHE
-  hc = mutt_hcache_open (HeaderCache, ctx->path);
+#ifdef USE_HCACHE
+  if ((hc = mutt_hcache_open (HeaderCache, ctx->path))) {
 
-  snprintf (buf, sizeof (buf),
-            "FETCH %d:%d (UID FLAGS)", msgbegin + 1, msgend + 1);
-  fetchlast = msgend + 1;
+    snprintf (buf, sizeof (buf),
+              "FETCH %d:%d (UID FLAGS)", msgbegin + 1, msgend + 1);
+    fetchlast = msgend + 1;
 
-  imap_cmd_start (idata, buf);
+    imap_cmd_start (idata, buf);
 
-  for (msgno = msgbegin; msgno <= msgend; msgno++) {
-    if (ReadInc && (!msgno || ((msgno + 1) % ReadInc == 0)))
-      mutt_message (_("Evaluating cache... [%d/%d]"), msgno + 1, msgend + 1);
+    for (msgno = msgbegin; msgno <= msgend; msgno++) {
+      if (ReadInc && (!msgno || ((msgno + 1) % ReadInc == 0)))
+        mutt_message (_("Evaluating cache... [%d/%d]"), msgno + 1, msgend + 1);
 
-    rewind (fp);
-    memset (&h, 0, sizeof (h));
-    h.data = mem_calloc (1, sizeof (IMAP_HEADER_DATA));
-    do {
-      mfhrc = 0;
+      rewind (fp);
+      memset (&h, 0, sizeof (h));
+      h.data = p_new(IMAP_HEADER_DATA, 1);
+      do {
+        mfhrc = 0;
+
+        rc = imap_cmd_step (idata);
+        if (rc != IMAP_CMD_CONTINUE)
+          break;
+
+        if ((mfhrc =
+            msg_fetch_header_fetch (idata->ctx, &h, idata->cmd.buf, fp)) == -1)
+          continue;
+        else if (mfhrc < 0)
+          break;
+
+        /* make sure we don't get remnants from older larger message headers */
+        fputs ("\n\n", fp);
+
+        sprintf (uid_buf, "/%u", h.data->uid);    /* XXX --tg 21:41 04-07-11 */
+        uid_validity =
+          (unsigned long *) mutt_hcache_fetch (hc, uid_buf, &imap_hcache_keylen);
+
+        if (uid_validity != NULL && *uid_validity == idata->uid_validity) {
+          ctx->hdrs[msgno] = mutt_hcache_restore((unsigned char *) uid_validity, 0);
+          ctx->hdrs[msgno]->index = h.sid - 1;
+          if (h.sid != ctx->msgcount + 1)
+            debug_print (1, ("imap_read_headers: msgcount and sequence ID are inconsistent!"));
+          /* messages which have not been expunged are ACTIVE (borrowed from mh 
+          * folders) */
+          ctx->hdrs[msgno]->active = 1;
+          ctx->hdrs[msgno]->read = h.read;
+          ctx->hdrs[msgno]->old = h.old;
+          ctx->hdrs[msgno]->deleted = h.deleted;
+          ctx->hdrs[msgno]->flagged = h.flagged;
+          ctx->hdrs[msgno]->replied = h.replied;
+          ctx->hdrs[msgno]->changed = h.changed;
+          /*  ctx->hdrs[msgno]->received is restored from mutt_hcache_restore */
+          ctx->hdrs[msgno]->data = (void *) (h.data);
+
+          ctx->msgcount++;
+        }
 
-      rc = imap_cmd_step (idata);
-      if (rc != IMAP_CMD_CONTINUE)
-        break;
+        rewind (fp);
 
-      if ((mfhrc =
-           msg_fetch_header_fetch (idata->ctx, &h, idata->cmd.buf, fp)) == -1)
-        continue;
-      else if (mfhrc < 0)
-        break;
+        p_delete(&uid_validity);
 
-      /* make sure we don't get remnants from older larger message headers */
-      fputs ("\n\n", fp);
-
-      sprintf (uid_buf, "/%u", h.data->uid);    /* XXX --tg 21:41 04-07-11 */
-      uid_validity =
-        (unsigned long *) mutt_hcache_fetch (hc, uid_buf, &imap_hcache_keylen);
-
-      if (uid_validity != NULL && *uid_validity == idata->uid_validity) {
-        ctx->hdrs[msgno] = mutt_hcache_restore((unsigned char *) uid_validity, 0);
-        ctx->hdrs[msgno]->index = h.sid - 1;
-        if (h.sid != ctx->msgcount + 1)
-          debug_print (1, ("imap_read_headers: msgcount and sequence ID are inconsistent!"));
-        /* messages which have not been expunged are ACTIVE (borrowed from mh 
-         * folders) */
-        ctx->hdrs[msgno]->active = 1;
-        ctx->hdrs[msgno]->read = h.read;
-        ctx->hdrs[msgno]->old = h.old;
-        ctx->hdrs[msgno]->deleted = h.deleted;
-        ctx->hdrs[msgno]->flagged = h.flagged;
-        ctx->hdrs[msgno]->replied = h.replied;
-        ctx->hdrs[msgno]->changed = h.changed;
-        /*  ctx->hdrs[msgno]->received is restored from mutt_hcache_restore */
-        ctx->hdrs[msgno]->data = (void *) (h.data);
-
-        ctx->msgcount++;
       }
+      while ((rc != IMAP_CMD_OK) && ((mfhrc == -1) ||
+                                    ((msgno + 1) >= fetchlast)));
 
-      rewind (fp);
-
-      mem_free (&uid_validity);
-
+      if ((mfhrc < -1) || ((rc != IMAP_CMD_CONTINUE) && (rc != IMAP_CMD_OK))) {
+        imap_free_header_data ((void **) &h.data);
+        fclose (fp);
+        mutt_hcache_close (hc);
+        return -1;
+      }
     }
-    while ((rc != IMAP_CMD_OK) && ((mfhrc == -1) ||
-                                   ((msgno + 1) >= fetchlast)));
 
-    if ((mfhrc < -1) || ((rc != IMAP_CMD_CONTINUE) && (rc != IMAP_CMD_OK))) {
-      imap_free_header_data ((void **) &h.data);
-      fclose (fp);
-      mutt_hcache_close (hc);
-      return -1;
-    }
+    fetchlast = msgbegin;
   }
-
-  fetchlast = msgbegin;
 #endif /* USE_HCACHE */
 
   for (msgno = msgbegin; msgno <= msgend; msgno++) {
@@ -221,7 +223,7 @@ int imap_read_headers (IMAP_DATA * idata, int msgbegin, int msgend)
     /* freshen fp, h */
     rewind (fp);
     memset (&h, 0, sizeof (h));
-    h.data = mem_calloc (1, sizeof (IMAP_HEADER_DATA));
+    h.data = p_new(IMAP_HEADER_DATA, 1);
 
     /* this DO loop does two things:
      * 1. handles untagged messages, so we can try again on the same msg
@@ -269,7 +271,7 @@ int imap_read_headers (IMAP_DATA * idata, int msgbegin, int msgend)
       /* content built as a side-effect of mutt_read_rfc822_header */
       ctx->hdrs[msgno]->content->length = h.content_length;
 
-#if USE_HCACHE
+#ifdef USE_HCACHE
       sprintf (uid_buf, "/%u", h.data->uid);
       mutt_hcache_store (hc, uid_buf, ctx->hdrs[msgno], idata->uid_validity,
                          &imap_hcache_keylen);
@@ -281,9 +283,9 @@ int imap_read_headers (IMAP_DATA * idata, int msgbegin, int msgend)
                                    ((msgno + 1) >= fetchlast)));
 
     if ((mfhrc < -1) || ((rc != IMAP_CMD_CONTINUE) && (rc != IMAP_CMD_OK))) {
-      imap_free_header_data ((void **) &h.data);
+      imap_free_header_data ((void *)&h.data);
       fclose (fp);
-#if USE_HCACHE
+#ifdef USE_HCACHE
       mutt_hcache_close (hc);
 #endif /* USE_HCACHE */
       return -1;
@@ -299,7 +301,7 @@ int imap_read_headers (IMAP_DATA * idata, int msgbegin, int msgend)
     }
   }
 
-#if USE_HCACHE
+#ifdef USE_HCACHE
   mutt_hcache_close (hc);
 #endif /* USE_HCACHE */
 
@@ -344,7 +346,7 @@ int imap_fetch_message (MESSAGE * msg, CONTEXT * ctx, int msgno)
       return 0;
     else {
       unlink (cache->path);
-      mem_free (&cache->path);
+      p_delete(&cache->path);
     }
   }
 
@@ -355,7 +357,7 @@ int imap_fetch_message (MESSAGE * msg, CONTEXT * ctx, int msgno)
   mutt_mktemp (path);
   cache->path = str_dup (path);
   if (!(msg->fp = safe_fopen (path, "w+"))) {
-    mem_free (&cache->path);
+    p_delete(&cache->path);
     return -1;
   }
 
@@ -463,7 +465,7 @@ int imap_fetch_message (MESSAGE * msg, CONTEXT * ctx, int msgno)
     fgets (buf, sizeof (buf), msg->fp);
   }
 
-  h->content->length = ftell (msg->fp) - h->content->offset;
+  h->content->length = ftello (msg->fp) - h->content->offset;
 
   /* This needs to be done in case this is a multipart message */
 #if defined(HAVE_PGP) || defined(HAVE_SMIME)
@@ -479,7 +481,7 @@ bail:
   safe_fclose (&msg->fp);
   if (cache->path) {
     unlink (cache->path);
-    mem_free (&cache->path);
+    p_delete(&cache->path);
   }
 
   return -1;
@@ -593,11 +595,11 @@ int imap_append_message (CONTEXT * ctx, MESSAGE * msg)
     goto fail;
   }
 
-  mem_free (&mx.mbox);
+  p_delete(&mx.mbox);
   return 0;
 
 fail:
-  mem_free (&mx.mbox);
+  p_delete(&mx.mbox);
   return -1;
 }
 
@@ -739,18 +741,18 @@ int imap_copy_messages (CONTEXT * ctx, HEADER * h, char *dest, int delete)
   }
 
   if (cmd.data)
-    mem_free (&cmd.data);
+    p_delete(&cmd.data);
   if (sync_cmd.data)
-    mem_free (&sync_cmd.data);
-  mem_free (&mx.mbox);
+    p_delete(&sync_cmd.data);
+  p_delete(&mx.mbox);
   return 0;
 
 fail:
   if (cmd.data)
-    mem_free (&cmd.data);
+    p_delete(&cmd.data);
   if (sync_cmd.data)
-    mem_free (&sync_cmd.data);
-  mem_free (&mx.mbox);
+    p_delete(&sync_cmd.data);
+  p_delete(&mx.mbox);
   return -1;
 }
 
@@ -781,7 +783,7 @@ void imap_free_header_data (void **data)
   /* this should be safe even if the list wasn't used */
   mutt_free_list (&(((IMAP_HEADER_DATA *) * data)->keywords));
 
-  mem_free (data);
+  p_delete(data);
 }
 
 /* imap_set_flags: fill out the message header according to the flags from
@@ -793,11 +795,11 @@ char *imap_set_flags (IMAP_DATA * idata, HEADER * h, char *s)
   unsigned char readonly;
 
   memset (&newh, 0, sizeof (newh));
-  newh.data = mem_calloc (1, sizeof (IMAP_HEADER_DATA));
+  newh.data = p_new(IMAP_HEADER_DATA, 1);
 
   debug_print (2, ("parsing FLAGS\n"));
   if ((s = msg_parse_flags (&newh, s)) == NULL) {
-    mem_free (&newh.data);
+    p_delete(&newh.data);
     return NULL;
   }
 
@@ -823,7 +825,7 @@ char *imap_set_flags (IMAP_DATA * idata, HEADER * h, char *s)
 
   mutt_free_list (&(HEADER_DATA (h)->keywords));
   HEADER_DATA (h)->keywords = newh.data->keywords;
-  mem_free (&newh.data);
+  p_delete(&newh.data);
 
   return s;
 }
@@ -889,7 +891,7 @@ static int msg_fetch_header (CONTEXT * ctx, IMAP_HEADER * h, char *buf,
   return rc;
 }
 
-#if USE_HCACHE
+#ifdef USE_HCACHE
 static size_t imap_hcache_keylen (const char *fn)
 {
   return str_len (fn);