Rocco Rutte:
[apps/madmutt.git] / commands.c
index c17c0ce..2a4c7be 100644 (file)
@@ -13,6 +13,9 @@
 #endif
 
 #include "mutt.h"
+#include "enter.h"
+#include "recvattach.h"
+#include "ascii.h"
 #include "mutt_curses.h"
 #include "mutt_menu.h"
 #include "mime.h"
@@ -92,7 +95,7 @@ int mutt_display_message (HEADER * cur)
     }
   }
 
-  if (!Pager || mutt_strcmp (Pager, "builtin") == 0)
+  if (!Pager || str_cmp (Pager, "builtin") == 0)
     builtin = 1;
   else {
     mutt_make_string (buf, sizeof (buf), NONULL (PagerFmt), Context, cur);
@@ -164,6 +167,7 @@ int mutt_display_message (HEADER * cur)
 
   if (WithCrypto) {
     /* update crypto information for this message */
+    cur->security &= ~(GOODSIGN|BADSIGN);
     cur->security |= crypt_query (cur->content);
 
     /* Remove color cache for this message, in case there
@@ -196,7 +200,7 @@ int mutt_display_message (HEADER * cur)
       else if (cur->security & PARTSIGN)
         mutt_message (_
                       ("Warning: Part of this message has not been signed."));
-      else
+      else if (cur->security & SIGN)
         mutt_message (_("PGP signature could NOT be verified."));
     }
 
@@ -261,7 +265,7 @@ void ci_bounce_message (HEADER * h, int *redraw)
 
   if (mutt_addrlist_to_idna (adr, &err) < 0) {
     mutt_error (_("Bad IDN: '%s'"), err);
-    FREE (&err);
+    mem_free (&err);
     rfc822_free_address (&adr);
     return;
   }
@@ -278,10 +282,10 @@ void ci_bounce_message (HEADER * h, int *redraw)
     mutt_format_string (prompt, sizeof (prompt),
                         0, COLS - extra_space, 0, 0,
                         prompt, sizeof (prompt), 0);
-    safe_strcat (prompt, sizeof (prompt), "...?");
+    str_cat (prompt, sizeof (prompt), "...?");
   }
   else
-    safe_strcat (prompt, sizeof (prompt), "?");
+    str_cat (prompt, sizeof (prompt), "?");
 
   if (query_quadoption (OPT_BOUNCE, prompt) != M_YES) {
     rfc822_free_address (&adr);
@@ -569,7 +573,7 @@ void mutt_enter_command (void)
   err.dsize = sizeof (errbuf);
   memset (&token, 0, sizeof (token));
   r = mutt_parse_rc_line (buffer, &token, &err);
-  FREE (&token.data);
+  mem_free (&token.data);
   if (errbuf[0]) {
     /* since errbuf could potentially contain printf() sequences in it,
        we must call mutt_error() in this fashion so that vsprintf()
@@ -641,30 +645,31 @@ static void set_copy_flags (HEADER * hdr, int decode, int decrypt,
   }
 }
 
-void _mutt_save_message (HEADER * h, CONTEXT * ctx, int delete, int decode,
-                         int decrypt)
-{
+int _mutt_save_message (HEADER * h, CONTEXT * ctx, int delete, int decode,
+                         int decrypt) {
   int cmflags, chflags;
+  int rc;
 
   set_copy_flags (h, decode, decrypt, &cmflags, &chflags);
 
   if (decode || decrypt)
     mutt_parse_mime_message (Context, h);
 
-  if (mutt_append_message (ctx, Context, h, cmflags, chflags) == 0) {
-    if (delete) {
-      mutt_set_flag (Context, h, M_DELETE, 1);
-      if (option (OPTDELETEUNTAG))
-        mutt_set_flag (Context, h, M_TAG, 0);
-    }
+  if ((rc = mutt_append_message (ctx, Context, h, cmflags, chflags)) != 0)
+    return rc;
+
+  if (delete) {
+    mutt_set_flag (Context, h, M_DELETE, 1);
+    if (option (OPTDELETEUNTAG))
+      mutt_set_flag (Context, h, M_TAG, 0);
     mutt_set_flag (Context, h, M_APPENDED, 1);
   }
+  return (0);
 }
 
 /* returns 0 if the copy/save was successful, or -1 on error/abort */
 int mutt_save_message (HEADER * h, int delete,
-                       int decode, int decrypt, int *redraw)
-{
+                       int decode, int decrypt, int *redraw) {
   int i, need_buffy_cleanup;
   int need_passphrase = 0, app = 0;
   char prompt[SHORT_STRING], buf[_POSIX_PATH_MAX];
@@ -736,7 +741,7 @@ int mutt_save_message (HEADER * h, int delete,
   /* This is an undocumented feature of ELM pointed out to me by Felix von
    * Leitner <leitner@prz.fu-berlin.de>
    */
-  if (mutt_strcmp (buf, ".") == 0)
+  if (str_cmp (buf, ".") == 0)
     strfcpy (buf, LastSaveFolder, sizeof (buf));
   else
     strfcpy (LastSaveFolder, buf, sizeof (LastSaveFolder));
@@ -771,15 +776,21 @@ int mutt_save_message (HEADER * h, int delete,
 #endif
 
   if (mx_open_mailbox (buf, M_APPEND, &ctx) != NULL) {
-    if (h)
-      _mutt_save_message (h, &ctx, delete, decode, decrypt);
-    else {
+    if (h) {
+      if (_mutt_save_message (h, &ctx, delete, decode, decrypt) != 0) {
+        mx_close_mailbox (&ctx, NULL);
+        return (-1);
+      }
+    } else {
       for (i = 0; i < Context->vcount; i++) {
         if (Context->hdrs[Context->v2r[i]]->tagged) {
           mutt_message_hook (Context, Context->hdrs[Context->v2r[i]],
                              M_MESSAGEHOOK);
-          _mutt_save_message (Context->hdrs[Context->v2r[i]], &ctx, delete,
-                              decode, decrypt);
+          if (_mutt_save_message (Context->hdrs[Context->v2r[i]], &ctx, delete,
+                                  decode, decrypt) != 0) {
+            mx_close_mailbox (&ctx, NULL);
+            return (-1);
+          }
         }
       }
     }
@@ -861,7 +872,7 @@ int mutt_update_list_file (char *filename, char *section, char *key,
       while (*c && *c != '\n')
         c++;
       c[0] = 0;                 /* strip EOL */
-      if (!strncmp (buf, "#: ", 3) && !safe_strcasecmp (buf + 3, section))
+      if (!strncmp (buf, "#: ", 3) && !str_casecmp (buf + 3, section))
         done++;
     }
     if (r != EOF && !done) {
@@ -889,8 +900,8 @@ int mutt_update_list_file (char *filename, char *section, char *key,
       done++;
       break;
     }
-    else if (key && !strncmp (buf, key, mutt_strlen (key)) &&
-             (!*key || buf[mutt_strlen (key)] == ' ')) {
+    else if (key && !strncmp (buf, key, str_len (key)) &&
+             (!*key || buf[str_len (key)] == ' ')) {
       c = buf;
       ext = 0;
       while (*c && (*c != '\r') && (*c != '\n'))
@@ -934,7 +945,7 @@ int mutt_update_list_file (char *filename, char *section, char *key,
 
 void mutt_version (void)
 {
-  mutt_message ("Mutt-ng %s (%s) based on Mutt 1.5.9", MUTT_VERSION, ReleaseDate);
+  mutt_message (mutt_make_version ());
 }
 
 void mutt_edit_content_type (HEADER * h, BODY * b, FILE * fp)
@@ -959,7 +970,7 @@ void mutt_edit_content_type (HEADER * h, BODY * b, FILE * fp)
     size_t l;
 
     for (p = b->parameter; p; p = p->next) {
-      l = mutt_strlen (buf);
+      l = str_len (buf);
 
       rfc822_cat (tmp, sizeof (tmp), p->value, MimeSpecials);
       snprintf (buf + l, sizeof (buf) - l, "; %s=%s", p->attribute, tmp);
@@ -972,7 +983,7 @@ void mutt_edit_content_type (HEADER * h, BODY * b, FILE * fp)
 
   /* clean up previous junk */
   mutt_free_parameter (&b->parameter);
-  FREE (&b->subtype);
+  mem_free (&b->subtype);
 
   mutt_parse_content_type (buf, b);