changeset 1884:4a8bc12e7017

(generate-file-autoloads): If no buffer was visiting FILE when we started, kill the buffer we create.
author Roland McGrath <roland@gnu.org>
date Wed, 17 Feb 1993 21:30:21 +0000
parents b707809f29bb
children 9e79ffe97d5b
files lisp/emacs-lisp/autoload.el
diffstat 1 files changed, 66 insertions(+), 59 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/autoload.el	Wed Feb 17 20:34:20 1993 +0000
+++ b/lisp/emacs-lisp/autoload.el	Wed Feb 17 21:30:21 1993 +0000
@@ -1,6 +1,6 @@
 ;;; autoload.el --- maintain autoloads in loaddefs.el.
 
-;;; Copyright (C) 1991, 1992 Free Software Foundation, Inc.
+;;; Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
 ;;;
 ;; Author: Roland McGrath <roland@gnu.ai.mit.edu>
 ;; Keyword: internal
@@ -96,7 +96,6 @@
 are used."
   (interactive "fGenerate autoloads for file: ")
   (let ((outbuf (current-buffer))
-	(inbuf (find-file-noselect file))
 	(autoloads-done '())
 	(load-name (let ((name (file-name-nondirectory file)))
 		     (if (string-match "\\.elc?$" name)
@@ -105,6 +104,7 @@
 	(print-length nil)
 	(floating-output-format "%20e")
 	(done-any nil)
+	(visited (get-file-buffer file))
 	output-end)
 
     ;; If the autoload section we create here uses an absolute
@@ -122,63 +122,70 @@
 	  (setq file (substring file (length default-directory)))))
 
     (message "Generating autoloads for %s..." file)
-    (save-excursion
-      (set-buffer inbuf)
-      (save-excursion
-	(save-restriction
-	  (widen)
-	  (goto-char (point-min))
-	  (while (not (eobp))
-	    (skip-chars-forward " \t\n\f")
-	    (cond ((looking-at (regexp-quote generate-autoload-cookie))
-		   (search-forward generate-autoload-cookie)
-		   (skip-chars-forward " \t")
-		   (setq done-any t)
-		   (if (eolp)
-		       ;; Read the next form and make an autoload.
-		       (let* ((form (prog1 (read (current-buffer))
-				      (forward-line 1)))
-			      (autoload (make-autoload form load-name))
-			      (doc-string-elt (get (car-safe form)
-						   'doc-string-elt)))
-			 (if autoload
-			     (setq autoloads-done (cons (nth 1 form)
-							autoloads-done))
-			   (setq autoload form))
-			 (if (and doc-string-elt
-				  (stringp (nth doc-string-elt autoload)))
-			     ;; We need to hack the printing because the
-			     ;; doc-string must be printed specially for
-			     ;; make-docfile (sigh).
-			     (let* ((p (nthcdr (1- doc-string-elt) autoload))
-				    (elt (cdr p)))
-			       (setcdr p nil)
-			       (princ "\n(" outbuf)
-			       (mapcar (function (lambda (elt)
-						   (prin1 elt outbuf)
-						   (princ " " outbuf)))
-				       autoload)
-			       (princ "\"\\\n" outbuf)
-			       (princ (substring (prin1-to-string (car elt)) 1)
-				      outbuf)
-			       (if (null (cdr elt))
-				   (princ ")" outbuf)
-				 (princ " " outbuf)
-				 (princ (substring (prin1-to-string (cdr elt))
-						   1)
-					outbuf))
-			       (terpri outbuf))
-			   (print autoload outbuf)))
-		     ;; Copy the rest of the line to the output.
-		     (let ((begin (point)))
-		       (forward-line 1)
-		       (princ (buffer-substring begin (point)) outbuf))))
-		  ((looking-at ";")
-		   ;; Don't read the comment.
-		   (forward-line 1))
-		  (t
-		   (forward-sexp 1)
-		   (forward-line 1))))))
+    (unwind-protect
+	(progn
+	  (set-buffer (find-file-noselect file))
+	  (save-excursion
+	    (save-restriction
+	      (widen)
+	      (goto-char (point-min))
+	      (while (not (eobp))
+		(skip-chars-forward " \t\n\f")
+		(cond ((looking-at (regexp-quote generate-autoload-cookie))
+		       (search-forward generate-autoload-cookie)
+		       (skip-chars-forward " \t")
+		       (setq done-any t)
+		       (if (eolp)
+			   ;; Read the next form and make an autoload.
+			   (let* ((form (prog1 (read (current-buffer))
+					  (forward-line 1)))
+				  (autoload (make-autoload form load-name))
+				  (doc-string-elt (get (car-safe form)
+						       'doc-string-elt)))
+			     (if autoload
+				 (setq autoloads-done (cons (nth 1 form)
+							    autoloads-done))
+			       (setq autoload form))
+			     (if (and doc-string-elt
+				      (stringp (nth doc-string-elt autoload)))
+				 ;; We need to hack the printing because the
+				 ;; doc-string must be printed specially for
+				 ;; make-docfile (sigh).
+				 (let* ((p (nthcdr (1- doc-string-elt)
+						   autoload))
+					(elt (cdr p)))
+				   (setcdr p nil)
+				   (princ "\n(" outbuf)
+				   (mapcar (function (lambda (elt)
+						       (prin1 elt outbuf)
+						       (princ " " outbuf)))
+					   autoload)
+				   (princ "\"\\\n" outbuf)
+				   (princ (substring
+					   (prin1-to-string (car elt)) 1)
+					  outbuf)
+				   (if (null (cdr elt))
+				       (princ ")" outbuf)
+				     (princ " " outbuf)
+				     (princ (substring
+					     (prin1-to-string (cdr elt))
+					     1)
+					    outbuf))
+				   (terpri outbuf))
+			       (print autoload outbuf)))
+			 ;; Copy the rest of the line to the output.
+			 (let ((begin (point)))
+			   (forward-line 1)
+			   (princ (buffer-substring begin (point)) outbuf))))
+		      ((looking-at ";")
+		       ;; Don't read the comment.
+		       (forward-line 1))
+		      (t
+		       (forward-sexp 1)
+		       (forward-line 1)))))))
+      (or visited
+	  ;; We created this buffer, so we should kill it.
+	  (kill-buffer (current-buffer)))
       (set-buffer outbuf)
       (setq output-end (point-marker)))
     (if done-any