some fixes, make mutt_decode_save_attachment coherent (always closes the
[apps/madmutt.git] / lib-crypt / crypt-gpgme.c
index 7e3495b..445dc77 100644 (file)
@@ -1012,7 +1012,7 @@ static void show_fingerprint (gpgme_key_t key, STATE * state)
   is_pgp = (key->protocol == GPGME_PROTOCOL_OpenPGP);
 
   bufsize = m_strlen(prefix) + m_strlen(s) * 4 + 2;
-  buf = xmalloc(bufsize);
+  buf = p_new(char, bufsize);
   m_strcpy(buf, bufsize, prefix);
   p = buf + m_strlen(buf);
   if (is_pgp && m_strlen(s) == 40) {     /* PGP v4 style formatted. */
@@ -1614,6 +1614,7 @@ static int pgp_check_traditional_one_body (FILE * fp, BODY * b,
   char tempfile[_POSIX_PATH_MAX];
   char buf[HUGE_STRING];
   FILE *tfp;
+  int tempfd;
 
   short sgn = 0;
   short enc = 0;
@@ -1624,13 +1625,13 @@ static int pgp_check_traditional_one_body (FILE * fp, BODY * b,
   if (tagged_only && !b->tagged)
     return 0;
 
-  mutt_mktemp (tempfile);
-  if (mutt_decode_save_attachment (fp, b, tempfile, 0, 0) != 0) {
+  tempfd = m_tempfd(tempfile, sizeof(tempfile), NONULL(Tempdir), NULL);
+  if (mutt_decode_save_attachment (fp, b, tempfd, 0) != 0) {
     unlink (tempfile);
     return 0;
   }
 
-  if ((tfp = fopen (tempfile, "r")) == NULL) {
+  if ((tfp = fopen(tempfile, "r")) == NULL) {
     unlink (tempfile);
     return 0;
   }
@@ -2126,8 +2127,8 @@ int smime_gpgme_application_handler (BODY * a, STATE * s)
 static const char *
 crypt_entry_fmt (char *dest, ssize_t destlen, char op,
                  const char *src, const char *prefix,
-                 const char *ifstring, const char *elsestring,
-                 unsigned long data, format_flag flags)
+                 const char *ifstr, const char *elstr,
+                 anytype data, format_flag flags)
 {
   char fmt[16];
   crypt_entry_t *entry;
@@ -2137,7 +2138,7 @@ crypt_entry_fmt (char *dest, ssize_t destlen, char op,
   const char *s = NULL;
   unsigned long val;
 
-  entry = (crypt_entry_t *) data;
+  entry = data.ptr;
   key = entry->key;
 
 /*    if (isupper ((unsigned char) op)) */
@@ -2150,7 +2151,7 @@ crypt_entry_fmt (char *dest, ssize_t destlen, char op,
   case '[':
     {
       const char *cp;
-      char buf2[SHORT_STRING], *p;
+      char buf2[STRING], *p;
       int do_locales;
       struct tm *tm;
       ssize_t len;
@@ -2308,11 +2309,10 @@ crypt_entry_fmt (char *dest, ssize_t destlen, char op,
     *dest = '\0';
   }
 
-  if (optional)
-    mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0);
-  else if (flags & M_FORMAT_OPTIONAL)
-    mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data, 0);
-  return (src);
+  if (flags & M_FORMAT_OPTIONAL)
+    m_strformat(dest, destlen, 0, optional ? ifstr: elstr,
+                mutt_attach_fmt, data, 0);
+  return src;
 }
 
 /* Used by the display fucntion to format a line. */
@@ -2324,8 +2324,8 @@ static void crypt_entry (char *s, ssize_t l, MUTTMENU * menu, int num)
   entry.key = key_table[num];
   entry.num = num + 1;
 
-  mutt_FormatString (s, l, NONULL (PgpEntryFormat), crypt_entry_fmt,
-                     (unsigned long) &entry, M_FORMAT_ARROWCURSOR);
+  m_strformat(s, l, COLS - SW, PgpEntryFormat, crypt_entry_fmt, &entry,
+              option(OPTARROWCURSOR) ? M_FORMAT_ARROWCURSOR : 0);
 }
 
 /* Compare two addresses and the keyid to be used for sorting. */
@@ -2517,7 +2517,7 @@ static const unsigned char *parse_dn_part (struct dn_array_s *array,
     if (!n || (n & 1))
       return NULL;              /* empty or odd number of digits */
     n /= 2;
-    p = xmalloc(n + 1);
+    p = p_new(unsigned char, n + 1);
     array->value = (char *) p;
     for (s1 = string; n; s1 += 2, n--)
       *p++ = xtoi_2 (s1);
@@ -2547,7 +2547,7 @@ static const unsigned char *parse_dn_part (struct dn_array_s *array,
         n++;
     }
 
-    p = xmalloc(n + 1);
+    p = p_new(unsigned char, n + 1);
     array->value = (char *) p;
     for (s = string; n; s++, n--) {
       if (*s == '\\') {
@@ -2701,7 +2701,7 @@ static void print_key_info (gpgme_key_t key, FILE * fp)
   const char *s = NULL, *s2 = NULL;
   time_t tt = 0;
   struct tm *tm;
-  char shortbuf[SHORT_STRING];
+  char shortbuf[STRING];
   unsigned long aval = 0;
   const char *delim;
   int is_pgp = 0;
@@ -3203,7 +3203,7 @@ static crypt_key_t *crypt_select_key (crypt_key_t * keys,
   crypt_key_t **key_table;
   MUTTMENU *menu;
   int i, done = 0;
-  char helpstr[SHORT_STRING], buf[LONG_STRING];
+  char helpstr[STRING], buf[LONG_STRING];
   crypt_key_t *k;
   int (*f) (const void *, const void *);
   int menu_to_use = 0;
@@ -3563,7 +3563,7 @@ static crypt_key_t *crypt_ask_for_key (char *tag,
                                        unsigned int app, int *forced_valid)
 {
   crypt_key_t *key;
-  char resp[SHORT_STRING];
+  char resp[STRING];
   struct crypt_cache *l = NULL;
   int dummy;
 
@@ -3649,9 +3649,7 @@ static char *find_keys (address_t * to, address_t * cc, address_t * bcc,
       last = &((*last)->next);
   }
 
-  if (fqdn)
-    rfc822_qualify (tmp, fqdn);
-
+  rfc822_qualify(tmp, fqdn);
   address_list_uniq(tmp);
 
   for (p = tmp; p; p = p->next) {
@@ -3670,8 +3668,7 @@ static char *find_keys (address_t * to, address_t * cc, address_t * bcc,
         /* check for e-mail address */
         if ((t = strchr (keyID, '@')) &&
             (addr = rfc822_parse_adrlist (NULL, keyID))) {
-          if (fqdn)
-            rfc822_qualify (addr, fqdn);
+          rfc822_qualify(addr, fqdn);
           q = addr;
         }
         else {
@@ -3758,7 +3755,7 @@ void smime_gpgme_init (void)
 static int gpgme_send_menu (HEADER * msg, int *redraw, int is_smime)
 {
   crypt_key_t *p;
-  char input_signas[SHORT_STRING];
+  char input_signas[STRING];
   int choice;
 
   if (msg->security & APPLICATION_PGP)