Fixed error message.
[elisp/epg.git] / epg.el
diff --git a/epg.el b/epg.el
index dc61938..0cf9722 100644 (file)
--- a/epg.el
+++ b/epg.el
@@ -485,6 +485,7 @@ This function is for internal use only."
                       args)))
       (set-default-file-modes orig-mode))
     (set-process-filter process #'epg-process-filter)
+    (set-process-sentinel process #'epg-process-sentinel)
     (epg-context-set-process context process)))
 
 (defun epg-process-filter (process input)
@@ -516,6 +517,21 @@ This function is for internal use only."
          (forward-line))
        (setq epg-read-point (point)))))
 
+(defun epg-process-sentinel (process status)
+  (if (and (buffer-live-p (process-buffer process))
+          (not (equal status "finished\n")))
+      (save-excursion
+       (set-buffer (process-buffer process))
+       ;; gpg process exited abnormally, but we have not received an
+       ;; error response from it.  Set it here.
+       (unless (epg-context-result-for epg-context 'error)
+         (if (string-match "\\`exited abnormally with code \\(.*\\)\n" status)
+             (epg-context-set-result-for
+              epg-context 'error
+              (list (cons 'exit (string-to-number (match-string 1 status)))))
+           (epg-context-set-result-for epg-context 'error
+                                   (list (cons 'signal status))))))))
+
 (defun epg-read-output (context)
   (with-temp-buffer
     (if (fboundp 'set-buffer-multibyte)
@@ -1219,9 +1235,14 @@ Otherwise, it makes a normal signature."
                                       (epg-make-temp-file "epg-output")))
        (epg-start-sign context (epg-make-data-from-file plain) mode)
        (epg-wait-for-completion context)
-       (if (epg-context-result-for context 'error)
-           (error "Sign failed: %S"
-                  (epg-context-result-for context 'error)))
+       (if (epg-context-result-for context 'sign)
+           (if (epg-context-result-for context 'error)
+               (message "Sign error: %S"
+                        (epg-context-result-for context 'error)))
+         (if (epg-context-result-for context 'error)
+             (error "Sign failed: %S"
+                    (epg-context-result-for context 'error))
+           (error "Sign failed")))
        (unless signature
          (epg-read-output context)))
     (unless signature
@@ -1241,9 +1262,14 @@ Otherwise, it makes a normal signature."
        (epg-start-sign context (epg-make-data-from-string plain) mode)
        (epg-flush context)
        (epg-wait-for-completion context)
-       (if (epg-context-result-for context 'error)
-           (error "Sign failed: %S"
-                  (epg-context-result-for context 'error)))
+       (if (epg-context-result-for context 'sign)
+           (if (epg-context-result-for context 'error)
+               (message "Sign error: %S"
+                        (epg-context-result-for context 'error)))
+         (if (epg-context-result-for context 'error)
+             (error "Sign failed: %S"
+                    (epg-context-result-for context 'error))
+           (error "Sign failed")))
        (epg-read-output context))
     (epg-delete-output-file context)
     (epg-reset context)))
@@ -1304,6 +1330,15 @@ If RECIPIENTS is nil, it performs symmetric encryption."
        (epg-start-encrypt context (epg-make-data-from-file plain)
                           recipients sign always-trust)
        (epg-wait-for-completion context)
+       (if sign
+           (if (epg-context-result-for context 'sign)
+               (if (epg-context-result-for context 'error)
+                   (message "Sign error: %S"
+                            (epg-context-result-for context 'error)))
+             (if (epg-context-result-for context 'error)
+                 (error "Sign failed: %S"
+                        (epg-context-result-for context 'error))
+               (error "Sign failed"))))
        (if (epg-context-result-for context 'error)
            (error "Encrypt failed: %S"
                   (epg-context-result-for context 'error)))
@@ -1326,6 +1361,15 @@ If RECIPIENTS is nil, it performs symmetric encryption."
                           recipients sign always-trust)
        (epg-flush context)
        (epg-wait-for-completion context)
+       (if sign
+           (if (epg-context-result-for context 'sign)
+               (if (epg-context-result-for context 'error)
+                   (message "Sign error: %S"
+                            (epg-context-result-for context 'error)))
+             (if (epg-context-result-for context 'error)
+                 (error "Sign failed: %S"
+                        (epg-context-result-for context 'error))
+               (error "Sign failed"))))
        (if (epg-context-result-for context 'error)
            (error "Encrypt failed: %S"
                   (epg-context-result-for context 'error)))