use my own APIS for headers, parameters and so on
[apps/madmutt.git] / imap / message.c
index 8423a5c..518718f 100644 (file)
 #include <stdlib.h>
 #include <ctype.h>
 
+#include <lib-lib/mem.h>
+#include <lib-lib/ascii.h>
+#include <lib-lib/str.h>
+#include <lib-lib/buffer.h>
+
 #include "mutt.h"
-#include "ascii.h"
-#include "buffer.h"
 #include "mutt_curses.h"
 #include "imap_private.h"
 #include "message.h"
@@ -30,9 +33,8 @@
 #include "pgp.h"
 #endif
 
-#include "lib/mem.h"
-#include "lib/intl.h"
-#include "lib/str.h"
+#include <lib-lib/macros.h>
+#include <lib-lib/file.h>
 #include "lib/debug.h"
 
 #if HAVE_STDINT_H
@@ -48,7 +50,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 +75,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,7 +118,7 @@ int imap_read_headers (IMAP_DATA * idata, int msgbegin, int msgend)
   idata->reopen &= ~IMAP_NEWMAIL_PENDING;
   idata->newMailCount = 0;
 
-#if USE_HCACHE
+#ifdef USE_HCACHE
   if ((hc = mutt_hcache_open (HeaderCache, ctx->path))) {
 
     snprintf (buf, sizeof (buf),
@@ -130,8 +132,8 @@ int imap_read_headers (IMAP_DATA * idata, int msgbegin, int msgend)
         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));
+      p_clear(&h, 1);
+      h.data = p_new(IMAP_HEADER_DATA, 1);
       do {
         mfhrc = 0;
 
@@ -174,7 +176,7 @@ int imap_read_headers (IMAP_DATA * idata, int msgbegin, int msgend)
 
         rewind (fp);
 
-        mem_free (&uid_validity);
+        p_delete(&uid_validity);
 
       }
       while ((rc != IMAP_CMD_OK) && ((mfhrc == -1) ||
@@ -221,8 +223,8 @@ 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));
+    p_clear(&h, 1);
+    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
@@ -245,7 +247,7 @@ int imap_read_headers (IMAP_DATA * idata, int msgbegin, int msgend)
       fputs ("\n\n", fp);
 
       /* update context with message header */
-      ctx->hdrs[msgno] = mutt_new_header ();
+      ctx->hdrs[msgno] = header_new();
 
       ctx->hdrs[msgno]->index = h.sid - 1;
       if (h.sid != ctx->msgcount + 1)
@@ -270,7 +272,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);
@@ -282,9 +284,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;
@@ -300,7 +302,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 */
 
@@ -345,7 +347,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);
     }
   }
 
@@ -354,9 +356,9 @@ int imap_fetch_message (MESSAGE * msg, CONTEXT * ctx, int msgno)
 
   cache->uid = HEADER_DATA (h)->uid;
   mutt_mktemp (path);
-  cache->path = str_dup (path);
+  cache->path = m_strdup(path);
   if (!(msg->fp = safe_fopen (path, "w+"))) {
-    mem_free (&cache->path);
+    p_delete(&cache->path);
     return -1;
   }
 
@@ -480,7 +482,7 @@ bail:
   safe_fclose (&msg->fp);
   if (cache->path) {
     unlink (cache->path);
-    mem_free (&cache->path);
+    p_delete(&cache->path);
   }
 
   return -1;
@@ -550,8 +552,7 @@ int imap_append_message (CONTEXT * ctx, MESSAGE * msg)
 
     debug_print (1, ("command failed: %s\n", idata->cmd.buf));
 
-    pc = idata->cmd.buf + SEQLEN;
-    SKIPWS (pc);
+    pc = vskipspaces(idata->cmd.buf + SEQLEN);
     pc = imap_next_word (pc);
     mutt_error ("%s", pc);
     mutt_sleep (1);
@@ -586,19 +587,18 @@ int imap_append_message (CONTEXT * ctx, MESSAGE * msg)
     char *pc;
 
     debug_print (1, ("command failed: %s\n", idata->cmd.buf));
-    pc = idata->cmd.buf + SEQLEN;
-    SKIPWS (pc);
+    pc = vskipspaces(idata->cmd.buf + SEQLEN);
     pc = imap_next_word (pc);
     mutt_error ("%s", pc);
     mutt_sleep (1);
     goto fail;
   }
 
-  mem_free (&mx.mbox);
+  p_delete(&mx.mbox);
   return 0;
 
 fail:
