/[emacs]/emacs/lisp/gnus/pgg.el
ViewVC logotype

Diff of /emacs/lisp/gnus/pgg.el

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by miles, Sat Sep 4 13:13:43 2004 UTC revision 1.3 by miles, Wed Jun 1 05:07:06 2005 UTC
# Line 1  Line 1 
1  ;;; pgg.el --- glue for the various PGP implementations.  ;;; pgg.el --- glue for the various PGP implementations.
2    
3  ;; Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.  ;; Copyright (C) 1999, 2000, 2003, 2005 Free Software Foundation, Inc.
4    
5  ;; Author: Daiki Ueno <ueno@unixuser.org>  ;; Author: Daiki Ueno <ueno@unixuser.org>
6  ;; Created: 1999/10/28  ;; Created: 1999/10/28
# Line 97  Line 97 
97        (read-passwd prompt)))        (read-passwd prompt)))
98    
99  (eval-when-compile  (eval-when-compile
100    (defvar itimer-process)    (defmacro pgg-run-at-time-1 (time repeat function args)
101    (defvar itimer-timer)      (when (featurep 'xemacs)
102    (autoload 'delete-itimer "itimer")        (if (condition-case nil
103    (autoload 'itimer-driver-start "itimer")                (let ((delete-itimer 'delete-itimer)
104    (autoload 'itimer-value "itimer")                      (itimer-driver-start 'itimer-driver-start)
105    (autoload 'set-itimer-function "itimer")                      (itimer-value 'itimer-value)
106    (autoload 'set-itimer-function-arguments "itimer")                      (start-itimer 'start-itimer))
107    (autoload 'set-itimer-restart "itimer")                  (unless (or (symbol-value 'itimer-process)
108    (autoload 'start-itimer "itimer"))                              (symbol-value 'itimer-timer))
109                      (funcall itimer-driver-start))
110                    ;; Check whether there is a bug to which the difference of
111                    ;; the present time and the time when the itimer driver was
112                    ;; woken up is subtracted from the initial itimer value.
113                    (let* ((inhibit-quit t)
114                           (ctime (current-time))
115                           (itimer-timer-last-wakeup
116                            (prog1
117                                ctime
118                              (setcar ctime (1- (car ctime)))))
119                           (itimer-list nil)
120                           (itimer (funcall start-itimer "pgg-run-at-time"
121                                            'ignore 5)))
122                      (sleep-for 0.1) ;; Accept the timeout interrupt.
123                      (prog1
124                          (> (funcall itimer-value itimer) 0)
125                        (funcall delete-itimer itimer))))
126                (error nil))
127              `(let ((time ,time))
128                 (apply #'start-itimer "pgg-run-at-time"
129                        ,function (if time (max time 1e-9) 1e-9)
130                        ,repeat nil t ,args)))
131          `(let ((time ,time)
132                 (itimers (list nil)))
133             (setcar
134              itimers
135              (apply #'start-itimer "pgg-run-at-time"
136                     (lambda (itimers repeat function &rest args)
137                       (let ((itimer (car itimers)))
138                         (if repeat
139                             (progn
140                               (set-itimer-function
141                                itimer
142                                (lambda (itimer repeat function &rest args)
143                                  (set-itimer-restart itimer repeat)
144                                  (set-itimer-function itimer function)
145                                  (set-itimer-function-arguments itimer args)
146                                  (apply function args)))
147                               (set-itimer-function-arguments
148                                itimer
149                                (append (list itimer repeat function) args)))
150                           (set-itimer-function
151                            itimer
152                            (lambda (itimer function &rest args)
153                              (delete-itimer itimer)
154                              (apply function args)))
155                           (set-itimer-function-arguments
156                            itimer
157                            (append (list itimer function) args)))))
158                     1e-9 (if time (max time 1e-9) 1e-9)
159                     nil t itimers ,repeat ,function ,args))))))
160    
161  (eval-and-compile  (eval-and-compile
162    (defalias    (if (featurep 'xemacs)
163      'pgg-run-at-time        (defun pgg-run-at-time (time repeat function &rest args)
164      (if (featurep 'xemacs)          "Emulating function run as `run-at-time'.
         (if (condition-case nil  
                 (progn  
                   (unless (or itimer-process itimer-timer)  
                     (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 (start-itimer "pgg-run-at-time" 'ignore 5)))  
                     (sleep-for 0.1) ;; Accept the timeout interrupt.  
                     (prog1  
                         (> (itimer-value itimer) 0)  
                       (delete-itimer itimer))))  
               (error nil))  
             (lambda (time repeat function &rest args)  
               "Emulating function run as `run-at-time'.  
165  TIME should be nil meaning now, or a number of seconds from now.  TIME should be nil meaning now, or a number of seconds from now.
166  Return an itimer object which can be used in either `delete-itimer'  Return an itimer object which can be used in either `delete-itimer'
167  or `cancel-timer'."  or `cancel-timer'."
168                (apply #'start-itimer "pgg-run-at-time"          (pgg-run-at-time-1 time repeat function args))
169                       function (if time (max time 1e-9) 1e-9)      (defalias 'pgg-run-at-time 'run-at-time)))
                      repeat nil t args))  
           (lambda (time repeat function &rest args)  
             "Emulating function run as `run-at-time' in the right way.  
 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'."  
             (let ((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)))))  
       'run-at-time)))  
170    
171  (defun pgg-add-passphrase-cache (key passphrase)  (defun pgg-add-passphrase-cache (key passphrase)
172    (setq key (pgg-truncate-key-identifier key))    (setq key (pgg-truncate-key-identifier key))

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26