aboutsummaryrefslogtreecommitdiff
path: root/findutils/find.c
diff options
context:
space:
mode:
authorvda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277>2007-04-13 10:00:12 +0000
committervda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277>2007-04-13 10:00:12 +0000
commitbcffeeed7260ff019ed27500d782a7a97881a2a4 (patch)
treeac6b61e653ea0372c2c863d0c05da21dc9b6a226 /findutils/find.c
parent1e7d3b57d92560a5285ce0da45d000e48b5bde87 (diff)
downloadbusybox-w32-bcffeeed7260ff019ed27500d782a7a97881a2a4.tar.gz
busybox-w32-bcffeeed7260ff019ed27500d782a7a97881a2a4.tar.bz2
busybox-w32-bcffeeed7260ff019ed27500d782a7a97881a2a4.zip
find: add support for -delete, -path (by Natanael Copa)
git-svn-id: svn://busybox.net/trunk/busybox@18425 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'findutils/find.c')
-rw-r--r--findutils/find.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/findutils/find.c b/findutils/find.c
index b77d36dc3..aec22a5bc 100644
--- a/findutils/find.c
+++ b/findutils/find.c
@@ -79,6 +79,8 @@ USE_FEATURE_FIND_GROUP( ACTS(group, gid_t gid;))
79USE_FEATURE_FIND_PAREN( ACTS(paren, action ***subexpr;)) 79USE_FEATURE_FIND_PAREN( ACTS(paren, action ***subexpr;))
80USE_FEATURE_FIND_SIZE( ACTS(size, off_t size;)) 80USE_FEATURE_FIND_SIZE( ACTS(size, off_t size;))
81USE_FEATURE_FIND_PRUNE( ACTS(prune)) 81USE_FEATURE_FIND_PRUNE( ACTS(prune))
82USE_FEATURE_FIND_DELETE(ACTS(delete))
83USE_FEATURE_FIND_PATH( ACTS(path, const char *pattern;))
82 84
83static action ***actions; 85static action ***actions;
84static bool need_print = 1; 86static bool need_print = 1;
@@ -305,6 +307,28 @@ ACTF(prune)
305} 307}
306#endif 308#endif
307 309
310#if ENABLE_FEATURE_FIND_DELETE
311ACTF(delete)
312{
313 int rc;
314 if (S_ISDIR(statbuf->st_mode)) {
315 rc = rmdir(fileName);
316 } else {
317 rc = unlink(fileName);
318 }
319 if (rc < 0)
320 bb_perror_msg("%s", fileName);
321 return TRUE;
322}
323#endif
324
325#if ENABLE_FEATURE_FIND_PATH
326ACTF(path)
327{
328 return fnmatch(ap->pattern, fileName, 0) == 0;
329}
330#endif
331
308#if ENABLE_FEATURE_FIND_SIZE 332#if ENABLE_FEATURE_FIND_SIZE
309ACTF(size) 333ACTF(size)
310{ 334{
@@ -393,6 +417,8 @@ static action*** parse_params(char **argv)
393 USE_FEATURE_FIND_PAREN( PARM_char_brace,) 417 USE_FEATURE_FIND_PAREN( PARM_char_brace,)
394 USE_FEATURE_FIND_SIZE( PARM_size ,) 418 USE_FEATURE_FIND_SIZE( PARM_size ,)
395 USE_FEATURE_FIND_PRUNE( PARM_prune ,) 419 USE_FEATURE_FIND_PRUNE( PARM_prune ,)
420 USE_FEATURE_FIND_DELETE(PARM_delete ,)
421 USE_FEATURE_FIND_PATH( PARM_path ,)
396#if ENABLE_DESKTOP 422#if ENABLE_DESKTOP
397 PARM_and , 423 PARM_and ,
398 PARM_or , 424 PARM_or ,
@@ -420,6 +446,8 @@ static action*** parse_params(char **argv)
420 USE_FEATURE_FIND_PAREN( "(" ,) 446 USE_FEATURE_FIND_PAREN( "(" ,)
421 USE_FEATURE_FIND_SIZE( "-size" ,) 447 USE_FEATURE_FIND_SIZE( "-size" ,)
422 USE_FEATURE_FIND_PRUNE( "-prune" ,) 448 USE_FEATURE_FIND_PRUNE( "-prune" ,)
449 USE_FEATURE_FIND_DELETE("-delete",)
450 USE_FEATURE_FIND_PATH( "-path" ,)
423#if ENABLE_DESKTOP 451#if ENABLE_DESKTOP
424 "-and" , 452 "-and" ,
425 "-or" , 453 "-or" ,
@@ -656,6 +684,22 @@ static action*** parse_params(char **argv)
656 (void) ALLOC_ACTION(prune); 684 (void) ALLOC_ACTION(prune);
657 } 685 }
658#endif 686#endif
687#if ENABLE_FEATURE_FIND_DELETE
688 else if (parm == PARM_delete) {
689 need_print = 0;
690 recurse_flags |= ACTION_DEPTHFIRST;
691 (void) ALLOC_ACTION(delete);
692 }
693#endif
694#if ENABLE_FEATURE_FIND_PATH
695 else if (parm == PARM_path) {
696 action_path *ap;
697 if (!*++argv)
698 bb_error_msg_and_die(bb_msg_requires_arg, arg);
699 ap = ALLOC_ACTION(path);
700 ap->pattern = arg1;
701 }
702#endif
659#if ENABLE_FEATURE_FIND_SIZE 703#if ENABLE_FEATURE_FIND_SIZE
660 else if (parm == PARM_size) { 704 else if (parm == PARM_size) {
661 action_size *ap; 705 action_size *ap;