Function: make-symbolic-link
make-symbolic-link is an interactive function defined in fileio.c.
Signature
(make-symbolic-link TARGET LINKNAME &optional OK-IF-ALREADY-EXISTS)
Documentation
Make a symbolic link to TARGET, named LINKNAME.
If LINKNAME is a directory name, make a like-named symbolic link under LINKNAME.
Signal a file-already-exists error if a file LINKNAME already exists
unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.
An integer third arg means request confirmation if LINKNAME already
exists, and expand leading "~" or strip leading "/:" in TARGET.
This happens for interactive use with M-x.
Other relevant functions are documented in the file group.
Probably introduced at or before Emacs version 18.
Key Bindings
Shortdoc
;; file
(make-symbolic-link "/tmp/foo" "/tmp/foosymlink")
Source Code
// Defined in /usr/src/emacs/src/fileio.c
{
Lisp_Object handler;
Lisp_Object encoded_target, encoded_linkname;
CHECK_STRING (target);
if (FIXNUMP (ok_if_already_exists))
{
if (SREF (target, 0) == '~')
target = Fexpand_file_name (target, Qnil);
else if (SREF (target, 0) == '/' && SREF (target, 1) == ':')
target = Fsubstring_no_properties (target, make_fixnum (2), Qnil);
}
linkname = expand_cp_target (target, linkname);
/* If the new link name has special constructs in it,
call the corresponding file name handler. */
handler = Ffind_file_name_handler (linkname, Qmake_symbolic_link);
if (!NILP (handler))
return call4 (handler, Qmake_symbolic_link, target,
linkname, ok_if_already_exists);
encoded_target = ENCODE_FILE (target);
encoded_linkname = ENCODE_FILE (linkname);
if (symlink (SSDATA (encoded_target), SSDATA (encoded_linkname)) == 0)
return Qnil;
if (errno == ENOSYS)
xsignal1 (Qfile_error,
build_string ("Symbolic links are not supported"));
if (errno == EEXIST)
{
if (NILP (ok_if_already_exists)
|| FIXNUMP (ok_if_already_exists))
barf_or_query_if_file_exists (linkname, true, "make it a link",
FIXNUMP (ok_if_already_exists), false);
unlink (SSDATA (encoded_linkname));
if (symlink (SSDATA (encoded_target), SSDATA (encoded_linkname)) == 0)
return Qnil;
}
report_file_error ("Making symbolic link", list2 (target, linkname));
}