diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/fileio.c | 28 |
1 files changed, 9 insertions, 19 deletions
diff --git a/src/fileio.c b/src/fileio.c index fa694249cb7..bbd1a4ef69c 100644 --- a/src/fileio.c +++ b/src/fileio.c | |||
| @@ -2413,7 +2413,8 @@ DEFUN ("make-symbolic-link", Fmake_symbolic_link, Smake_symbolic_link, 2, 3, | |||
| 2413 | Both args must be strings. | 2413 | Both args must be strings. |
| 2414 | Signal a `file-already-exists' error if a file LINKNAME already exists | 2414 | Signal a `file-already-exists' error if a file LINKNAME already exists |
| 2415 | unless optional third argument OK-IF-ALREADY-EXISTS is non-nil. | 2415 | unless optional third argument OK-IF-ALREADY-EXISTS is non-nil. |
| 2416 | An integer third arg means request confirmation if LINKNAME already exists. | 2416 | An integer third arg means request confirmation if LINKNAME already |
| 2417 | exists, and expand leading "~" or strip leading "/:" in TARGET. | ||
| 2417 | This happens for interactive use with M-x. */) | 2418 | This happens for interactive use with M-x. */) |
| 2418 | (Lisp_Object target, Lisp_Object linkname, Lisp_Object ok_if_already_exists) | 2419 | (Lisp_Object target, Lisp_Object linkname, Lisp_Object ok_if_already_exists) |
| 2419 | { | 2420 | { |
| @@ -2421,21 +2422,15 @@ This happens for interactive use with M-x. */) | |||
| 2421 | Lisp_Object encoded_target, encoded_linkname; | 2422 | Lisp_Object encoded_target, encoded_linkname; |
| 2422 | 2423 | ||
| 2423 | CHECK_STRING (target); | 2424 | CHECK_STRING (target); |
| 2424 | /* If the link target has a ~, we must expand it to get | 2425 | if (INTEGERP (ok_if_already_exists)) |
| 2425 | a truly valid file name. Otherwise, do not expand; | 2426 | { |
| 2426 | we want to permit links to relative file names. */ | 2427 | if (SREF (target, 0) == '~') |
| 2427 | if (SREF (target, 0) == '~') | 2428 | target = Fexpand_file_name (target, Qnil); |
| 2428 | target = Fexpand_file_name (target, Qnil); | 2429 | else if (SREF (target, 0) == '/' && SREF (target, 1) == ':') |
| 2429 | 2430 | target = Fsubstring_no_properties (target, make_number (2), Qnil); | |
| 2431 | } | ||
| 2430 | linkname = expand_cp_target (target, linkname); | 2432 | linkname = expand_cp_target (target, linkname); |
| 2431 | 2433 | ||
| 2432 | /* If the file name has special constructs in it, | ||
| 2433 | call the corresponding file handler. */ | ||
| 2434 | handler = Ffind_file_name_handler (target, Qmake_symbolic_link); | ||
| 2435 | if (!NILP (handler)) | ||
| 2436 | return call4 (handler, Qmake_symbolic_link, target, | ||
| 2437 | linkname, ok_if_already_exists); | ||
| 2438 | |||
| 2439 | /* If the new link name has special constructs in it, | 2434 | /* If the new link name has special constructs in it, |
| 2440 | call the corresponding file handler. */ | 2435 | call the corresponding file handler. */ |
| 2441 | handler = Ffind_file_name_handler (linkname, Qmake_symbolic_link); | 2436 | handler = Ffind_file_name_handler (linkname, Qmake_symbolic_link); |
| @@ -2633,11 +2628,6 @@ emacs_readlinkat (int fd, char const *filename) | |||
| 2633 | return Qnil; | 2628 | return Qnil; |
| 2634 | 2629 | ||
| 2635 | val = build_unibyte_string (buf); | 2630 | val = build_unibyte_string (buf); |
| 2636 | if (buf[0] == '/' && strchr (buf, ':')) | ||
| 2637 | { | ||
| 2638 | AUTO_STRING (slash_colon, "/:"); | ||
| 2639 | val = concat2 (slash_colon, val); | ||
| 2640 | } | ||
| 2641 | if (buf != readlink_buf) | 2631 | if (buf != readlink_buf) |
| 2642 | xfree (buf); | 2632 | xfree (buf); |
| 2643 | val = DECODE_FILE (val); | 2633 | val = DECODE_FILE (val); |