Function: tramp-smb-handle-file-system-info

tramp-smb-handle-file-system-info is a byte-compiled function defined in tramp-smb.el.gz.

Signature

(tramp-smb-handle-file-system-info FILENAME)

Documentation

Like file-system-info for Tramp files.

Source Code

;; Defined in /usr/src/emacs/lisp/net/tramp-smb.el.gz
(defun tramp-smb-handle-file-system-info (filename)
  "Like `file-system-info' for Tramp files."
  (ignore-errors
    (unless (file-directory-p filename)
      (setq filename (file-name-directory filename)))
    (with-parsed-tramp-file-name (expand-file-name filename) nil
      (when (tramp-smb-get-share v)
	(tramp-message v 5 "file system info: %s" localname)
	(tramp-smb-send-command
	 v (format "du %s/*" (tramp-smb-get-localname v)))
	(with-current-buffer (tramp-get-connection-buffer v)
	  (let (total avail blocksize)
	    (goto-char (point-min))
	    (forward-line)
	    (when (looking-at
		   (concat "[[:space:]]*\\([[:digit:]]+\\)"
			   " blocks of size \\([[:digit:]]+\\)"
			   "\\. \\([[:digit:]]+\\) blocks available"))
	      (setq blocksize (string-to-number (match-string 2))
		    total (* blocksize (string-to-number (match-string 1)))
		    avail (* blocksize (string-to-number (match-string 3)))))
	    (forward-line)
	    (when (looking-at "Total number of bytes: \\([[:digit:]]+\\)")
	      ;; The used number of bytes is not part of the result.
	      ;; As side effect, we store it as file property.
	      (tramp-set-file-property
	       v localname "used-bytes" (string-to-number (match-string 1))))
	    ;; Result.
	    (when (and total avail)
	      (list total (- total avail) avail))))))))