Index: bin/ln/ln.c =================================================================== --- bin/ln/ln.c +++ bin/ln/ln.c @@ -247,9 +247,9 @@ * If the target is a directory (and not a symlink if hflag), * append the source's name. */ - 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) >= Index: bin/ln/tests/ln_test.sh =================================================================== --- bin/ln/tests/ln_test.sh +++ bin/ln/tests/ln_test.sh @@ -160,10 +160,10 @@ sF_flag_body() { - atf_expect_fail "B isn't being unlinked (bug 219943)" atf_check mkdir A B atf_check ln -sF A B atf_check -o inline:'Symbolic Link\n' stat -f %SHT B + atf_check -o inline:'A\n' readlink B } atf_test_case sf_flag