Add an option that causes cpdup to skip CHR or BLK devices. This option
authorMatthew Dillon <dillon@dragonflybsd.org>
Thu, 21 Sep 2006 04:09:28 +0000 (04:09 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Thu, 21 Sep 2006 04:09:28 +0000 (04:09 +0000)
would typically be needed if using cpdup across a network to a non-BSD box
which does not support the creation of device nodes.

bin/cpdup/cpdup.1
bin/cpdup/cpdup.c

index 2b4ad46..9f503fa 100644 (file)
@@ -3,7 +3,7 @@
 .\"    USE WITH EXTREME CAUTION.
 .\"
 .\"
-.\" $DragonFly: src/bin/cpdup/cpdup.1,v 1.17 2006/09/16 16:47:29 dillon Exp $
+.\" $DragonFly: src/bin/cpdup/cpdup.1,v 1.18 2006/09/21 04:09:28 dillon Exp $
 .Dd October 28, 1999
 .Dt CPDUP 1
 .Os
@@ -18,6 +18,7 @@
 .Op Fl f
 .Op Fl s0
 .Op Fl i0
+.Op Fl j0
 .Op Fl q
 .Op Fl o
 .Op Fl m
@@ -93,6 +94,8 @@ safety feature is enabled by default to prevent user mistakes from blowing
 away everything accidently.
 .It Fl i0
 Do not request confirmation when removing something.
+.It Fl j0
+Do not try to recreate CHR or BLK devices.
 .It Fl q
 Quiet operation
 .It Fl o
index 9f3422e..b9f7f53 100644 (file)
@@ -45,7 +45,7 @@
  *     - Is able to do incremental mirroring/backups via hardlinks from
  *       the 'previous' version (supplied with -H path).
  *
- * $DragonFly: src/bin/cpdup/cpdup.c,v 1.17 2006/09/16 16:47:29 dillon Exp $
+ * $DragonFly: src/bin/cpdup/cpdup.c,v 1.18 2006/09/21 04:09:28 dillon Exp $
  */
 
 /*-
@@ -109,6 +109,7 @@ int DoCopy(const char *spath, const char *dpath, dev_t sdevNo, dev_t ddevNo);
 int AskConfirmation = 1;
 int SafetyOpt = 1;
 int ForceOpt;
+int DeviceOpt = 1;
 int VerboseOpt;
 int QuietOpt;
 int NoRemoveOpt;
@@ -201,6 +202,9 @@ main(int ac, char **av)
        case 'i':
            AskConfirmation = v;
            break;
+       case 'j':
+           DeviceOpt = v;
+           break;
        case 's':
            SafetyOpt = v;
            break;
@@ -1012,7 +1016,7 @@ skip_copy:
            r = 1;
            logerr("%-32s softlink-failed\n", (dpath ? dpath : spath));
        }
-    } else if (S_ISCHR(st1.st_mode) || S_ISBLK(st1.st_mode)) {
+    } else if ((S_ISCHR(st1.st_mode) || S_ISBLK(st1.st_mode)) && DeviceOpt) {
        char path[2048];
 
        if (ForceOpt ||