aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChong Yidong <[email protected]>2010-09-05 15:03:20 -0400
committerChong Yidong <[email protected]>2010-09-05 15:03:20 -0400
commit93a596e11b4b10e99636fce9eae2bcdf45e20c17 (patch)
tree9522847060f2c80090c748a74f43f27b8f972494
parent3cf628e8ece16ccf92ab01b2e8930de4eac621e9 (diff)
* files.el (get-free-disk-space): Search more robustly for "available" column.
Suggested by Ehud Karni <[email protected]>: http://lists.gnu.org/archive/html/emacs-devel/2010-09/msg00163.html
-rw-r--r--lisp/ChangeLog6
-rw-r--r--lisp/files.el41
2 files changed, 29 insertions, 18 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 69626e2e45..026b05a723 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2010-09-05 Chong Yidong <[email protected]>
+
+ * files.el (get-free-disk-space): Search more robustly for
+ "available" column. Suggested by Ehud Karni
+
2010-09-05 Juanma Barranquero <[email protected]>
* international/uni-bidi.el:
diff --git a/lisp/files.el b/lisp/files.el
index 73a0c5c9e2..41bd9bd9c2 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -5563,12 +5563,14 @@ preference to the program given by this variable."
(defun get-free-disk-space (dir)
"Return the amount 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 information
-fail. It returns also nil when DIR is a remote directory.
-
-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."
+The return value is a string describing the amount of free
+space (normally, the number of free 1KB blocks).
+
+This function calls `file-system-info' if it is available, or
+invokes the program specified by `directory-free-space-program'
+and `directory-free-space-args'. If the system call or program
+is unsuccessful, or if DIR is a remote directory, this function
+returns nil."
(unless (file-remote-p dir)
;; Try to find the number of free blocks. Non-Posix systems don't
;; always have df, but might have an equivalent system call.
@@ -5588,19 +5590,22 @@ program specified by `directory-free-space-program' if that is non-nil."
directory-free-space-args
dir)
0)))
- ;; Usual format is a header line followed by a line of
- ;; numbers.
+ ;; Usual format is as follows:
+ ;; Filesystem ... Used Available Capacity ...
+ ;; /dev/sda6 ...48106535 35481255 10669850 ...
(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))))))))))
+ (when (re-search-forward " +Avail[^ \n]*"
+ (line-end-position) t)
+ (let ((beg (match-beginning 0))
+ (end (match-end 0))
+ str)
+ (forward-line 1)
+ (setq str
+ (buffer-substring-no-properties
+ (+ beg (point) (- (point-min)))
+ (+ end (point) (- (point-min)))))
+ (when (string-match "\\` *\\([^ ]+\\)" str)
+ (match-string 1 str))))))))))
;; The following expression replaces `dired-move-to-filename-regexp'.
(defvar directory-listing-before-filename-regexp