Use signed size parameter in post_entry()
[apps/madmutt.git] / postpone.c
index d19bacc..0d97216 100644 (file)
 #endif
 
 #include <lib-lib/mem.h>
+#include <lib-lib/str.h>
+#include <lib-lib/ascii.h>
 #include <lib-lib/macros.h>
+#include <lib-lib/file.h>
+#include <lib-lib/mapping.h>
+
+#include <lib-mime/mime.h>
 
 #include "mutt.h"
-#include "ascii.h"
 #include "enter.h"
 #include "handler.h"
 #include "mutt_menu.h"
 #include "rfc1524.h"
-#include "mime.h"
-#include "mapping.h"
 #include "sort.h"
 #include "thread.h"
 #include "mx.h"
-#ifdef USE_IMAP
-#include "imap.h"
-#include "imap/mx_imap.h"
-#endif
-#include "mutt_crypt.h"
+#include <lib-crypt/crypt.h>
+
+#include <imap/imap.h>
+#include <imap/mx_imap.h>
 
-#include "lib/str.h"
 #include "lib/debug.h"
 
 #include <ctype.h>
@@ -80,7 +81,6 @@ int mutt_num_postponed (int force)
   if (!Postponed)
     return 0;
 
-#ifdef USE_IMAP
   /* LastModify is useless for IMAP */
   if (imap_is_magic (Postponed, NULL) == M_IMAP) {
     if (force) {
@@ -96,7 +96,6 @@ int mutt_num_postponed (int force)
     }
     return PostCount;
   }
-#endif
 
   if (stat (Postponed, &st) == -1) {
     PostCount = 0;
@@ -148,7 +147,7 @@ void mutt_update_num_postponed (void)
   UpdateNumPostponed = 1;
 }
 
