]> git.eshelyaron.com Git - emacs.git/commitdiff
* files.el (get-free-disk-space): Search more robustly for "available" column.
authorChong Yidong <cyd@stupidchicken.com>
Sun, 5 Sep 2010 19:03:20 +0000 (15:03 -0400)
committerChong Yidong <cyd@stupidchicken.com>
Sun, 5 Sep 2010 19:03:20 +0000 (15:03 -0400)
Suggested by Ehud Karni <ehud@unix.mvs.co.il>:
http://lists.gnu.org/archive/html/emacs-devel/2010-09/msg00163.html

lisp/ChangeLog
lisp/files.el

index 69626e2e45589d054f2c4f811fddc5f14baea7df..026b05a723102c4d30ff22088a86640c40d81ed6 100644 (file)
@@ -1,3 +1,9 @@
+2010-09-05  Chong Yidong  <cyd@stupidchicken.com>
+
+       * files.el (get-free-disk-space): Search more robustly for
+       "available" column.  Suggested by Ehud Karni
+       <ehud@unix.mvs.co.il>.
+
 2010-09-05  Juanma Barranquero  <lekktu@gmail.com>
 
        * international/uni-bidi.el:
index 73a0c5c9e24d21e91940cd7fc7fd0cf02564ea40..41bd9bd9c25edc4796c347eda2a6c3d9237e111b 100644 (file)
@@ -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