rm(1): Add -x option to prevent recursive rm crossing mount points.
authorSascha Wildner <saw@online.de>
Mon, 15 Apr 2013 20:11:00 +0000 (22:11 +0200)
committerSascha Wildner <saw@online.de>
Mon, 15 Apr 2013 20:11:00 +0000 (22:11 +0200)
Submitted-by: Joris Giovannangeli <joris@giovannangeli.fr>
Dragonfly-bug: <http://bugs.dragonflybsd.org/issues/2546>

bin/rm/rm.1
bin/rm/rm.c

index 8b37db2..0f9dc60 100644 (file)
@@ -34,9 +34,8 @@
 .\"
 .\"    @(#)rm.1        8.5 (Berkeley) 12/5/94
 .\" $FreeBSD: src/bin/rm/rm.1,v 1.19.2.6 2003/02/04 22:10:42 trhodes Exp $
-.\" $DragonFly: src/bin/rm/rm.1,v 1.12 2007/01/02 23:42:20 swildner Exp $
 .\"
-.Dd January 28, 1999
+.Dd April 15, 2013
 .Dt RM 1
 .Os
 .Sh NAME
@@ -45,7 +44,7 @@
 .Nd remove directory entries
 .Sh SYNOPSIS
 .Nm
-.Op Fl dfiIPRrvW
+.Op Fl dfiIPRrvWx
 .Ar
 .Nm unlink
 .Ar file
@@ -120,6 +119,8 @@ Be verbose when deleting files, showing them as they are removed.
 Attempt to undelete the named files.
 Currently, this option can only be used to recover
 files covered by whiteouts.
+.It Fl x
+When removing a hierarchy, don't cross mount points.
 .El
 .Pp
 The
index 25d7d9f..c756355 100644 (file)
@@ -54,7 +54,7 @@
 #include <unistd.h>
 
 static int dflag, eval, fflag, iflag, Pflag, vflag, Wflag, stdin_ok;
-static int rflag, Iflag;
+static int rflag, Iflag, xflag;
 static uid_t uid;
 volatile sig_atomic_t info;
 
@@ -101,8 +101,8 @@ main(int argc, char *argv[])
                exit(eval);
        }
 
-       Pflag = rflag = 0;
-       while ((ch = getopt(argc, argv, "dfiIPRrvW")) != -1) {
+       Pflag = rflag = xflag = 0;
+       while ((ch = getopt(argc, argv, "dfiIPRrvWx")) != -1) {
                switch(ch) {
                case 'd':
                        dflag = 1;
@@ -139,6 +139,9 @@ main(int argc, char *argv[])
                case 'W':
                        Wflag = 1;
                        break;
+               case 'x':
+                       xflag = 1;
+                       break;
                default:
                        usage();
                }
@@ -199,6 +202,8 @@ rm_tree(char **argv)
                flags |= FTS_NOSTAT;
        if (Wflag)
                flags |= FTS_WHITEOUT;
+       if (xflag)
+               flags |= FTS_XDEV;
        if ((fts = fts_open(argv, flags, NULL)) == NULL) {
                if (fflag && errno == ENOENT)
                        return;
@@ -624,7 +629,7 @@ usage(void)
 {
 
        fprintf(stderr, "%s\n%s\n",
-           "usage: rm [-f | -i] [-dIPRrvW] file ...",
+           "usage: rm [-f | -i] [-dIPRrvWx] file ...",
            "       unlink file");
        exit(EX_USAGE);
 }