workaround a stupid issue in how decoding is performed in mutt *sigh*
[apps/madmutt.git] / crypt.cpkg
index 0dded60..8fde1ab 100644 (file)
@@ -326,7 +326,7 @@ static gpgme_ctx_t create_gpgme_context(int for_smime)
     if (err) {
         mutt_error(_("error creating gpgme context: %s\n"),
                    gpgme_strerror(err));
-        sleep(2);
+        mutt_sleep(2);
         mutt_exit(1);
     }
     if (!for_smime)
@@ -335,7 +335,7 @@ static gpgme_ctx_t create_gpgme_context(int for_smime)
     err = gpgme_set_protocol(ctx, GPGME_PROTOCOL_CMS);
     if (err) {
         mutt_error(_("error enabling CMS protocol: %s\n"), gpgme_strerror(err));
-        sleep(2);
+        mutt_sleep(2);
         mutt_exit(1);
     }
     return ctx;
@@ -352,7 +352,7 @@ static gpgme_data_t create_gpgme_data(void)
     if (err) {
         mutt_error(_("error creating gpgme data object: %s\n"),
                    gpgme_strerror(err));
-        sleep(2);
+        mutt_sleep(2);
         mutt_exit(1);
     }
     return data;
@@ -470,7 +470,7 @@ static int data_object_to_stream(gpgme_data_t data, FILE *fp)
 static char *data_object_to_tempfile(gpgme_data_t data, FILE **ret_fp)
 {
     int err;
-    char tempfile[_POSIX_PATH_MAX];
+    char tempfile[_POSIX_PATH_MAX], buf[BUFSIZ];
     FILE *fp;
     ssize_t nread = 0;
 
@@ -482,24 +482,21 @@ static char *data_object_to_tempfile(gpgme_data_t data, FILE **ret_fp)
 
     err = ((gpgme_data_seek (data, 0, SEEK_SET) == -1)
            ? gpgme_error_from_errno (errno) : 0);
-    if (!err) {
-        char buf[4096];
+    if (err) {
+        mutt_perror(_("Can't create temporary file"));
+        goto error;
+    }
 
-        while ((nread = gpgme_data_read(data, buf, sizeof(buf)))) {
-            if (fwrite (buf, nread, 1, fp) != 1) {
-                mutt_perror (_("Can't create temporary file"));
-                m_fclose(&fp);
-                unlink (tempfile);
-                return NULL;
-            }
+    while ((nread = gpgme_data_read(data, buf, sizeof(buf)))) {
+        if (fwrite (buf, nread, 1, fp) != 1) {
+            mutt_perror (_("Can't create temporary file"));
+            goto error;
         }
     }
 
     if (nread == -1) {
         mutt_error (_("error reading data object: %s\n"), gpgme_strerror (err));
-        unlink (tempfile);
-        m_fclose(&fp);
-        return NULL;
+        goto error;
     }
     if (ret_fp) {
         rewind(fp);
@@ -508,6 +505,11 @@ static char *data_object_to_tempfile(gpgme_data_t data, FILE **ret_fp)
         m_fclose(&fp);
     }
     return m_strdup(tempfile);
+
+  error:
+    m_fclose(&fp);
+    unlink (tempfile);
+    return NULL;
 }