Author: ngie
Date: Tue Jun 20 20:46:08 2017
New Revision: 320172
URL: https://svnweb.freebsd.org/changeset/base/320172

Log:
  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)

Modified:
  head/bin/ln/ln.c

Modified: head/bin/ln/ln.c
==============================================================================
--- head/bin/ln/ln.c    Tue Jun 20 20:34:30 2017        (r320171)
+++ head/bin/ln/ln.c    Tue Jun 20 20:46:08 2017        (r320172)
@@ -245,11 +245,11 @@ linkit(const char *source, const char *target, int isd
 
        /*
         * 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) >=
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to