aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-04-04 23:41:35 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-04-04 23:41:35 +0000
commit56fce00fc7c11c2b8dabac5ba0ef6a0a8a19dee5 (patch)
tree7e59e42ff0a038c125a9335ff78953b390fe01ea
parentfebe3c421109032cdfb36249c54e314d39256ace (diff)
downloadbusybox-w32-56fce00fc7c11c2b8dabac5ba0ef6a0a8a19dee5.tar.gz
busybox-w32-56fce00fc7c11c2b8dabac5ba0ef6a0a8a19dee5.tar.bz2
busybox-w32-56fce00fc7c11c2b8dabac5ba0ef6a0a8a19dee5.zip
find: un-DESKTOPize (Kai Schwenzfeier <niteblade@gmx.net>)
find: -group, -depth (Natanael Copa <natanael.copa@gmail.com>) find: make constant array static, declare PARM_xx constants with enum
-rw-r--r--findutils/Config.in42
-rw-r--r--findutils/find.c228
-rw-r--r--include/usage.h4
3 files changed, 158 insertions, 116 deletions
diff --git a/findutils/Config.in b/findutils/Config.in
index dd8a8c9bb..09a5bb3cb 100644
--- a/findutils/Config.in
+++ b/findutils/Config.in
@@ -90,14 +90,50 @@ config FEATURE_FIND_USER
90 help 90 help
91 Support the 'find -user' option for searching by username or uid. 91 Support the 'find -user' option for searching by username or uid.
92 92
93config FEATURE_FIND_GROUP
94 bool "Enable group/gid matching (-group) option"
95 default y
96 depends on FIND
97 help
98 Support the 'find -group' option for searching by group name or gid.
99
93config FEATURE_FIND_NOT 100config FEATURE_FIND_NOT
94 bool "Enable the 'not' (!) operator" 101 bool "Enable the 'not' (!) operator"
95 default y 102 default y
96 depends on FIND 103 depends on FIND
97 help 104 help
98 Support the '!' operator to invert the test results. If 'Enable 105 Support the '!' operator to invert the test results.
99 full-blown desktop' is enabled, then will also support the 106 If 'Enable full-blown desktop' is enabled, then will also support
100 non-POSIX notation '-not'. 107 the non-POSIX notation '-not'.
108
109config FEATURE_FIND_DEPTH
110 bool "Enable the -depth option"
111 default y
112 depends on FIND
113 help
114 Process each directory's contents before the directory itself.
115
116config FEATURE_FIND_PAREN
117 bool "Enable parens in options"
118 default y
119 depends on FIND
120 help
121 Enable usage of parens '(' to specify logical order of arguments.
122
123config FEATURE_FIND_SIZE
124 bool "Enable (-size) option allowing matching for file size"
125 default y
126 depends on FIND
127 help
128 Support the 'find -size' option for searching by file size.
129
130config FEATURE_FIND_PRUNE
131 bool "Enable (-prune) option allowing to exclude subdirectories"
132 default y
133 depends on FIND
134 help
135 If the file is a directory, dont descend into it. Useful for
136 exclusion .svn and CVS directories.
101 137
102config GREP 138config GREP
103 bool "grep" 139 bool "grep"
diff --git a/findutils/find.c b/findutils/find.c
index a4fe5d187..9ca38c21a 100644
--- a/findutils/find.c
+++ b/findutils/find.c
@@ -71,14 +71,15 @@ USE_FEATURE_FIND_MMIN( ACTS(mmin, char mmin_char; unsigned mmin_mins;))
71USE_FEATURE_FIND_NEWER( ACTS(newer, time_t newer_mtime;)) 71USE_FEATURE_FIND_NEWER( ACTS(newer, time_t newer_mtime;))
72USE_FEATURE_FIND_INUM( ACTS(inum, ino_t inode_num;)) 72USE_FEATURE_FIND_INUM( ACTS(inum, ino_t inode_num;))
73USE_FEATURE_FIND_EXEC( ACTS(exec, char **exec_argv; unsigned int *subst_count; int exec_argc;)) 73USE_FEATURE_FIND_EXEC( ACTS(exec, char **exec_argv; unsigned int *subst_count; int exec_argc;))
74USE_FEATURE_FIND_USER( ACTS(user, int uid;)) 74USE_FEATURE_FIND_USER( ACTS(user, uid_t uid;))
75USE_DESKTOP( ACTS(paren, action ***subexpr;)) 75USE_FEATURE_FIND_GROUP( ACTS(group, gid_t gid;))
76USE_DESKTOP( ACTS(size, off_t size;)) 76USE_FEATURE_FIND_PAREN( ACTS(paren, action ***subexpr;))
77USE_DESKTOP( ACTS(prune)) 77USE_FEATURE_FIND_SIZE( ACTS(size, off_t size;))
78USE_FEATURE_FIND_PRUNE( ACTS(prune))
78 79
79static action ***actions; 80static action ***actions;
80static bool need_print = 1; 81static bool need_print = 1;
81 82static int recurse_flags = action_recurse;
82 83
83#if ENABLE_FEATURE_FIND_EXEC 84#if ENABLE_FEATURE_FIND_EXEC
84static unsigned int count_subst(const char *str) 85static unsigned int count_subst(const char *str)
@@ -231,6 +232,13 @@ ACTF(user)
231} 232}
232#endif 233#endif
233 234
235#if ENABLE_FEATURE_FIND_GROUP
236ACTF(group)
237{
238 return (statbuf->st_gid == ap->gid);
239}
240#endif
241
234#if ENABLE_FEATURE_FIND_PRINT0 242#if ENABLE_FEATURE_FIND_PRINT0
235ACTF(print0) 243ACTF(print0)
236{ 244{
@@ -245,12 +253,14 @@ ACTF(print)
245 return TRUE; 253 return TRUE;
246} 254}
247 255
248#if ENABLE_DESKTOP 256#if ENABLE_FEATURE_FIND_PAREN
249ACTF(paren) 257ACTF(paren)
250{ 258{
251 return exec_actions(ap->subexpr, fileName, statbuf); 259 return exec_actions(ap->subexpr, fileName, statbuf);
252} 260}
261#endif
253 262
263#if ENABLE_FEATURE_FIND_SIZE
254/* 264/*
255 * -prune: if -depth is not given, return true and do not descend 265 * -prune: if -depth is not given, return true and do not descend
256 * current dir; if -depth is given, return false with no effect. 266 * current dir; if -depth is given, return false with no effect.
@@ -261,7 +271,9 @@ ACTF(prune)
261{ 271{
262 return SKIP; 272 return SKIP;
263} 273}
274#endif
264 275
276#if ENABLE_FEATURE_FIND_PRUNE
265ACTF(size) 277ACTF(size)
266{ 278{
267 return statbuf->st_size == ap->size; 279 return statbuf->st_size == ap->size;
@@ -327,81 +339,69 @@ static const char* plus_minus_num(const char* str)
327} 339}
328#endif 340#endif
329 341
330#define PARM_a 0
331#define PARM_o 1
332#define PARM_char_not (PARM_o + ENABLE_FEATURE_FIND_NOT)
333#define PARM_print (PARM_char_not + 1)
334#define PARM_print0 (PARM_print + ENABLE_FEATURE_FIND_PRINT0)
335#define PARM_name (PARM_print0 + 1)
336#define PARM_type (PARM_name + ENABLE_FEATURE_FIND_TYPE)
337#define PARM_perm (PARM_type + ENABLE_FEATURE_FIND_PERM)
338#define PARM_mtime (PARM_perm + ENABLE_FEATURE_FIND_MTIME)
339#define PARM_mmin (PARM_mtime + ENABLE_FEATURE_FIND_MMIN)
340#define PARM_newer (PARM_mmin + ENABLE_FEATURE_FIND_NEWER)
341#define PARM_inum (PARM_newer + ENABLE_FEATURE_FIND_INUM)
342#define PARM_exec (PARM_inum + ENABLE_FEATURE_FIND_EXEC)
343#define PARM_user (PARM_exec + ENABLE_FEATURE_FIND_USER)
344#if ENABLE_DESKTOP
345#define PARM_and (PARM_user + 1)
346#define PARM_or (PARM_and + 1)
347#define PARM_not (PARM_or + ENABLE_FEATURE_FIND_NOT)
348#define PARM_char_brace (PARM_not + 1)
349#define PARM_prune (PARM_char_brace + 1)
350#define PARM_size (PARM_prune + 1)
351#endif
352static action*** parse_params(char **argv) 342static action*** parse_params(char **argv)
353{ 343{
354 action*** appp; 344 enum {
355 unsigned cur_group = 0; 345 PARM_a ,
356 unsigned cur_action = 0; 346 PARM_o ,
357 USE_FEATURE_FIND_NOT( bool invert_flag = 0; ) 347 USE_FEATURE_FIND_NOT( PARM_char_not ,)
358 const char * const params[] = { 348 PARM_print ,
359 "-a", 349 USE_FEATURE_FIND_PRINT0(PARM_print0 ,)
360 "-o", 350 PARM_name ,
361#if ENABLE_FEATURE_FIND_NOT 351 USE_FEATURE_FIND_TYPE( PARM_type ,)
362 "!", 352 USE_FEATURE_FIND_PERM( PARM_perm ,)
363#endif 353 USE_FEATURE_FIND_MTIME( PARM_mtime ,)
364 "-print", 354 USE_FEATURE_FIND_MMIN( PARM_mmin ,)
365#if ENABLE_FEATURE_FIND_PRINT0 355 USE_FEATURE_FIND_NEWER( PARM_newer ,)
366 "-print0", 356 USE_FEATURE_FIND_INUM( PARM_inum ,)
367#endif 357 USE_FEATURE_FIND_EXEC( PARM_exec ,)
368 "-name", 358 USE_FEATURE_FIND_USER( PARM_user ,)
369#if ENABLE_FEATURE_FIND_TYPE 359 USE_FEATURE_FIND_GROUP( PARM_group ,)
370 "-type", 360 USE_FEATURE_FIND_DEPTH( PARM_depth ,)
371#endif 361 USE_FEATURE_FIND_PAREN( PARM_char_brace,)
372#if ENABLE_FEATURE_FIND_PERM 362 USE_FEATURE_FIND_SIZE( PARM_prune ,)
373 "-perm", 363 USE_FEATURE_FIND_PRUNE( PARM_size ,)
374#endif 364#if ENABLE_DESKTOP
375#if ENABLE_FEATURE_FIND_MTIME 365 PARM_and ,
376 "-mtime", 366 PARM_or ,
377#endif 367 USE_FEATURE_FIND_NOT( PARM_not ,)
378#if ENABLE_FEATURE_FIND_MMIN
379 "-mmin",
380#endif
381#if ENABLE_FEATURE_FIND_NEWER
382 "-newer",
383#endif
384#if ENABLE_FEATURE_FIND_INUM
385 "-inum",
386#endif
387#if ENABLE_FEATURE_FIND_EXEC
388 "-exec",
389#endif
390#if ENABLE_FEATURE_FIND_USER
391 "-user",
392#endif 368#endif
369 };
370
371 static const char *const params[] = {
372 "-a" ,
373 "-o" ,
374 USE_FEATURE_FIND_NOT( "!" ,)
375 "-print" ,
376 USE_FEATURE_FIND_PRINT0("-print0",)
377 "-name" ,
378 USE_FEATURE_FIND_TYPE( "-type" ,)
379 USE_FEATURE_FIND_PERM( "-perm" ,)
380 USE_FEATURE_FIND_MTIME( "-mtime" ,)
381 USE_FEATURE_FIND_MMIN( "-mmin" ,)
382 USE_FEATURE_FIND_NEWER( "-newer" ,)
383 USE_FEATURE_FIND_INUM( "-inum" ,)
384 USE_FEATURE_FIND_EXEC( "-exec" ,)
385 USE_FEATURE_FIND_USER( "-user" ,)
386 USE_FEATURE_FIND_GROUP( "-group" ,)
387 USE_FEATURE_FIND_DEPTH( "-depth" ,)
388 USE_FEATURE_FIND_PAREN( "(" ,)
389 USE_FEATURE_FIND_SIZE( "-prune" ,)
390 USE_FEATURE_FIND_PRUNE( "-size" ,)
393#if ENABLE_DESKTOP 391#if ENABLE_DESKTOP
394 "-and", 392 "-and" ,
395 "-or", 393 "-or" ,
396# if ENABLE_FEATURE_FIND_NOT 394 USE_FEATURE_FIND_NOT( "-not" ,)
397 "-not",
398# endif
399 "(",
400 "-prune",
401 "-size",
402#endif 395#endif
403 NULL 396 NULL
404 }; 397 };
398
399 action*** appp;
400 unsigned cur_group = 0;
401 unsigned cur_action = 0;
402 USE_FEATURE_FIND_NOT( bool invert_flag = 0; )
403
404 /* 'static' doesn't work here! (gcc 4.1.2) */
405 action* alloc_action(int sizeof_struct, action_fp f) 405 action* alloc_action(int sizeof_struct, action_fp f)
406 { 406 {
407 action *ap; 407 action *ap;
@@ -413,6 +413,7 @@ static action*** parse_params(char **argv)
413 USE_FEATURE_FIND_NOT( invert_flag = 0; ) 413 USE_FEATURE_FIND_NOT( invert_flag = 0; )
414 return ap; 414 return ap;
415 } 415 }
416
416#define ALLOC_ACTION(name) (action_##name*)alloc_action(sizeof(action_##name), (action_fp) func_##name) 417#define ALLOC_ACTION(name) (action_##name*)alloc_action(sizeof(action_##name), (action_fp) func_##name)
417 418
418 appp = xzalloc(2 * sizeof(appp[0])); /* appp[0],[1] == NULL */ 419 appp = xzalloc(2 * sizeof(appp[0])); /* appp[0],[1] == NULL */
@@ -436,12 +437,10 @@ static action*** parse_params(char **argv)
436 const char *arg1 = argv[1]; 437 const char *arg1 = argv[1];
437 int parm = index_in_str_array(params, arg); 438 int parm = index_in_str_array(params, arg);
438 /* --- Operators --- */ 439 /* --- Operators --- */
439 if (parm == PARM_a USE_DESKTOP(|| parm == PARM_and)) 440 if (parm == PARM_a USE_DESKTOP(|| parm == PARM_and)) {
440 {
441 /* no further special handling required */ 441 /* no further special handling required */
442 } 442 }
443 else if (parm == PARM_o USE_DESKTOP(|| parm == PARM_or)) 443 else if (parm == PARM_o USE_DESKTOP(|| parm == PARM_or)) {
444 {
445 /* start new OR group */ 444 /* start new OR group */
446 cur_group++; 445 cur_group++;
447 appp = xrealloc(appp, (cur_group+2) * sizeof(*appp)); 446 appp = xrealloc(appp, (cur_group+2) * sizeof(*appp));
@@ -450,31 +449,27 @@ static action*** parse_params(char **argv)
450 cur_action = 0; 449 cur_action = 0;
451 } 450 }
452#if ENABLE_FEATURE_FIND_NOT 451#if ENABLE_FEATURE_FIND_NOT
453 else if (parm == PARM_char_not USE_DESKTOP(|| parm == PARM_not)) 452 else if (parm == PARM_char_not USE_DESKTOP(|| parm == PARM_not)) {
454 {
455 /* also handles "find ! ! -name 'foo*'" */ 453 /* also handles "find ! ! -name 'foo*'" */
456 invert_flag ^= 1; 454 invert_flag ^= 1;
457 } 455 }
458#endif 456#endif
459 457
460 /* --- Tests and actions --- */ 458 /* --- Tests and actions --- */
461 else if (parm == PARM_print) 459 else if (parm == PARM_print) {
462 {
463 need_print = 0; 460 need_print = 0;
464 /* GNU find ignores '!' here: "find ! -print" */ 461 /* GNU find ignores '!' here: "find ! -print" */
465 USE_FEATURE_FIND_NOT( invert_flag = 0; ) 462 USE_FEATURE_FIND_NOT( invert_flag = 0; )
466 (void) ALLOC_ACTION(print); 463 (void) ALLOC_ACTION(print);
467 } 464 }
468#if ENABLE_FEATURE_FIND_PRINT0 465#if ENABLE_FEATURE_FIND_PRINT0
469 else if (parm == PARM_print0) 466 else if (parm == PARM_print0) {
470 {
471 need_print = 0; 467 need_print = 0;
472 USE_FEATURE_FIND_NOT( invert_flag = 0; ) 468 USE_FEATURE_FIND_NOT( invert_flag = 0; )
473 (void) ALLOC_ACTION(print0); 469 (void) ALLOC_ACTION(print0);
474 } 470 }
475#endif 471#endif
476 else if (parm == PARM_name) 472 else if (parm == PARM_name) {
477 {
478 action_name *ap; 473 action_name *ap;
479 if (!*++argv) 474 if (!*++argv)
480 bb_error_msg_and_die(bb_msg_requires_arg, arg); 475 bb_error_msg_and_die(bb_msg_requires_arg, arg);
@@ -482,8 +477,7 @@ static action*** parse_params(char **argv)
482 ap->pattern = arg1; 477 ap->pattern = arg1;
483 } 478 }
484#if ENABLE_FEATURE_FIND_TYPE 479#if ENABLE_FEATURE_FIND_TYPE
485 else if (parm == PARM_type) 480 else if (parm == PARM_type) {
486 {
487 action_type *ap; 481 action_type *ap;
488 if (!*++argv) 482 if (!*++argv)
489 bb_error_msg_and_die(bb_msg_requires_arg, arg); 483 bb_error_msg_and_die(bb_msg_requires_arg, arg);
@@ -498,8 +492,7 @@ static action*** parse_params(char **argv)
498 * -perm -mode All of the permission bits mode are set for the file. 492 * -perm -mode All of the permission bits mode are set for the file.
499 * -perm +mode Any of the permission bits mode are set for the file. 493 * -perm +mode Any of the permission bits mode are set for the file.
500 */ 494 */
501 else if (parm == PARM_perm) 495 else if (parm == PARM_perm) {
502 {
503 action_perm *ap; 496 action_perm *ap;
504 if (!*++argv) 497 if (!*++argv)
505 bb_error_msg_and_die(bb_msg_requires_arg, arg); 498 bb_error_msg_and_die(bb_msg_requires_arg, arg);
@@ -512,8 +505,7 @@ static action*** parse_params(char **argv)
512 } 505 }
513#endif 506#endif
514#if ENABLE_FEATURE_FIND_MTIME 507#if ENABLE_FEATURE_FIND_MTIME
515 else if (parm == PARM_mtime) 508 else if (parm == PARM_mtime) {
516 {
517 action_mtime *ap; 509 action_mtime *ap;
518 if (!*++argv) 510 if (!*++argv)
519 bb_error_msg_and_die(bb_msg_requires_arg, arg); 511 bb_error_msg_and_die(bb_msg_requires_arg, arg);
@@ -523,8 +515,7 @@ static action*** parse_params(char **argv)
523 } 515 }
524#endif 516#endif
525#if ENABLE_FEATURE_FIND_MMIN 517#if ENABLE_FEATURE_FIND_MMIN
526 else if (parm == PARM_mmin) 518 else if (parm == PARM_mmin) {
527 {
528 action_mmin *ap; 519 action_mmin *ap;
529 if (!*++argv) 520 if (!*++argv)
530 bb_error_msg_and_die(bb_msg_requires_arg, arg); 521 bb_error_msg_and_die(bb_msg_requires_arg, arg);
@@ -534,8 +525,7 @@ static action*** parse_params(char **argv)
534 } 525 }
535#endif 526#endif
536#if ENABLE_FEATURE_FIND_NEWER 527#if ENABLE_FEATURE_FIND_NEWER
537 else if (parm == PARM_newer) 528 else if (parm == PARM_newer) {
538 {
539 action_newer *ap; 529 action_newer *ap;
540 struct stat stat_newer; 530 struct stat stat_newer;
541 if (!*++argv) 531 if (!*++argv)
@@ -546,8 +536,7 @@ static action*** parse_params(char **argv)
546 } 536 }
547#endif 537#endif
548#if ENABLE_FEATURE_FIND_INUM 538#if ENABLE_FEATURE_FIND_INUM
549 else if (parm == PARM_inum) 539 else if (parm == PARM_inum) {
550 {
551 action_inum *ap; 540 action_inum *ap;
552 if (!*++argv) 541 if (!*++argv)
553 bb_error_msg_and_die(bb_msg_requires_arg, arg); 542 bb_error_msg_and_die(bb_msg_requires_arg, arg);
@@ -556,8 +545,7 @@ static action*** parse_params(char **argv)
556 } 545 }
557#endif 546#endif
558#if ENABLE_FEATURE_FIND_EXEC 547#if ENABLE_FEATURE_FIND_EXEC
559 else if (parm == PARM_exec) 548 else if (parm == PARM_exec) {
560 {
561 int i; 549 int i;
562 action_exec *ap; 550 action_exec *ap;
563 need_print = 0; 551 need_print = 0;
@@ -582,8 +570,7 @@ static action*** parse_params(char **argv)
582 } 570 }
583#endif 571#endif
584#if ENABLE_FEATURE_FIND_USER 572#if ENABLE_FEATURE_FIND_USER
585 else if (parm == PARM_user) 573 else if (parm == PARM_user) {
586 {
587 action_user *ap; 574 action_user *ap;
588 if (!*++argv) 575 if (!*++argv)
589 bb_error_msg_and_die(bb_msg_requires_arg, arg); 576 bb_error_msg_and_die(bb_msg_requires_arg, arg);
@@ -593,9 +580,24 @@ static action*** parse_params(char **argv)
593 ap->uid = xuname2uid(arg1); 580 ap->uid = xuname2uid(arg1);
594 } 581 }
595#endif 582#endif
596#if ENABLE_DESKTOP 583#if ENABLE_FEATURE_FIND_GROUP
597 else if (parm == PARM_char_brace) 584 else if (parm == PARM_group) {
598 { 585 action_group *ap;
586 if (!*++argv)
587 bb_error_msg_and_die(bb_msg_requires_arg, arg);
588 ap = ALLOC_ACTION(group);
589 ap->gid = bb_strtou(arg1, NULL, 10);
590 if (errno)
591 ap->gid = xgroup2gid(arg1);
592 }
593#endif
594#if ENABLE_FEATURE_FIND_DEPTH
595 else if (parm == PARM_depth) {
596 recurse_flags |= action_depthFirst;
597 }
598#endif
599#if ENABLE_FEATURE_FIND_PAREN
600 else if (parm == PARM_char_brace) {
599 action_paren *ap; 601 action_paren *ap;
600 char **endarg; 602 char **endarg;
601 unsigned nested = 1; 603 unsigned nested = 1;
@@ -616,13 +618,15 @@ static action*** parse_params(char **argv)
616 *endarg = (char*) ")"; /* restore NULLed parameter */ 618 *endarg = (char*) ")"; /* restore NULLed parameter */
617 argv = endarg; 619 argv = endarg;
618 } 620 }
619 else if (parm == PARM_prune) 621#endif
620 { 622#if ENABLE_FEATURE_FIND_PRUNE
623 else if (parm == PARM_prune) {
621 USE_FEATURE_FIND_NOT( invert_flag = 0; ) 624 USE_FEATURE_FIND_NOT( invert_flag = 0; )
622 (void) ALLOC_ACTION(prune); 625 (void) ALLOC_ACTION(prune);
623 } 626 }
624 else if (parm == PARM_size) 627#endif
625 { 628#if ENABLE_FEATURE_FIND_SIZE
629 else if (parm == PARM_size) {
626 action_size *ap; 630 action_size *ap;
627 if (!*++argv) 631 if (!*++argv)
628 bb_error_msg_and_die(bb_msg_requires_arg, arg); 632 bb_error_msg_and_die(bb_msg_requires_arg, arg);
@@ -657,7 +661,7 @@ USE_FEATURE_FIND_XDEV( "-xdev", )
657 break; 661 break;
658 if (ENABLE_FEATURE_FIND_NOT && LONE_CHAR(argv[firstopt], '!')) 662 if (ENABLE_FEATURE_FIND_NOT && LONE_CHAR(argv[firstopt], '!'))
659 break; 663 break;
660#if ENABLE_DESKTOP 664#if ENABLE_FEATURE_FIND_PAREN
661 if (LONE_CHAR(argv[firstopt], '(')) 665 if (LONE_CHAR(argv[firstopt], '('))
662 break; 666 break;
663#endif 667#endif
@@ -706,7 +710,7 @@ USE_FEATURE_FIND_XDEV( "-xdev", )
706 710
707 for (i = 1; i < firstopt; i++) { 711 for (i = 1; i < firstopt; i++) {
708 if (!recursive_action(argv[i], 712 if (!recursive_action(argv[i],
709 action_recurse|(1<<dereference), /* flags */ 713 recurse_flags|(1<<dereference), /* flags */
710 fileAction, /* file action */ 714 fileAction, /* file action */
711 fileAction, /* dir action */ 715 fileAction, /* dir action */
712 NULL, /* user data */ 716 NULL, /* user data */
diff --git a/include/usage.h b/include/usage.h
index 8e0da197c..1889010dd 100644
--- a/include/usage.h
+++ b/include/usage.h
@@ -958,9 +958,11 @@
958 ) USE_FEATURE_FIND_EXEC( \ 958 ) USE_FEATURE_FIND_EXEC( \
959 "\n -exec CMD Execute CMD with all instances of {} replaced by the" \ 959 "\n -exec CMD Execute CMD with all instances of {} replaced by the" \
960 "\n files matching EXPRESSION" \ 960 "\n files matching EXPRESSION" \
961 ) USE_DESKTOP( \ 961 ) USE_FEATURE_FIND_SIZE( \
962 "\n -size N File size is N" \ 962 "\n -size N File size is N" \
963 ) USE_FEATURE_FIND_PRUNE( \
963 "\n -prune Stop traversing current subtree" \ 964 "\n -prune Stop traversing current subtree" \
965 ) USE_FEATURE_FIND_PAREN( \
964 "\n (expr) Group" \ 966 "\n (expr) Group" \
965 ) 967 )
966 968