1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-30 19:53:09 +00:00

Fix bug #4673 with Dired when `stat' fails for ".." or other files.

lisp/ls-lisp.el (ls-lisp-sanitize): New function.
 (ls-lisp-insert-directory): Use it to fix or remove any elements
 in file-alist with missing attributes.
This commit is contained in:
Eli Zaretskii 2012-02-07 19:44:36 +02:00
parent 98d7371e7a
commit 5e0d957fe0
2 changed files with 23 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2012-02-07 Eli Zaretskii <eliz@gnu.org>
* ls-lisp.el (ls-lisp-sanitize): New function.
(ls-lisp-insert-directory): Use it to fix or remove any elements
in file-alist with missing attributes. (Bug#4673)
2012-02-07 Alan Mackenzie <acm@muc.de>
Fix spurious recognition of c-in-knr-argdecl.

View File

@ -331,6 +331,7 @@ not contain `d', so that a full listing is expected."
;; do all bindings here for speed
total-line files elt short file-size attr
fuid fgid uid-len gid-len)
(setq file-alist (ls-lisp-sanitize file-alist))
(cond ((memq ?A switches)
(setq file-alist
(ls-lisp-delete-matching "^\\.\\.?$" file-alist)))
@ -437,6 +438,22 @@ not contain `d', so that a full listing is expected."
(message "%s: doesn't exist or is inaccessible" file)
(ding) (sit-for 2))))) ; to show user the message!
(defun ls-lisp-sanitize (file-alist)
"Sanitize the elements in FILE-ALIST.
Fixes any elements in the alist for directory entries whose file
attributes are nil (meaning that `file-attributes' failed for
them). This is known to happen for some network shares, in
particular for the \"..\" directory entry.
If the \"..\" directory entry has nil attributes, the attributes
are copied from the \".\" entry, if they are non-nil. Otherwise,
the offending element is removed from the list, as are any
elements for other directory entries with nil attributes."
(if (and (null (cdr (assoc ".." file-alist)))
(cdr (assoc "." file-alist)))
(setcdr (assoc ".." file-alist) (cdr (assoc "." file-alist))))
(rassq-delete-all nil file-alist))
(defun ls-lisp-column-format (file-alist)
"Insert the file names (only) in FILE-ALIST into the current buffer.
Format in columns, sorted vertically, following GNU ls -C.