Browse Source

update TODO, readd find -empty feature in busybox

Waldemar Brodkorb 14 years ago
parent
commit
0ba71fe6de
2 changed files with 106 additions and 2 deletions
  1. 1 2
      TODO
  2. 105 0
      package/busybox/patches/002-find-empty.patch

+ 1 - 2
TODO

@@ -1,6 +1,5 @@
-- busybox update to latest version
-- rpm package backend
 - fix init scripts pidof? vs. killall
+- rpm package backend
 - freebsd build
 - win cygwin build
 - netbsd build

+ 105 - 0
package/busybox/patches/002-find-empty.patch

@@ -0,0 +1,105 @@
+diff -Nur busybox-1.15.2.orig/findutils/Config.in busybox-1.15.2/findutils/Config.in
+--- busybox-1.15.2.orig/findutils/Config.in	2009-09-26 15:14:57.000000000 +0200
++++ busybox-1.15.2/findutils/Config.in	2009-11-28 12:41:31.000000000 +0100
+@@ -81,6 +81,14 @@
+ 	help
+ 	  Support the 'find -inum' option for searching by inode number.
+ 
++config FEATURE_FIND_EMPTY
++	bool "Enable -empty option matching empty files and directories"
++	default y
++	depends on FIND
++	help
++	  Support the 'find -empty' option for searching empty files 
++	  and directories.
++
+ config FEATURE_FIND_EXEC
+ 	bool "Enable -exec: execute commands"
+ 	default y
+diff -Nur busybox-1.15.2.orig/findutils/find.c busybox-1.15.2/findutils/find.c
+--- busybox-1.15.2.orig/findutils/find.c	2009-10-08 03:04:40.000000000 +0200
++++ busybox-1.15.2/findutils/find.c	2009-11-28 12:48:36.000000000 +0100
+@@ -93,6 +93,7 @@
+ IF_FEATURE_FIND_CONTEXT(ACTS(context, security_context_t context;))
+ IF_FEATURE_FIND_PAREN(  ACTS(paren, action ***subexpr;))
+ IF_FEATURE_FIND_PRUNE(  ACTS(prune))
++IF_FEATURE_FIND_EMPTY(  ACTS(empty))
+ IF_FEATURE_FIND_DELETE( ACTS(delete))
+ IF_FEATURE_FIND_EXEC(   ACTS(exec,  char **exec_argv; unsigned *subst_count; int exec_argc;))
+ IF_FEATURE_FIND_GROUP(  ACTS(group, gid_t gid;))
+@@ -333,6 +334,34 @@
+ 	return exec_actions(ap->subexpr, fileName, statbuf);
+ }
+ #endif
++#if ENABLE_FEATURE_FIND_EMPTY
++ACTF(empty)
++{
++	DIR *d;
++	struct dirent *dp;
++	bool empty = TRUE;
++
++	if (S_ISDIR(statbuf->st_mode)) {
++		d = opendir(fileName);
++		if (d == NULL)
++			bb_simple_perror_msg(fileName);
++		for (dp = readdir(d); dp; dp = readdir(d)) {
++			if (dp->d_name[0] != '.' ||
++				(dp->d_name[1] != '\0' &&
++				(dp->d_name[1] != '.' ||
++				dp->d_name[2] != '\0'))) {
++					empty = FALSE;
++					break;
++			}
++		}
++		closedir(d);
++		return(empty);
++	} else if (S_ISREG(statbuf->st_mode))
++		return (statbuf->st_size == 0);
++	else
++		return FALSE;
++}
++#endif
+ #if ENABLE_FEATURE_FIND_SIZE
+ ACTF(size)
+ {
+@@ -476,6 +505,7 @@
+ 	IF_FEATURE_FIND_PRINT0( PARM_print0    ,)
+ 	IF_FEATURE_FIND_DEPTH(  PARM_depth     ,)
+ 	IF_FEATURE_FIND_PRUNE(  PARM_prune     ,)
++	IF_FEATURE_FIND_EMPTY(  PARM_empty     ,)
+ 	IF_FEATURE_FIND_DELETE( PARM_delete    ,)
+ 	IF_FEATURE_FIND_EXEC(   PARM_exec      ,)
+ 	IF_FEATURE_FIND_PAREN(  PARM_char_brace,)
+@@ -509,6 +539,7 @@
+ 	IF_FEATURE_FIND_PRINT0( "-print0\0" )
+ 	IF_FEATURE_FIND_DEPTH(  "-depth\0"  )
+ 	IF_FEATURE_FIND_PRUNE(  "-prune\0"  )
++	IF_FEATURE_FIND_EMPTY(  "-empty\0"  )
+ 	IF_FEATURE_FIND_DELETE( "-delete\0" )
+ 	IF_FEATURE_FIND_EXEC(   "-exec\0"   )
+ 	IF_FEATURE_FIND_PAREN(  "(\0"       )
+@@ -627,6 +658,12 @@
+ 			(void) ALLOC_ACTION(prune);
+ 		}
+ #endif
++#if ENABLE_FEATURE_FIND_EMPTY
++		else if (parm == PARM_empty) {
++			IF_FEATURE_FIND_NOT( invert_flag = 0; )
++			(void) ALLOC_ACTION(empty);
++		}
++#endif
+ #if ENABLE_FEATURE_FIND_DELETE
+ 		else if (parm == PARM_delete) {
+ 			G.need_print = 0;
+diff -Nur busybox-1.15.2.orig/include/usage.h busybox-1.15.2/include/usage.h
+--- busybox-1.15.2.orig/include/usage.h	2009-10-08 02:59:09.000000000 +0200
++++ busybox-1.15.2/include/usage.h	2009-11-28 12:42:43.000000000 +0100
+@@ -1239,6 +1239,8 @@
+      "\n	-group NAME	File belongs to group NAME (numeric group ID allowed)") \
+ 	IF_FEATURE_FIND_DEPTH( \
+      "\n	-depth		Process directory name after traversing it") \
++ 	IF_FEATURE_FIND_EMPTY( \
++     "\n	-empty		File or directory is empty") \
+ 	IF_FEATURE_FIND_SIZE( \
+      "\n	-size N[bck]	File size is N (c:bytes,k:kbytes,b:512 bytes(def.))." \
+      "\n			+/-N: file size is bigger/smaller than N") \