Author: gavin
Date: Sun Mar 14 16:03:36 2010
New Revision: 205156
URL: http://svn.freebsd.org/changeset/base/205156

Log:
  Merge r202461 from head:
  
    Implement an "-x" option to cp(1), for compatibility with Linux and
    feature parity with du(1) and similar:  When set, cp(1) will not traverse
    mount points.
  
  PR:           bin/88056
  Initial patch by: Graham J Lee  <leeg teaching.physics.ox.ac.uk>

Modified:
  stable/7/bin/cp/cp.1
  stable/7/bin/cp/cp.c
  stable/7/bin/cp/utils.c
Directory Properties:
  stable/7/bin/cp/   (props changed)

Modified: stable/7/bin/cp/cp.1
==============================================================================
--- stable/7/bin/cp/cp.1        Sun Mar 14 15:49:04 2010        (r205155)
+++ stable/7/bin/cp/cp.1        Sun Mar 14 16:03:36 2010        (r205156)
@@ -32,7 +32,7 @@
 .\"    @(#)cp.1        8.3 (Berkeley) 4/18/94
 .\" $FreeBSD$
 .\"
-.Dd October 27, 2006
+.Dd January 17, 2010
 .Dt CP 1
 .Os
 .Sh NAME
@@ -45,7 +45,7 @@
 .Op Fl H | Fl L | Fl P
 .Oc
 .Op Fl f | i | n
-.Op Fl alpv
+.Op Fl alpvx
 .Ar source_file target_file
 .Nm
 .Oo
@@ -53,7 +53,7 @@
 .Op Fl H | Fl L | Fl P
 .Oc
 .Op Fl f | i | n
-.Op Fl alpv
+.Op Fl alpvx
 .Ar source_file ... target_directory
 .Sh DESCRIPTION
 In the first synopsis form, the
@@ -183,6 +183,8 @@ permissions.
 Cause
 .Nm
 to be verbose, showing files as they are copied.
+.It Fl x
+File system mount points are not traversed.
 .El
 .Pp
 For each destination file that already exists, its contents are

Modified: stable/7/bin/cp/cp.c
==============================================================================
--- stable/7/bin/cp/cp.c        Sun Mar 14 15:49:04 2010        (r205155)
+++ stable/7/bin/cp/cp.c        Sun Mar 14 16:03:36 2010        (r205156)
@@ -101,8 +101,9 @@ main(int argc, char *argv[])
        int Hflag, Lflag, Pflag, ch, fts_options, r, have_trailing_slash;
        char *target;
 
+       fts_options = FTS_NOCHDIR | FTS_PHYSICAL;
        Hflag = Lflag = Pflag = 0;
-       while ((ch = getopt(argc, argv, "HLPRafilnprv")) != -1)
+       while ((ch = getopt(argc, argv, "HLPRafilnprvx")) != -1)
                switch (ch) {
                case 'H':
                        Hflag = 1;
@@ -150,6 +151,9 @@ main(int argc, char *argv[])
                case 'v':
                        vflag = 1;
                        break;
+               case 'x':
+                       fts_options |= FTS_XDEV;
+                       break;
                default:
                        usage();
                        break;
@@ -160,7 +164,6 @@ main(int argc, char *argv[])
        if (argc < 2)
                usage();
 
-       fts_options = FTS_NOCHDIR | FTS_PHYSICAL;
        if (Rflag && rflag)
                errx(1, "the -R and -r options may not be specified together");
        if (rflag)

Modified: stable/7/bin/cp/utils.c
==============================================================================
--- stable/7/bin/cp/utils.c     Sun Mar 14 15:49:04 2010        (r205155)
+++ stable/7/bin/cp/utils.c     Sun Mar 14 16:03:36 2010        (r205156)
@@ -429,8 +429,8 @@ usage(void)
 {
 
        (void)fprintf(stderr, "%s\n%s\n",
-"usage: cp [-R [-H | -L | -P]] [-f | -i | -n] [-alpv] source_file target_file",
-"       cp [-R [-H | -L | -P]] [-f | -i | -n] [-alpv] source_file ... "
+"usage: cp [-R [-H | -L | -P]] [-f | -i | -n] [-alpvx] source_file 
target_file",
+"       cp [-R [-H | -L | -P]] [-f | -i | -n] [-alpvx] source_file ... "
 "target_directory");
        exit(EX_USAGE);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to