Merge from emacs--devo--0
[gnus] / lisp / netrc.el
index ca219de..9c7f017 100644 (file)
@@ -1,6 +1,6 @@
 ;;; netrc.el --- .netrc parsing functionality
 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;;   2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 (defun netrc-parse (file)
   (interactive "fFile to Parse: ")
   "Parse FILE and return a list of all entries in the file."
-  (when (file-exists-p file)
-    (with-temp-buffer
-      (let ((tokens '("machine" "default" "login"
-                     "password" "account" "macdef" "force"
-                     "port"))
-           (encryption-model (when (netrc-bound-and-true-p encrypt-file-alist)
-                               (encrypt-find-model file)))
-           alist elem result pair)
-       (if encryption-model
-           (encrypt-insert-file-contents file encryption-model)
-         (insert-file-contents file))
-       (goto-char (point-min))
-       ;; Go through the file, line by line.
-       (while (not (eobp))
-         (narrow-to-region (point) (point-at-eol))
-         ;; For each line, get the tokens and values.
+  (if (listp file)
+      file
+    (when (file-exists-p file)
+      (with-temp-buffer
+       (let ((tokens '("machine" "default" "login"
+                       "password" "account" "macdef" "force"
+                       "port"))
+             (encryption-model (when (netrc-bound-and-true-p encrypt-file-alist)
+                                 (encrypt-find-model file)))
+             alist elem result pair)
+         (if encryption-model
+             (encrypt-insert-file-contents file encryption-model)
+           (insert-file-contents file))
+         (goto-char (point-min))
+         ;; Go through the file, line by line.
          (while (not (eobp))
-           (skip-chars-forward "\t ")
-           ;; Skip lines that begin with a "#".
-           (if (eq (char-after) ?#)
-               (goto-char (point-max))
-             (unless (eobp)
-               (setq elem
-                     (if (= (following-char) ?\")
-                         (read (current-buffer))
-                       (buffer-substring
-                        (point) (progn (skip-chars-forward "^\t ")
-                                       (point)))))
-               (cond
-                ((equal elem "macdef")
-                 ;; We skip past the macro definition.
-                 (widen)
-                 (while (and (zerop (forward-line 1))
-                             (looking-at "$")))
-                 (narrow-to-region (point) (point)))
-                ((member elem tokens)
-                 ;; Tokens that don't have a following value are ignored,
-                 ;; except "default".
-                 (when (and pair (or (cdr pair)
-                                     (equal (car pair) "default")))
-                   (push pair alist))
-                 (setq pair (list elem)))
-                (t
-                 ;; Values that haven't got a preceding token are ignored.
-                 (when pair
-                   (setcdr pair elem)
-                   (push pair alist)
-                   (setq pair nil)))))))
-         (when alist
-           (push (nreverse alist) result))
-         (setq alist nil
-               pair nil)
-         (widen)
-         (forward-line 1))
-       (nreverse result)))))
+           (narrow-to-region (point) (point-at-eol))
+           ;; For each line, get the tokens and values.
+           (while (not (eobp))
+             (skip-chars-forward "\t ")
+             ;; Skip lines that begin with a "#".
+             (if (eq (char-after) ?#)
+                 (goto-char (point-max))
+               (unless (eobp)
+                 (setq elem
+                       (if (= (following-char) ?\")
+                           (read (current-buffer))
+                         (buffer-substring
+                          (point) (progn (skip-chars-forward "^\t ")
+                                         (point)))))
+                 (cond
+                  ((equal elem "macdef")
+                   ;; We skip past the macro definition.
+                   (widen)
+                   (while (and (zerop (forward-line 1))
+                               (looking-at "$")))
+                   (narrow-to-region (point) (point)))
+                  ((member elem tokens)
+                   ;; Tokens that don't have a following value are ignored,
+                   ;; except "default".
+                   (when (and pair (or (cdr pair)
+                                       (equal (car pair) "default")))
+                     (push pair alist))
+                   (setq pair (list elem)))
+                  (t
+                   ;; Values that haven't got a preceding token are ignored.
+                   (when pair
+                     (setcdr pair elem)
+                     (push pair alist)
+                     (setq pair nil)))))))
+           (when alist
+             (push (nreverse alist) result))
+           (setq alist nil
+                 pair nil)
+           (widen)
+           (forward-line 1))
+         (nreverse result))))))
 
 (defun netrc-machine (list machine &optional port defaultport)
   "Return the netrc values from LIST for MACHINE or for the default entry.