changeset 42238:e79842fc9855

(directory-free-space-program): Mention file-system-info in the doc string. (get-free-disk-space): New function; code moved from insert-directory. (insert-directory): Call get-free-disk-space to get the amount of free space.
author Eli Zaretskii <eliz@gnu.org>
date Fri, 21 Dec 2001 15:20:42 +0000
parents 0ec3fdf1c45e
children 1e736b882b4f
files lisp/files.el
diffstat 1 files changed, 46 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/files.el	Fri Dec 21 14:12:30 2001 +0000
+++ b/lisp/files.el	Fri Dec 21 15:20:42 2001 +0000
@@ -3561,7 +3561,10 @@
 The value of this variable must be just a command name or file name;
 if you want to specify options, use `directory-free-space-args'.
 
-A value of nil disables this feature."
+A value of nil disables this feature.
+
+If the function `file-system-info' is defined, it is always used in
+preference to the program given by this variable."
   :type '(choice (string :tag "Program") (const :tag "None" nil))
   :group 'dired)
 
@@ -3570,6 +3573,42 @@
   :type 'string
   :group 'dired)
 
+(defun get-free-disk-space (dir)
+  "Return the mount of free space on directory DIR's file system.
+The result is a string that gives the number of free 1KB blocks,
+or nil if the system call or the program which retrieve the infornmation
+fail.
+
+This function calls `file-system-info' if it is available, or invokes the
+program specified by `directory-free-space-program' if that is non-nil."
+  ;; Try to find the number of free blocks.  Non-Posix systems don't
+  ;; always have df, but might have an equivalent system call.
+  (if (fboundp 'file-system-info)
+      (let ((fsinfo (file-system-info dir)))
+	(if fsinfo
+	    (format "%.0f" (/ (nth 2 fsinfo) 1024))))
+    (save-match-data
+      (with-temp-buffer
+	(when (and directory-free-space-program
+		   (zerop (call-process directory-free-space-program
+					nil t nil
+					directory-free-space-args
+					dir)))
+	  ;; Usual format is a header line followed by a line of
+	  ;; numbers.
+	  (goto-char (point-min))
+	  (forward-line 1)
+	  (if (not (eobp))
+	      (progn
+		;; Move to the end of the "available blocks" number.
+		(skip-chars-forward "^ \t")
+		(forward-word 3)
+		;; Copy it into AVAILABLE.
+		(let ((end (point)))
+		  (forward-word -1)
+		  (buffer-substring (point) end)))))))))
+
+
 ;; insert-directory
 ;; - must insert _exactly_one_line_ describing FILE if WILDCARD and
 ;;   FULL-DIRECTORY-P is nil.
@@ -3689,38 +3728,12 @@
 	    (goto-char (point-min))
 	    ;; First find the line to put it on.
 	    (when (re-search-forward "^total" nil t)
-	      ;; Try to find the number of free blocks.
-	      ;; Non-Posix systems don't always have df,
-	      ;; but might have an equivalent system call.
-	      (if (fboundp 'file-system-info)
-		  (let ((fsinfo (file-system-info ".")))
-		    (if fsinfo
-			(setq available (format "%.0f" (/ (nth 2 fsinfo) 1024)))))
-		(save-match-data
-		  (with-temp-buffer
-		    (when (and directory-free-space-program
-			       (zerop (call-process directory-free-space-program
-						    nil t nil
-						    directory-free-space-args
-						    ".")))
-		      ;; Usual format is a header line
-		      ;; followed by a line of numbers.
-		      (goto-char (point-min))
-		      (forward-line 1)
-		      (if (not (eobp))
-			  (progn
-			    ;; Move to the end of the "available blocks" number.
-			    (skip-chars-forward "^ \t")
-			    (forward-word 3)
-			    ;; Copy it into AVAILABLE.
-			    (let ((end (point)))
-			      (forward-word -1)
-			      (setq available (buffer-substring (point) end)))))))))
-	      (when available
-		;; Replace "total" with "used", to avoid confusion.
-		(replace-match "used")
-		(end-of-line)
-		(insert " available " available)))))))))
+	      (let ((available (get-free-disk-space ".")))
+		(when available
+		  ;; Replace "total" with "used", to avoid confusion.
+		  (replace-match "used")
+		  (end-of-line)
+		  (insert " available " available))))))))))
 
 (defun insert-directory-safely (file switches
 				     &optional wildcard full-directory-p)