Wait for the end of the LIST ACTIVE command, if we're using that.
[gnus] / lisp / pgg.el
index 13a5148..9929421 100644 (file)
@@ -1,19 +1,19 @@
 ;;; pgg.el --- glue for the various PGP implementations.
 
-;; Copyright (C) 1999, 2000, 2002, 2003, 2004,
-;;   2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2000, 2002-2011 Free Software Foundation, Inc.
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Symmetric encryption added by: Sascha Wilde <wilde@sha-bang.de>
 ;; Created: 1999/10/28
 ;; Keywords: PGP
+;; Obsolete-since: 24.1
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
-
-;;; Commentary:
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Code:
 
 
 ;; Don't merge these two `eval-when-compile's.
 (eval-when-compile
+  ;; For Emacs <22.2 and XEmacs.
+  (unless (fboundp 'declare-function) (defmacro declare-function (&rest r)))
   (require 'cl))
 
 ;;; @ utility functions
 ;;;
 
+(eval-when-compile
+  (when (featurep 'xemacs)
+    (defmacro pgg-run-at-time-1 (time repeat function args)
+      (if (condition-case nil
+             (let ((delete-itimer 'delete-itimer)
+                   (itimer-driver-start 'itimer-driver-start)
+                   (itimer-value 'itimer-value)
+                   (start-itimer 'start-itimer))
+               (unless (or (symbol-value 'itimer-process)
+                           (symbol-value 'itimer-timer))
+                 (funcall itimer-driver-start))
+               ;; Check whether there is a bug to which the difference of
+               ;; the present time and the time when the itimer driver was
+               ;; woken up is subtracted from the initial itimer value.
+               (let* ((inhibit-quit t)
+                      (ctime (current-time))
+                      (itimer-timer-last-wakeup
+                       (prog1
+                           ctime
+                         (setcar ctime (1- (car ctime)))))
+                      (itimer-list nil)
+                      (itimer (funcall start-itimer "pgg-run-at-time"
+                                       'ignore 5)))
+                 (sleep-for 0.1) ;; Accept the timeout interrupt.
+                 (prog1
+                     (> (funcall itimer-value itimer) 0)
+                   (funcall delete-itimer itimer))))
+           (error nil))
+         `(let ((time ,time))
+            (apply #'start-itimer "pgg-run-at-time"
+                   ,function (if time (max time 1e-9) 1e-9)
+                   ,repeat nil t ,args))
+       `(let ((time ,time)
+              (itimers (list nil)))
+          (setcar
+           itimers
+           (apply #'start-itimer "pgg-run-at-time"
+                  (lambda (itimers repeat function &rest args)
+                    (let ((itimer (car itimers)))
+                      (if repeat
+                          (progn
+                            (set-itimer-function
+                             itimer
+                             (lambda (itimer repeat function &rest args)
+                               (set-itimer-restart itimer repeat)
+                               (set-itimer-function itimer function)
+                               (set-itimer-function-arguments itimer args)
+                               (apply function args)))
+                            (set-itimer-function-arguments
+                             itimer
+                             (append (list itimer repeat function) args)))
+                        (set-itimer-function
+                         itimer
+                         (lambda (itimer function &rest args)
+                           (delete-itimer itimer)
+                           (apply function args)))
+                        (set-itimer-function-arguments
+                         itimer
+                         (append (list itimer function) args)))))
+                  1e-9 (if time (max time 1e-9) 1e-9)
+                  nil t itimers ,repeat ,function ,args)))))))
+
+(eval-and-compile
+  (if (featurep 'xemacs)
+      (progn
+       (defun pgg-run-at-time (time repeat function &rest args)
+         "Emulating function run as `run-at-time'.
+TIME should be nil meaning now, or a number of seconds from now.
+Return an itimer object which can be used in either `delete-itimer'
+or `cancel-timer'."
+         (pgg-run-at-time-1 time repeat function args))
+       (defun pgg-cancel-timer (timer)
+         "Emulate cancel-timer for xemacs."
+         (let ((delete-itimer 'delete-itimer))
+           (funcall delete-itimer timer))))
+    (defalias 'pgg-run-at-time 'run-at-time)
+    (defalias 'pgg-cancel-timer 'cancel-timer)))
+
 (defun pgg-invoke (func scheme &rest args)
   (progn
     (require (intern (format "pgg-%s" scheme)))
@@ -153,6 +229,8 @@ regulate cache behavior."
   (defun pgg-clear-string (string)
     (fillarray string ?_)))
 
+(declare-function pgg-clear-string "pgg" (string))
+
 (defun pgg-remove-passphrase-from-cache (key &optional notruncate)
   "Omit passphrase associated with KEY in time-limited passphrase cache.
 
@@ -177,85 +255,6 @@ regulate cache behavior."
       (pgg-cancel-timer old-timer)
       (unintern interned-timer-key pgg-pending-timers))))
 
-(eval-when-compile
-  (defmacro pgg-run-at-time-1 (time repeat function args)
-    (when (featurep 'xemacs)
-      (if (condition-case nil
-             (let ((delete-itimer 'delete-itimer)
-                   (itimer-driver-start 'itimer-driver-start)
-                   (itimer-value 'itimer-value)
-                   (start-itimer 'start-itimer))
-               (unless (or (symbol-value 'itimer-process)
-                           (symbol-value 'itimer-timer))
-                 (funcall itimer-driver-start))
-               ;; Check whether there is a bug to which the difference of
-               ;; the present time and the time when the itimer driver was
-               ;; woken up is subtracted from the initial itimer value.
-               (let* ((inhibit-quit t)
-                      (ctime (current-time))
-                      (itimer-timer-last-wakeup
-                       (prog1
-                           ctime
-                         (setcar ctime (1- (car ctime)))))
-                      (itimer-list nil)
-                      (itimer (funcall start-itimer "pgg-run-at-time"
-                                       'ignore 5)))
-                 (sleep-for 0.1) ;; Accept the timeout interrupt.
-                 (prog1
-                     (> (funcall itimer-value itimer) 0)
-                   (funcall delete-itimer itimer))))
-           (error nil))
-         `(let ((time ,time))
-            (apply #'start-itimer "pgg-run-at-time"
-                   ,function (if time (max time 1e-9) 1e-9)
-                   ,repeat nil t ,args)))
-      `(let ((time ,time)
-            (itimers (list nil)))
-        (setcar
-         itimers
-         (apply #'start-itimer "pgg-run-at-time"
-                (lambda (itimers repeat function &rest args)
-                  (let ((itimer (car itimers)))
-                    (if repeat
-                        (progn
-                          (set-itimer-function
-                           itimer
-                           (lambda (itimer repeat function &rest args)
-                             (set-itimer-restart itimer repeat)
-                             (set-itimer-function itimer function)
-                             (set-itimer-function-arguments itimer args)
-                             (apply function args)))
-                          (set-itimer-function-arguments
-                           itimer
-                           (append (list itimer repeat function) args)))
-                      (set-itimer-function
-                       itimer
-                       (lambda (itimer function &rest args)
-                         (delete-itimer itimer)
-                         (apply function args)))
-                      (set-itimer-function-arguments
-                       itimer
-                       (append (list itimer function) args)))))
-                1e-9 (if time (max time 1e-9) 1e-9)
-                nil t itimers ,repeat ,function ,args))))))
-
-(eval-and-compile
-  (if (featurep 'xemacs)
-      (progn
-        (defun pgg-run-at-time (time repeat function &rest args)
-          "Emulating function run as `run-at-time'.
-TIME should be nil meaning now, or a number of seconds from now.
-Return an itimer object which can be used in either `delete-itimer'
-or `cancel-timer'."
-          (pgg-run-at-time-1 time repeat function args))
-        (defun pgg-cancel-timer (timer)
-          "Emulate cancel-timer for xemacs."
-          (let ((delete-itimer 'delete-itimer))
-            (funcall delete-itimer timer)))
-        )
-    (defalias 'pgg-run-at-time 'run-at-time)
-    (defalias 'pgg-cancel-timer 'cancel-timer)))
-
 (defmacro pgg-convert-lbt-region (start end lbt)
   `(let ((pgg-conversion-end (set-marker (make-marker) ,end)))
      (goto-char ,start)
@@ -468,8 +467,8 @@ signer's public key from `pgg-default-keyserver-address'."
          (if (null signature) nil
            (with-temp-buffer
              (buffer-disable-undo)
-             (if (fboundp 'set-buffer-multibyte)
-                 (set-buffer-multibyte nil))
+             (unless (featurep 'xemacs)
+               (set-buffer-multibyte nil))
              (insert-file-contents signature)
              (cdr (assq 2 (pgg-decode-armor-region
                            (point-min)(point-max)))))))
@@ -595,5 +594,4 @@ within the region."
 
 (provide 'pgg)
 
-;;; arch-tag: 9cc705dd-1e6a-4c90-8dce-c3561f9a2cf4
 ;;; pgg.el ends here