-static void post_entry (char *s, size_t slen, MUTTMENU * menu, int entry)
+static void post_entry (char *s, ssize_t slen, MUTTMENU * menu, int entry)
 {
   CONTEXT *ctx = (CONTEXT *) menu->data;
 
@@ -297,8 +296,7 @@ int mutt_get_postponed (CONTEXT * ctx, HEADER * hdr, HEADER ** cur, char *fcc,
       if (ctx) {
         /* if a mailbox is currently open, look to see if the orignal message
            the user attempted to reply to is in this mailbox */
-        p = tmp->data + 18;
-        SKIPWS (p);
+        p = vskipspaces(tmp->data + 18);
         if (!ctx->id_hash)
           ctx->id_hash = mutt_make_id_hash (ctx);
         *cur = hash_find (ctx->id_hash, p);
@@ -317,9 +315,8 @@ int mutt_get_postponed (CONTEXT * ctx, HEADER * hdr, HEADER ** cur, char *fcc,
         code |= SENDREPLY;
     }
     else if (ascii_strncasecmp ("X-Mutt-Fcc:", tmp->data, 11) == 0) {
-      p = tmp->data + 11;
-      SKIPWS (p);
-      strfcpy (fcc, p, fcclen);
+      p = vskipspaces(tmp->data + 11);
+      m_strcpy(fcc, fcclen, p);
       mutt_pretty_mailbox (fcc);
 
       /* remove the X-Mutt-Fcc: header field */
@@ -332,11 +329,10 @@ int mutt_get_postponed (CONTEXT * ctx, HEADER * hdr, HEADER ** cur, char *fcc,
       mutt_free_list (&tmp);
       tmp = next;
     }
-    else if ((WithCrypto & APPLICATION_PGP)
-             && (str_ncmp ("Pgp:", tmp->data, 4) == 0       /* this is generated
-                                                                 * by old mutt versions
-                                                                 */
-                 || str_ncmp ("X-Mutt-PGP:", tmp->data, 11) == 0)) {
+    else if ((m_strncmp("Pgp:", tmp->data, 4) == 0       /* this is generated
+                                                          * by old mutt versions
+                                                          */
+                 || m_strncmp("X-Mutt-PGP:", tmp->data, 11) == 0)) {
       hdr->security = mutt_parse_crypt_hdr (strchr (tmp->data, ':') + 1, 1);
       hdr->security |= APPLICATION_PGP;
 
@@ -350,8 +346,7 @@ int mutt_get_postponed (CONTEXT * ctx, HEADER * hdr, HEADER ** cur, char *fcc,
       mutt_free_list (&tmp);
       tmp = next;
     }
-    else if ((WithCrypto & APPLICATION_SMIME)
-             && str_ncmp ("X-Mutt-SMIME:", tmp->data, 13) == 0) {
+    else if (m_strncmp("X-Mutt-SMIME:", tmp->data, 13) == 0) {
       hdr->security = mutt_parse_crypt_hdr (strchr (tmp->data, ':') + 1, 1);
       hdr->security |= APPLICATION_SMIME;
 
@@ -367,7 +362,7 @@ int mutt_get_postponed (CONTEXT * ctx, HEADER * hdr, HEADER ** cur, char *fcc,
     }
 
 #ifdef MIXMASTER
-    else if (str_ncmp ("X-Mutt-Mix:", tmp->data, 11) == 0) {
+    else if (m_strncmp("X-Mutt-Mix:", tmp->data, 11) == 0) {
       char *t;
 
       mutt_free_list (&hdr->chain);
@@ -405,12 +400,7 @@ int mutt_parse_crypt_hdr (char *p, int set_signas)
   char pgp_sign_as[LONG_STRING] = "\0", *q;
   char smime_cryptalg[LONG_STRING] = "\0";
 
-  if (!WithCrypto)
-    return 0;
-
-  SKIPWS (p);
-  for (; *p; p++) {
-
+  for (p = vskipspaces(p); *p; p++) {
     switch (*p) {
     case 'e':
     case 'E':
@@ -489,11 +479,11 @@ int mutt_parse_crypt_hdr (char *p, int set_signas)
   }
 
   /* the cryptalg field must not be empty */
-  if ((WithCrypto & APPLICATION_SMIME) && *smime_cryptalg)
-    str_replace (&SmimeCryptAlg, smime_cryptalg);
+  if (*smime_cryptalg)
+    m_strreplace(&SmimeCryptAlg, smime_cryptalg);
 
-  if ((WithCrypto & APPLICATION_PGP) && (set_signas || *pgp_sign_as))
-    str_replace (&PgpSignAs, pgp_sign_as);
+  if (set_signas || *pgp_sign_as)
+    m_strreplace(&PgpSignAs, pgp_sign_as);
 
   return pgp;
 }
@@ -511,7 +501,7 @@ int mutt_prepare_template (FILE * fp, CONTEXT * ctx, HEADER * newhdr,
   int rv = -1;
   STATE s;
 
-  memset (&s, 0, sizeof (s));
+  p_clear(&s, 1);
 
   if (!fp && (msg = mx_open_message (ctx, hdr->msgno)) == NULL)
     return (-1);
@@ -534,10 +524,10 @@ int mutt_prepare_template (FILE * fp, CONTEXT * ctx, HEADER * newhdr,
 
   /* decrypt pgp/mime encoded messages */
 
-  if ((WithCrypto & (APPLICATION_PGP | APPLICATION_SMIME) & hdr->security)
-      && mutt_is_multipart_encrypted (newhdr->content)) {
-    int ccap =
-      WithCrypto & (APPLICATION_PGP | APPLICATION_SMIME) & hdr->security;
+  if ((APPLICATION_PGP | APPLICATION_SMIME) & hdr->security
+      && mutt_is_multipart_encrypted (newhdr->content))
+  {
+    int ccap = (APPLICATION_PGP | APPLICATION_SMIME) & hdr->security;
     newhdr->security |= ENCRYPT | ccap;
     if (!crypt_valid_passphrase (ccap))
       goto err;
@@ -551,7 +541,7 @@ int mutt_prepare_template (FILE * fp, CONTEXT * ctx, HEADER * newhdr,
         || b == NULL) {
     err:
       mx_close_message (&msg);
-      mutt_free_envelope (&newhdr->env);
+      envelope_delete(&newhdr->env);
       mutt_free_body (&newhdr->content);
       mutt_error _("Decryption failed.");
 
@@ -569,15 +559,13 @@ int mutt_prepare_template (FILE * fp, CONTEXT * ctx, HEADER * newhdr,
    * resending messages 
    */
 
-  if (WithCrypto && mutt_is_multipart_signed (newhdr->content)) {
+  if (mutt_is_multipart_signed (newhdr->content)) {
     newhdr->security |= SIGN;
-    if ((WithCrypto & APPLICATION_PGP)
-        &&
-        ascii_strcasecmp (mutt_get_parameter
+    if (ascii_strcasecmp (mutt_get_parameter
                           ("protocol", newhdr->content->parameter),
                           "application/pgp-signature") == 0)
       newhdr->security |= APPLICATION_PGP;
-    else if ((WithCrypto & APPLICATION_SMIME))
+    else
       newhdr->security |= APPLICATION_SMIME;
 
     /* destroy the signature */
@@ -610,8 +598,8 @@ int mutt_prepare_template (FILE * fp, CONTEXT * ctx, HEADER * newhdr,
 
     file[0] = '\0';
     if (b->filename) {
-      strfcpy (file, b->filename, sizeof (file));
-      b->d_filename = str_dup (b->filename);
+      m_strcpy(file, sizeof(file), b->filename);
+      b->d_filename = m_strdup(b->filename);
     }
     else {
       /* avoid Content-Disposition: header with temporary filename */
@@ -639,15 +627,14 @@ int mutt_prepare_template (FILE * fp, CONTEXT * ctx, HEADER * newhdr,
       goto bail;
 
 
-    if ((WithCrypto & APPLICATION_PGP)
-        && (mutt_is_application_pgp (b) & (ENCRYPT | SIGN))) {
+    if (mutt_is_application_pgp (b) & (ENCRYPT | SIGN)) {
 
       mutt_body_handler (b, &s);
 
       newhdr->security |= mutt_is_application_pgp (newhdr->content);
 
       b->type = TYPETEXT;
-      str_replace (&b->subtype, "plain");
+      m_strreplace(&b->subtype, "plain");
       mutt_delete_parameter ("x-action", &b->parameter);
     }
     else
@@ -656,7 +643,7 @@ int mutt_prepare_template (FILE * fp, CONTEXT * ctx, HEADER * newhdr,
     if (safe_fclose (&s.fpout) != 0)
       goto bail;
 
-    str_replace (&b->filename, file);
+    m_strreplace(&b->filename, file);
     b->unlink = 1;
 
     mutt_stamp_attachment (b);
@@ -669,12 +656,9 @@ int mutt_prepare_template (FILE * fp, CONTEXT * ctx, HEADER * newhdr,
   /* Fix encryption flags. */
 
   /* No inline if multipart. */
-  if (WithCrypto && (newhdr->security & INLINE) && newhdr->content->next)
+  if ((newhdr->security & INLINE) && newhdr->content->next)
     newhdr->security &= ~INLINE;
 
-  /* Do we even support multiple mechanisms? */
-  newhdr->security &= WithCrypto | ~(APPLICATION_PGP | APPLICATION_SMIME);
-
   /* Theoretically, both could be set. Take the one the user wants to set by default. */
   if ((newhdr->security & APPLICATION_PGP)
       && (newhdr->security & APPLICATION_SMIME)) {
@@ -695,7 +679,7 @@ bail:
     mx_close_message (&msg);
 
   if (rv == -1) {
-    mutt_free_envelope (&newhdr->env);
+    envelope_delete(&newhdr->env);
     mutt_free_body (&newhdr->content);
   }