Do not munge contents of local symbolic links
commite8001d4c27e1e33c83b9994aac4d5fc3feada2da
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 27 Aug 2017 01:36:38 +0000 (26 18:36 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 27 Aug 2017 01:36:38 +0000 (26 18:36 -0700)
tree6910256d7cf7723aa1b3f7ab7779b91627ba52f6
parent937d9d7f60460edb1d3f978151599fddcbba2214
Do not munge contents of local symbolic links

This lets Emacs deal with arbitrary local symlinks without
mishandling their contents (Bug#28156).  For example,
(progn (shell-command "ln -fs '~' 'x'") (rename-file "x" "/tmp/x"))
now consistently creates a symbolic link from '/tmp/x' to '~'.
Formerly, it did that only if the working directory was on the
same filesystem as /tmp; otherwise, it expanded the '~' to
the user's home directory.
* lisp/dired.el (dired-get-filename): Use files--name-absolute-system-p
instead of rolling our own code.
* lisp/files.el (files--name-absolute-system-p): New function.
(file-truename, file-chase-links): Use it to avoid mishandling
symlink contents that begin with ~.
(copy-directory, move-file-to-trash):
Use concat rather than expand-file-name, to avoid mishandling
symlink contents that begin with ~.
* src/fileio.c (Fmake_symbolic_link): Do not expand leading "~" in the
target unless interactive.  Strip leading "/:" if interactive.
(emacs_readlinkat): Do not prepend "/:" to the link target if
it starts with "/" and contains ":" before NUL.
* test/src/fileio-tests.el (try-link): Rename from try-char,
and accept a string instead of a char.  All uses changed.
(fileio-tests--symlink-failure): Also test leading ~, and "/:",
to test the new behavior.
doc/emacs/files.texi
doc/lispref/files.texi
etc/NEWS
lisp/dired.el
lisp/files.el
src/fileio.c
test/src/fileio-tests.el