-  mem_free (&mx.mbox);
+  p_delete(&mx.mbox);
   return -1;
 }
 
@@ -640,8 +640,8 @@ int imap_copy_messages (CONTEXT * ctx, HEADER * h, char *dest, int delete)
 
   imap_fix_path (idata, mx.mbox, mbox, sizeof (mbox));
 
-  memset (&sync_cmd, 0, sizeof (sync_cmd));
-  memset (&cmd, 0, sizeof (cmd));
+  p_clear(&sync_cmd, 1);
+  p_clear(&cmd, 1);
   mutt_buffer_addstr (&cmd, "UID COPY ");
 
   /* Null HEADER* means copy tagged messages */
@@ -740,18 +740,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;
 }
 
@@ -769,8 +769,8 @@ void imap_add_keywords (char *s, HEADER * h, LIST * mailbox_flags,
 
   while (keywords) {
     if (msg_has_flag (mailbox_flags, keywords->data)) {
-      str_cat (s, slen, keywords->data);
-      str_cat (s, slen, " ");
+      m_strcat(s, slen, keywords->data);
+      m_strcat(s, slen, " ");
     }
     keywords = keywords->next;
   }
@@ -782,7 +782,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,12 +793,12 @@ char *imap_set_flags (IMAP_DATA * idata, HEADER * h, char *s)
   IMAP_HEADER newh;
   unsigned char readonly;
 
-  memset (&newh, 0, sizeof (newh));
-  newh.data = mem_calloc (1, sizeof (IMAP_HEADER_DATA));
+  p_clear(&newh, 1);
+  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;
   }
 
@@ -824,7 +824,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;
 }
@@ -890,10 +890,10 @@ 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);
+  return m_strlen(fn);
 }
 
 /* msg_fetch_header: import IMAP FETCH response into an IMAP_HEADER.
@@ -949,7 +949,7 @@ static int msg_has_flag (LIST * flag_list, const char *flag)
 
   flag_list = flag_list->next;
   while (flag_list) {
-    if (!ascii_strncasecmp (flag_list->data, flag, str_len (flag_list->data)))
+    if (!ascii_strncasecmp (flag_list->data, flag, m_strlen(flag_list->data)))
       return 1;
 
     flag_list = flag_list->next;
@@ -968,22 +968,20 @@ static int msg_parse_fetch (IMAP_HEADER * h, char *s)
     return -1;
 
   while (*s) {
-    SKIPWS (s);
+    s = vskipspaces(s);
 
     if (ascii_strncasecmp ("FLAGS", s, 5) == 0) {
       if ((s = msg_parse_flags (h, s)) == NULL)
         return -1;
     }
     else if (ascii_strncasecmp ("UID", s, 3) == 0) {
-      s += 3;
-      SKIPWS (s);
+      s = vskipspaces(s + 3);
       h->data->uid = (unsigned int) atoi (s);
 
       s = imap_next_word (s);
     }
     else if (ascii_strncasecmp ("INTERNALDATE", s, 12) == 0) {
-      s += 12;
-      SKIPWS (s);
+      s = vskipspaces(s + 12);
       if (*s != '\"') {
         debug_print (1, ("bogus INTERNALDATE entry: %s\n", s));
         return -1;
@@ -999,8 +997,7 @@ static int msg_parse_fetch (IMAP_HEADER * h, char *s)
       h->received = imap_parse_date (tmp);
     }
     else if (ascii_strncasecmp ("RFC822.SIZE", s, 11) == 0) {
-      s += 11;
-      SKIPWS (s);
+      s = vskipspaces(s + 11);
       ptmp = tmp;
       while (isdigit ((unsigned char) *s))
         *ptmp++ = *s++;
@@ -1034,8 +1031,7 @@ static char *msg_parse_flags (IMAP_HEADER * h, char *s)
     debug_print (1, ("not a FLAGS response: %s\n", s));
     return NULL;
   }
-  s += 5;
-  SKIPWS (s);
+  s = vskipspaces(s + 5);
   if (*s != '(') {
     debug_print (1, ("bogus FLAGS response: %s\n", s));
     return NULL;
@@ -1079,7 +1075,7 @@ static char *msg_parse_flags (IMAP_HEADER * h, char *s)
       mutt_add_list (h->data->keywords, flag_word);
       *s = ctmp;
     }
-    SKIPWS (s);
+    s = vskipspaces(s);
   }
 
   /* wrap up, or note bad flags response */