missing 'WHERE' aka missing extern.
[apps/madmutt.git] / pgp.c
diff --git a/pgp.c b/pgp.c
index 5580c69..da199ce 100644 (file)
--- a/pgp.c
+++ b/pgp.c
@@ -109,14 +109,8 @@ int pgp_use_gpg_agent (void) {
   if (!option (OPTUSEGPGAGENT) || !getenv ("GPG_AGENT_INFO"))
     return 0;
 
-  if ((tty = ttyname(0))) {
-    char tmp[SHORT_STRING];
-    snprintf (tmp, sizeof (tmp), "GPG_TTY=%s", tty);
-    putenv (tmp);
-#if 0
-    setenv("GPG_TTY", tty, 0);
-#endif
-  }
+  if ((tty = ttyname(0)))
+    setenv ("GPG_TTY", tty, 0);
 
   return 1;
 }
@@ -239,11 +233,13 @@ static void pgp_copy_clearsigned (FILE * fpin, STATE * s, char *charset)
 
 int pgp_application_pgp_handler (BODY * m, STATE * s)
 {
+  int could_not_decrypt = 0;
   int needpass = -1, pgp_keyblock = 0;
   int c = 1;
   int clearsign = 0, rv, rc;
   long start_pos = 0;
-  long bytes, last_pos, offset;
+  long bytes;
+  off_t last_pos, offset;
   char buf[HUGE_STRING];
   char outfile[_POSIX_PATH_MAX];
   char tmpfname[_POSIX_PATH_MAX];
@@ -260,14 +256,14 @@ int pgp_application_pgp_handler (BODY * m, STATE * s)
 
   rc = 0;                       /* silence false compiler warning if (s->flags & M_DISPLAY) */
 
-  fseek (s->fpin, m->offset, 0);
+  fseeko (s->fpin, m->offset, 0);
   last_pos = m->offset;
 
   for (bytes = m->length; bytes > 0;) {
     if (fgets (buf, sizeof (buf), s->fpin) == NULL)
       break;
 
-    offset = ftell (s->fpin);
+    offset = ftello (s->fpin);
     bytes -= (offset - last_pos);       /* don't rely on str_len(buf) */
     last_pos = offset;
 
@@ -305,7 +301,7 @@ int pgp_application_pgp_handler (BODY * m, STATE * s)
 
       fputs (buf, tmpfp);
       while (bytes > 0 && fgets (buf, sizeof (buf) - 1, s->fpin) != NULL) {
-        offset = ftell (s->fpin);
+        offset = ftello (s->fpin);
         bytes -= (offset - last_pos);   /* don't rely on str_len(buf) */
         last_pos = offset;
 
@@ -381,17 +377,22 @@ int pgp_application_pgp_handler (BODY * m, STATE * s)
         }
 
         /* treat empty result as sign of failure */
+        /* TODO: maybe on failure mutt should include the original undecoded text. */
         if (pgpout) {
           rewind (pgpout);
           c = fgetc (pgpout);
           ungetc (c, pgpout);
         }
         if (!clearsign && (!pgpout || c == EOF)) {
-            mutt_error _("Could not decrypt PGP message");
-            mutt_sleep (1);
-            pgp_void_passphrase ();
-            rc = -1;
-            goto out;
+          could_not_decrypt = 1;
+          pgp_void_passphrase ();
+        }
+
+        if (could_not_decrypt && !(s->flags & M_DISPLAY)) {
+          mutt_error _("Could not decrypt PGP message");
+          mutt_sleep (1);
+          rc = -1;
+          goto out;
         }
       }
 
@@ -431,7 +432,10 @@ int pgp_application_pgp_handler (BODY * m, STATE * s)
         state_putc ('\n', s);
         if (needpass) {
           state_attach_puts (_("[-- END PGP MESSAGE --]\n"), s);
-          mutt_message _("PGP message successfully decrypted.");
+          if (could_not_decrypt)
+            mutt_error _("Could not decrypt PGP message.");
+          else
+            mutt_message _("PGP message successfully decrypted.");
         }
         else if (pgp_keyblock)
           state_attach_puts (_("[-- END PGP PUBLIC KEY BLOCK --]\n"), s);
@@ -567,7 +571,7 @@ int pgp_verify_one (BODY * sigbdy, STATE * s, const char *tempfile)
     return -1;
   }
 
-  fseek (s->fpin, sigbdy->offset, 0);
+  fseeko (s->fpin, sigbdy->offset, 0);
   mutt_copy_bytes (s->fpin, fp, sigbdy->length);
   fclose (fp);
 
@@ -749,7 +753,7 @@ BODY *pgp_decrypt_part (BODY * a, STATE * s, FILE * fpout, BODY * p)
    * the temporary file.
    */
 
-  fseek (s->fpin, a->offset, 0);
+  fseeko (s->fpin, a->offset, 0);
   mutt_copy_bytes (s->fpin, pgptmp, a->length);
   fclose (pgptmp);