Squashed 'yocto-poky/' content from commit ea562de

git-subtree-dir: yocto-poky
git-subtree-split: ea562de57590c966cd5a75fda8defecd397e6436
diff --git a/meta/recipes-core/coreutils/coreutils-6.9/coreutils-6.9-cp-i-u.patch b/meta/recipes-core/coreutils/coreutils-6.9/coreutils-6.9-cp-i-u.patch
new file mode 100644
index 0000000..5452b46
--- /dev/null
+++ b/meta/recipes-core/coreutils/coreutils-6.9/coreutils-6.9-cp-i-u.patch
@@ -0,0 +1,120 @@
+Upstream-Status: Inappropriate [legacy version]
+
+This patch was imported from the Fedora Core 8 coreutils-6.9-9 package.
+
+The package is stated as being Licensed as GPLv2+.
+
+Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
+
+----
+
+When "cp -i --update old new" would do nothing because "new" is
+newer than "old", cp would nonetheless prompt for whether it is
+ok to overwrite "new".  Then, regardless of the response (because
+of the --update option), cp would do nothing.
+
+The following patch eliminates the unnecessary prompt in that case.
+
+diff --git a/src/copy.c b/src/copy.c
+index b7bf73b..0e549d2 100644
+--- a/src/copy.c
++++ b/src/copy.c
+@@ -1210,6 +1210,30 @@ copy_internal (char const *src_name, char const *dst_name,
+ 	      return false;
+ 	    }
+
++	  if (!S_ISDIR (src_mode) && x->update)
++	    {
++	      /* When preserving time stamps (but not moving within a file
++		 system), don't worry if the destination time stamp is
++		 less than the source merely because of time stamp
++		 truncation.  */
++	      int options = ((x->preserve_timestamps
++			      && ! (x->move_mode
++				    && dst_sb.st_dev == src_sb.st_dev))
++			     ? UTIMECMP_TRUNCATE_SOURCE
++			     : 0);
++
++	      if (0 <= utimecmp (dst_name, &dst_sb, &src_sb, options))
++		{
++		  /* We're using --update and the destination is not older
++		     than the source, so do not copy or move.  Pretend the
++		     rename succeeded, so the caller (if it's mv) doesn't
++		     end up removing the source file.  */
++		  if (rename_succeeded)
++		    *rename_succeeded = true;
++		  return true;
++		}
++	    }
++
+ 	  /* When there is an existing destination file, we may end up
+ 	     returning early, and hence not copying/moving the file.
+ 	     This may be due to an interactive `negative' reply to the
+@@ -1302,30 +1326,6 @@ copy_internal (char const *src_name, char const *dst_name,
+ 		      return false;
+ 		    }
+ 		}
+-
+-	      if (x->update)
+-		{
+-		  /* When preserving time stamps (but not moving within a file
+-		     system), don't worry if the destination time stamp is
+-		     less than the source merely because of time stamp
+-		     truncation.  */
+-		  int options = ((x->preserve_timestamps
+-				  && ! (x->move_mode
+-					&& dst_sb.st_dev == src_sb.st_dev))
+-				 ? UTIMECMP_TRUNCATE_SOURCE
+-				 : 0);
+-
+-		  if (0 <= utimecmp (dst_name, &dst_sb, &src_sb, options))
+-		    {
+-		      /* We're using --update and the destination is not older
+-			 than the source, so do not copy or move.  Pretend the
+-			 rename succeeded, so the caller (if it's mv) doesn't
+-			 end up removing the source file.  */
+-		      if (rename_succeeded)
+-			*rename_succeeded = true;
+-		      return true;
+-		    }
+-		}
+ 	    }
+
+ 	  if (x->move_mode)
+diff --git a/tests/mv/update b/tests/mv/update
+index 0c06024..6c3d149 100755
+--- a/tests/mv/update
++++ b/tests/mv/update
+@@ -1,7 +1,7 @@
+ #!/bin/sh
+ # make sure --update works as advertised
+
+-# Copyright (C) 2001, 2004, 2006 Free Software Foundation, Inc.
++# Copyright (C) 2001, 2004, 2006-2007 Free Software Foundation, Inc.
+
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -46,11 +46,16 @@ fi
+
+ fail=0
+
+-for cp_or_mv in cp mv; do
+-  # This is a no-op.
+-  $cp_or_mv --update old new || fail=1
+-  case "`cat new`" in new) ;; *) fail=1 ;; esac
+-  case "`cat old`" in old) ;; *) fail=1 ;; esac
++for interactive in '' -i; do
++  for cp_or_mv in cp mv; do
++    # This is a no-op, with no prompt.
++    # With coreutils-6.9 and earlier, using --update with -i would
++    # mistakenly elicit a prompt.
++    $cp_or_mv $interactive --update old new < /dev/null > out 2>&1 || fail=1
++    test -s out && fail=1
++    case "`cat new`" in new) ;; *) fail=1 ;; esac
++    case "`cat old`" in old) ;; *) fail=1 ;; esac
++  done
+ done
+
+ # This will actually perform the rename.
+--
+1.5.3.rc1.16.g9d6f