Synch to No Gnus 200401081739.
[elisp/gnus.git-] / lisp / pop3.el
index 2b1373e..ef87289 100644 (file)
@@ -225,6 +225,9 @@ Argument PORT specifies connecting port."
                         (+ 1 (or (string-match ">" response) -1)))))
       process)))
 
+(eval-when-compile
+  (autoload 'open-ssl-stream "ssl"))
+
 (defun pop3-open-ssl-stream-1 (name buffer host service extra-arg)
   (require 'ssl)
   (let* ((ssl-program-name
@@ -293,7 +296,8 @@ Return the response string if optional second argument RETURN is non-nil."
     (save-excursion
       (set-buffer (process-buffer process))
       (goto-char pop3-read-point)
-      (while (not (search-forward "\r\n" nil t))
+      (while (and (memq (process-status process) '(open run))
+                 (not (search-forward "\r\n" nil t)))
        (nnheader-accept-process-output process)
        (goto-char pop3-read-point))
       (setq match-end (point))
@@ -511,42 +515,22 @@ If NOW, use that time instead."
 ;; tree, `md5' might have been defined in w3/md5.el, ./lpath.el or one
 ;; of some other libraries and `md5' will accept only 3 arguments.  We
 ;; will deceive the byte-compiler not to say warnings.
+(eval-when-compile
+  (if (boundp 'byte-compile-function-environment)
+      (let ((def (assq 'md5 byte-compile-function-environment)))
+       (if def
+           (setcdr def '(lambda (object &optional start end
+                                        coding-system noerror)))
+         (setq byte-compile-function-environment
+               (cons '(md5 . (lambda (object &optional start end
+                                             coding-system noerror)))
+                     byte-compile-function-environment))))))
+
+;; Note that `pop3-md5' should never encode a given string to use for the
+;; apop authentication, so we should specify the `binary' coding system.
 (eval-and-compile
-  (if (fboundp 'eval-when)
-      ;; `eval-when' might not be provided when loading .el file.
-      (eval-when 'compile
-       (let ((def (assq 'md5 byte-compile-function-environment)))
-         (if def
-             (setcdr def '(lambda (object &optional start end
-                                          coding-system noerror)))
-           (setq byte-compile-function-environment
-                 (cons '(md5 . (lambda (object &optional start end
-                                               coding-system noerror)))
-                       byte-compile-function-environment)))))))
-
-;; Note that `pop3-md5' should never encode a given string to use for
-;; the apop authentication.
-(eval-and-compile
-  (if (fboundp 'md5)
-      (if (condition-case nil
-             (md5 "\
-Check whether the 4th argument CODING-SYSTEM is allowed"
-                  nil nil 'binary)
-           (error nil))
-         ;; Emacs 21 or XEmacs 21
-         ;; (md5 OBJECT &optional START END CODING-SYSTEM NOERROR)
-         (defun pop3-md5 (string)
-           (md5 string nil nil 'binary))
-       ;; The reason why the program reaches here:
-       ;; 1. XEmacs 20 is running and the built-in `md5' doesn't
-       ;;    allow the 4th argument.
-       ;; 2. `md5' has been defined by one of some lisp libraries.
-       ;; 3. This file is being compiled in the Gnus source tree,
-       ;;    and `md5' has been defined in lpath.el.
-       (defalias 'pop3-md5 'md5))
-    ;; The lisp function will be provided by FLIM or other libraries.
-    (autoload 'md5 "md5")
-    (defalias 'pop3-md5 'md5)))
+  (defalias 'pop3-md5 (lambda (string)
+                       (md5 string nil nil 'binary))))
 
 (defun pop3-apop (process user)
   "Send alternate authentication information to the server."
@@ -705,6 +689,7 @@ If msgno is invalid, return nil.  Otherwise, return a string."
     (set-buffer (process-buffer process))
     (goto-char start)
     (while (not (re-search-forward "^\\.\r\n" nil t))
+      ;; Fixme: Shouldn't depend on nnheader.
       (nnheader-accept-process-output process)
       (goto-char start))
     (setq pop3-read-point (point-marker))