diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-07-06 20:35:35 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-07-06 20:35:35 +0200 |
commit | abe22cd17b182153bc883e7d9e3cb04eb2c449ff (patch) | |
tree | e80e7c8303596af1ad304e2a3bdcd5fce99c2a57 | |
parent | 4a85d56c4cda90d0c175f29eb320375d14ead507 (diff) | |
download | busybox-w32-abe22cd17b182153bc883e7d9e3cb04eb2c449ff.tar.gz busybox-w32-abe22cd17b182153bc883e7d9e3cb04eb2c449ff.tar.bz2 busybox-w32-abe22cd17b182153bc883e7d9e3cb04eb2c449ff.zip |
find: implement -quit
function old new delta
packed_usage 32816 32846 +30
find_main 446 464 +18
func_quit - 13 +13
parse_params 1495 1505 +10
static.params 210 216 +6
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 4/0 up/down: 77/0) Total: 77 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | findutils/find.c | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/findutils/find.c b/findutils/find.c index 07321c81a..72732615b 100644 --- a/findutils/find.c +++ b/findutils/find.c | |||
@@ -182,6 +182,13 @@ | |||
182 | //config: If the file is a directory, don't descend into it. Useful for | 182 | //config: If the file is a directory, don't descend into it. Useful for |
183 | //config: exclusion .svn and CVS directories. | 183 | //config: exclusion .svn and CVS directories. |
184 | //config: | 184 | //config: |
185 | //config:config FEATURE_FIND_QUIT | ||
186 | //config: bool "Enable -quit: exit" | ||
187 | //config: default y | ||
188 | //config: depends on FIND | ||
189 | //config: help | ||
190 | //config: If this action is reached, 'find' exits. | ||
191 | //config: | ||
185 | //config:config FEATURE_FIND_DELETE | 192 | //config:config FEATURE_FIND_DELETE |
186 | //config: bool "Enable -delete: delete files/dirs" | 193 | //config: bool "Enable -delete: delete files/dirs" |
187 | //config: default y | 194 | //config: default y |
@@ -318,6 +325,9 @@ | |||
318 | //usage: IF_FEATURE_FIND_DELETE( | 325 | //usage: IF_FEATURE_FIND_DELETE( |
319 | //usage: "\n -delete Delete current file/directory. Turns on -depth option" | 326 | //usage: "\n -delete Delete current file/directory. Turns on -depth option" |
320 | //usage: ) | 327 | //usage: ) |
328 | //usage: IF_FEATURE_FIND_QUIT( | ||
329 | //usage: "\n -quit Exit" | ||
330 | //usage: ) | ||
321 | //usage: | 331 | //usage: |
322 | //usage:#define find_example_usage | 332 | //usage:#define find_example_usage |
323 | //usage: "$ find / -name passwd\n" | 333 | //usage: "$ find / -name passwd\n" |
@@ -375,6 +385,7 @@ IF_FEATURE_FIND_SIZE( ACTS(size, char size_char; off_t size;)) | |||
375 | IF_FEATURE_FIND_CONTEXT(ACTS(context, security_context_t context;)) | 385 | IF_FEATURE_FIND_CONTEXT(ACTS(context, security_context_t context;)) |
376 | IF_FEATURE_FIND_PAREN( ACTS(paren, action ***subexpr;)) | 386 | IF_FEATURE_FIND_PAREN( ACTS(paren, action ***subexpr;)) |
377 | IF_FEATURE_FIND_PRUNE( ACTS(prune)) | 387 | IF_FEATURE_FIND_PRUNE( ACTS(prune)) |
388 | IF_FEATURE_FIND_QUIT( ACTS(quit)) | ||
378 | IF_FEATURE_FIND_DELETE( ACTS(delete)) | 389 | IF_FEATURE_FIND_DELETE( ACTS(delete)) |
379 | IF_FEATURE_FIND_EXEC( ACTS(exec, | 390 | IF_FEATURE_FIND_EXEC( ACTS(exec, |
380 | char **exec_argv; /* -exec ARGS */ | 391 | char **exec_argv; /* -exec ARGS */ |
@@ -402,6 +413,7 @@ struct globals { | |||
402 | action ***actions; | 413 | action ***actions; |
403 | smallint need_print; | 414 | smallint need_print; |
404 | smallint xdev_on; | 415 | smallint xdev_on; |
416 | smalluint exitstatus; | ||
405 | recurse_flags_t recurse_flags; | 417 | recurse_flags_t recurse_flags; |
406 | IF_FEATURE_FIND_EXEC_PLUS(unsigned max_argv_len;) | 418 | IF_FEATURE_FIND_EXEC_PLUS(unsigned max_argv_len;) |
407 | } FIX_ALIASING; | 419 | } FIX_ALIASING; |
@@ -774,6 +786,12 @@ ACTF(prune) | |||
774 | return SKIP + TRUE; | 786 | return SKIP + TRUE; |
775 | } | 787 | } |
776 | #endif | 788 | #endif |
789 | #if ENABLE_FEATURE_FIND_QUIT | ||
790 | ACTF(quit) | ||
791 | { | ||
792 | exit(G.exitstatus); | ||
793 | } | ||
794 | #endif | ||
777 | #if ENABLE_FEATURE_FIND_DELETE | 795 | #if ENABLE_FEATURE_FIND_DELETE |
778 | ACTF(delete) | 796 | ACTF(delete) |
779 | { | 797 | { |
@@ -954,6 +972,7 @@ static action*** parse_params(char **argv) | |||
954 | PARM_print , | 972 | PARM_print , |
955 | IF_FEATURE_FIND_PRINT0( PARM_print0 ,) | 973 | IF_FEATURE_FIND_PRINT0( PARM_print0 ,) |
956 | IF_FEATURE_FIND_PRUNE( PARM_prune ,) | 974 | IF_FEATURE_FIND_PRUNE( PARM_prune ,) |
975 | IF_FEATURE_FIND_QUIT( PARM_quit ,) | ||
957 | IF_FEATURE_FIND_DELETE( PARM_delete ,) | 976 | IF_FEATURE_FIND_DELETE( PARM_delete ,) |
958 | IF_FEATURE_FIND_EXEC( PARM_exec ,) | 977 | IF_FEATURE_FIND_EXEC( PARM_exec ,) |
959 | IF_FEATURE_FIND_PAREN( PARM_char_brace,) | 978 | IF_FEATURE_FIND_PAREN( PARM_char_brace,) |
@@ -997,6 +1016,7 @@ static action*** parse_params(char **argv) | |||
997 | "-print\0" | 1016 | "-print\0" |
998 | IF_FEATURE_FIND_PRINT0( "-print0\0" ) | 1017 | IF_FEATURE_FIND_PRINT0( "-print0\0" ) |
999 | IF_FEATURE_FIND_PRUNE( "-prune\0" ) | 1018 | IF_FEATURE_FIND_PRUNE( "-prune\0" ) |
1019 | IF_FEATURE_FIND_QUIT( "-quit\0" ) | ||
1000 | IF_FEATURE_FIND_DELETE( "-delete\0" ) | 1020 | IF_FEATURE_FIND_DELETE( "-delete\0" ) |
1001 | IF_FEATURE_FIND_EXEC( "-exec\0" ) | 1021 | IF_FEATURE_FIND_EXEC( "-exec\0" ) |
1002 | IF_FEATURE_FIND_PAREN( "(\0" ) | 1022 | IF_FEATURE_FIND_PAREN( "(\0" ) |
@@ -1152,6 +1172,12 @@ static action*** parse_params(char **argv) | |||
1152 | (void) ALLOC_ACTION(prune); | 1172 | (void) ALLOC_ACTION(prune); |
1153 | } | 1173 | } |
1154 | #endif | 1174 | #endif |
1175 | #if ENABLE_FEATURE_FIND_QUIT | ||
1176 | else if (parm == PARM_quit) { | ||
1177 | dbg("%d", __LINE__); | ||
1178 | (void) ALLOC_ACTION(quit); | ||
1179 | } | ||
1180 | #endif | ||
1155 | #if ENABLE_FEATURE_FIND_DELETE | 1181 | #if ENABLE_FEATURE_FIND_DELETE |
1156 | else if (parm == PARM_delete) { | 1182 | else if (parm == PARM_delete) { |
1157 | dbg("%d", __LINE__); | 1183 | dbg("%d", __LINE__); |
@@ -1401,7 +1427,7 @@ static action*** parse_params(char **argv) | |||
1401 | int find_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 1427 | int find_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
1402 | int find_main(int argc UNUSED_PARAM, char **argv) | 1428 | int find_main(int argc UNUSED_PARAM, char **argv) |
1403 | { | 1429 | { |
1404 | int i, firstopt, status = EXIT_SUCCESS; | 1430 | int i, firstopt; |
1405 | char **past_HLP, *saved; | 1431 | char **past_HLP, *saved; |
1406 | 1432 | ||
1407 | INIT_G(); | 1433 | INIT_G(); |
@@ -1475,10 +1501,10 @@ int find_main(int argc UNUSED_PARAM, char **argv) | |||
1475 | NULL, /* user data */ | 1501 | NULL, /* user data */ |
1476 | 0) /* depth */ | 1502 | 0) /* depth */ |
1477 | ) { | 1503 | ) { |
1478 | status |= EXIT_FAILURE; | 1504 | G.exitstatus |= EXIT_FAILURE; |
1479 | } | 1505 | } |
1480 | } | 1506 | } |
1481 | 1507 | ||
1482 | IF_FEATURE_FIND_EXEC_PLUS(status |= flush_exec_plus();) | 1508 | IF_FEATURE_FIND_EXEC_PLUS(G.exitstatus |= flush_exec_plus();) |
1483 | return status; | 1509 | return G.exitstatus; |
1484 | } | 1510 | } |