mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-29 12:03:03 +00:00
ln(1): fix -F behavior
When '-F' option is used, the target directory needs to be unlinked. Currently, the modified target ("target/source") is being unlinked, and since it doesn't yet exist, the original target isn't removed. This is fixed by skipping the block where target is modified to "target/source" when '-F' option is set. Hence, a symbolic link (with the same name as of the original target) to the source_file is produced. Update the test for ln(1) to reflect fix for option '-F' MFC after: 1 month PR: 219943 Differential Revision: D11167 Submitted by: shivansh Sponsored by: Google (GSoC 2017)
This commit is contained in:
parent
fb40136990
commit
63bd650f4b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=320172
@ -245,11 +245,11 @@ linkit(const char *source, const char *target, int isdir)
|
||||
|
||||
/*
|
||||
* If the target is a directory (and not a symlink if hflag),
|
||||
* append the source's name.
|
||||
* append the source's name, unless Fflag is set.
|
||||
*/
|
||||
if (isdir ||
|
||||
if (!Fflag && (isdir ||
|
||||
(lstat(target, &sb) == 0 && S_ISDIR(sb.st_mode)) ||
|
||||
(!hflag && stat(target, &sb) == 0 && S_ISDIR(sb.st_mode))) {
|
||||
(!hflag && stat(target, &sb) == 0 && S_ISDIR(sb.st_mode)))) {
|
||||
if (strlcpy(bbuf, source, sizeof(bbuf)) >= sizeof(bbuf) ||
|
||||
(p = basename(bbuf)) == NULL ||
|
||||
snprintf(path, sizeof(path), "%s/%s", target, p) >=
|
||||
|
Loading…
Reference in New Issue
Block a user