svn commit: trunk/busybox: findutils include

vda at busybox.net vda at busybox.net
Fri Apr 13 10:00:14 UTC 2007


Author: vda
Date: 2007-04-13 03:00:12 -0700 (Fri, 13 Apr 2007)
New Revision: 18425

Log:
find: add support for -delete, -path (by Natanael Copa)


Modified:
   trunk/busybox/findutils/Config.in
   trunk/busybox/findutils/find.c
   trunk/busybox/include/usage.h


Changeset:
Modified: trunk/busybox/findutils/Config.in
===================================================================
--- trunk/busybox/findutils/Config.in	2007-04-13 08:32:18 UTC (rev 18424)
+++ trunk/busybox/findutils/Config.in	2007-04-13 10:00:12 UTC (rev 18425)
@@ -135,6 +135,22 @@
 	  If the file is a directory, dont descend into it. Useful for
 	  exclusion .svn and CVS directories.
 
+config FEATURE_FIND_DELETE
+	bool "Enable -delete option allowing to delete files"
+	default n
+	depends on FIND && FEATURE_FIND_DEPTH
+	help
+	  Support the 'find -delete' option for deleting files and direcotries.
+	  WARNING: This option can do much harm if used wrong. Busybox will not
+	  try to protect the user from doing stupid things. Use with care.
+
+config FEATURE_FIND_PATH
+	bool "Enable -path option allowing to match pathname patterns"
+	default y
+	depends on FIND
+	help
+	  The -path option matches whole pathnames instead of just filenames.
+
 config GREP
 	bool "grep"
 	default n

Modified: trunk/busybox/findutils/find.c
===================================================================
--- trunk/busybox/findutils/find.c	2007-04-13 08:32:18 UTC (rev 18424)
+++ trunk/busybox/findutils/find.c	2007-04-13 10:00:12 UTC (rev 18425)
@@ -79,6 +79,8 @@
 USE_FEATURE_FIND_PAREN( ACTS(paren, action ***subexpr;))
 USE_FEATURE_FIND_SIZE(  ACTS(size,  off_t size;))
 USE_FEATURE_FIND_PRUNE( ACTS(prune))
+USE_FEATURE_FIND_DELETE(ACTS(delete))
+USE_FEATURE_FIND_PATH(  ACTS(path, const char *pattern;))
 
 static action ***actions;
 static bool need_print = 1;
@@ -305,6 +307,28 @@
 }
 #endif
 
+#if ENABLE_FEATURE_FIND_DELETE
+ACTF(delete)
+{
+	int rc;
+	if (S_ISDIR(statbuf->st_mode)) {
+		rc = rmdir(fileName);
+	} else {
+		rc = unlink(fileName);
+	}
+	if (rc < 0)
+		bb_perror_msg("%s", fileName);
+	return TRUE;
+}
+#endif
+
+#if ENABLE_FEATURE_FIND_PATH
+ACTF(path)
+{
+	return fnmatch(ap->pattern, fileName, 0) == 0;
+}
+#endif
+
 #if ENABLE_FEATURE_FIND_SIZE
 ACTF(size)
 {
@@ -393,6 +417,8 @@
 	USE_FEATURE_FIND_PAREN( PARM_char_brace,)
 	USE_FEATURE_FIND_SIZE(  PARM_size      ,)
 	USE_FEATURE_FIND_PRUNE( PARM_prune     ,)
+	USE_FEATURE_FIND_DELETE(PARM_delete    ,)
+	USE_FEATURE_FIND_PATH(  PARM_path      ,)
 #if ENABLE_DESKTOP
 	                        PARM_and       ,
 	                        PARM_or        ,
@@ -420,6 +446,8 @@
 	USE_FEATURE_FIND_PAREN( "("      ,)
 	USE_FEATURE_FIND_SIZE(  "-size"  ,)
 	USE_FEATURE_FIND_PRUNE( "-prune" ,)
+	USE_FEATURE_FIND_DELETE("-delete",)
+	USE_FEATURE_FIND_PATH(  "-path"  ,)
 #if ENABLE_DESKTOP
 	                        "-and"   ,
 	                        "-or"    ,
@@ -656,6 +684,22 @@
 			(void) ALLOC_ACTION(prune);
 		}
 #endif
+#if ENABLE_FEATURE_FIND_DELETE
+		else if (parm == PARM_delete) {
+			need_print = 0;
+			recurse_flags |= ACTION_DEPTHFIRST;
+			(void) ALLOC_ACTION(delete);
+		}
+#endif
+#if ENABLE_FEATURE_FIND_PATH
+		else if (parm == PARM_path) {
+			action_path *ap;
+			if (!*++argv)
+				bb_error_msg_and_die(bb_msg_requires_arg, arg);
+			ap = ALLOC_ACTION(path);
+			ap->pattern = arg1;
+		}
+#endif
 #if ENABLE_FEATURE_FIND_SIZE
 		else if (parm == PARM_size) {
 			action_size *ap;

Modified: trunk/busybox/include/usage.h
===================================================================
--- trunk/busybox/include/usage.h	2007-04-13 08:32:18 UTC (rev 18424)
+++ trunk/busybox/include/usage.h	2007-04-13 10:00:12 UTC (rev 18425)
@@ -968,6 +968,10 @@
        "\n	-size N		File size is N" \
 	) USE_FEATURE_FIND_PRUNE( \
        "\n	-prune		Stop traversing current subtree" \
+        ) USE_FEATURE_FIND_DELETE( \
+       "\n	-delete		Delete files; Turns on -depth option" \
+        ) USE_FEATURE_FIND_PATH( \
+       "\n	-path		Path matches PATTERN" \
 	) USE_FEATURE_FIND_PAREN( \
        "\n	(EXPR)		Group an expression" \
 	)




More information about the busybox-cvs mailing list