diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-03-17 09:09:09 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-03-17 09:09:09 +0000 |
commit | 1d42665b6b0571b9fa5d3b10fbf2dd03382f0ba2 (patch) | |
tree | 7ec8969fc2b07a2b7dc37f96435e5eddf7daf7fd /findutils | |
parent | 62a90cdd7435f09f4bb8673e8b7b213067f9d5cc (diff) | |
download | busybox-w32-1d42665b6b0571b9fa5d3b10fbf2dd03382f0ba2.tar.gz busybox-w32-1d42665b6b0571b9fa5d3b10fbf2dd03382f0ba2.tar.bz2 busybox-w32-1d42665b6b0571b9fa5d3b10fbf2dd03382f0ba2.zip |
*: shrink: use Vladimir's "o+" specifier instead of xatou(opt_param)
function old new delta
getopt32 1370 1385 +15
sulogin_main 490 494 +4
realpath_main 84 86 +2
sleep_main 76 77 +1
mt_main 256 257 +1
printenv_main 75 74 -1
fdformat_main 546 545 -1
usleep_main 44 42 -2
setlogcons_main 77 75 -2
ed_main 2654 2649 -5
deallocvt_main 69 64 -5
addgroup_main 373 368 -5
mkfs_minix_main 2989 2982 -7
tail_main 1221 1213 -8
sv_main 1254 1241 -13
du_main 348 328 -20
tftp_main 325 302 -23
split_main 581 558 -23
nc_main 1000 977 -23
diff_main 891 868 -23
arping_main 1797 1770 -27
ls_main 893 847 -46
od_main 2797 2750 -47
readprofile_main 1944 1895 -49
tcpudpsvd_main 1973 1922 -51
udhcpc_main 2590 2513 -77
grep_main 824 722 -102
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 5/22 up/down: 23/-560) Total: -537 bytes
text data bss dec hex filename
796973 658 7428 805059 c48c3 busybox_old
796479 662 7420 804561 c46d1 busybox_unstripped
Diffstat (limited to 'findutils')
-rw-r--r-- | findutils/grep.c | 48 |
1 files changed, 21 insertions, 27 deletions
diff --git a/findutils/grep.c b/findutils/grep.c index c4cfcb852..259026ee5 100644 --- a/findutils/grep.c +++ b/findutils/grep.c | |||
@@ -7,7 +7,7 @@ | |||
7 | * | 7 | * |
8 | * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. | 8 | * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. |
9 | */ | 9 | */ |
10 | /* BB_AUDIT SUSv3 defects - unsupported option -x. */ | 10 | /* BB_AUDIT SUSv3 defects - unsupported option -x "match whole line only". */ |
11 | /* BB_AUDIT GNU defects - always acts as -a. */ | 11 | /* BB_AUDIT GNU defects - always acts as -a. */ |
12 | /* http://www.opengroup.org/onlinepubs/007904975/utilities/grep.html */ | 12 | /* http://www.opengroup.org/onlinepubs/007904975/utilities/grep.html */ |
13 | /* | 13 | /* |
@@ -299,7 +299,7 @@ static int grep_file(FILE *file) | |||
299 | free(before_buf[curpos]); | 299 | free(before_buf[curpos]); |
300 | before_buf[curpos] = line; | 300 | before_buf[curpos] = line; |
301 | curpos = (curpos + 1) % lines_before; | 301 | curpos = (curpos + 1) % lines_before; |
302 | /* avoid free(line) - we took line */ | 302 | /* avoid free(line) - we took the line */ |
303 | line = NULL; | 303 | line = NULL; |
304 | } | 304 | } |
305 | } | 305 | } |
@@ -371,7 +371,10 @@ static void load_regexes_from_file(llist_t *fopt) | |||
371 | } | 371 | } |
372 | } | 372 | } |
373 | 373 | ||
374 | static int file_action_grep(const char *filename, struct stat *statbuf ATTRIBUTE_UNUSED, void* matched, int depth ATTRIBUTE_UNUSED) | 374 | static int file_action_grep(const char *filename, |
375 | struct stat *statbuf ATTRIBUTE_UNUSED, | ||
376 | void* matched, | ||
377 | int depth ATTRIBUTE_UNUSED) | ||
375 | { | 378 | { |
376 | FILE *file = fopen(filename, "r"); | 379 | FILE *file = fopen(filename, "r"); |
377 | if (file == NULL) { | 380 | if (file == NULL) { |
@@ -405,35 +408,28 @@ int grep_main(int argc, char **argv) | |||
405 | { | 408 | { |
406 | FILE *file; | 409 | FILE *file; |
407 | int matched; | 410 | int matched; |
408 | char *mopt; | ||
409 | llist_t *fopt = NULL; | 411 | llist_t *fopt = NULL; |
410 | 412 | ||
411 | /* do normal option parsing */ | 413 | /* do normal option parsing */ |
412 | #if ENABLE_FEATURE_GREP_CONTEXT | 414 | #if ENABLE_FEATURE_GREP_CONTEXT |
413 | char *slines_after; | 415 | int Copt; |
414 | char *slines_before; | ||
415 | char *Copt; | ||
416 | 416 | ||
417 | opt_complementary = "H-h:e::f::C-AB"; | 417 | /* -H unsets -h; -C unsets -A,-B; -e,-f are lists; |
418 | * -m,-A,-B,-C have numeric param */ | ||
419 | opt_complementary = "H-h:C-AB:e::f::m+:A+:B+:C+"; | ||
418 | getopt32(argv, | 420 | getopt32(argv, |
419 | OPTSTR_GREP, | 421 | OPTSTR_GREP, |
420 | &pattern_head, &fopt, &mopt, | 422 | &pattern_head, &fopt, &max_matches, |
421 | &slines_after, &slines_before, &Copt); | 423 | &lines_after, &lines_before, &Copt); |
422 | 424 | ||
423 | if (option_mask32 & OPT_C) { | 425 | if (option_mask32 & OPT_C) { |
424 | /* -C unsets prev -A and -B, but following -A or -B | 426 | /* -C unsets prev -A and -B, but following -A or -B |
425 | may override it */ | 427 | may override it */ |
426 | if (!(option_mask32 & OPT_A)) /* not overridden */ | 428 | if (!(option_mask32 & OPT_A)) /* not overridden */ |
427 | slines_after = Copt; | 429 | lines_after = Copt; |
428 | if (!(option_mask32 & OPT_B)) /* not overridden */ | 430 | if (!(option_mask32 & OPT_B)) /* not overridden */ |
429 | slines_before = Copt; | 431 | lines_before = Copt; |
430 | option_mask32 |= OPT_A|OPT_B; /* for parser */ | 432 | //option_mask32 |= OPT_A|OPT_B; /* for parser */ |
431 | } | ||
432 | if (option_mask32 & OPT_A) { | ||
433 | lines_after = xatoi_u(slines_after); | ||
434 | } | ||
435 | if (option_mask32 & OPT_B) { | ||
436 | lines_before = xatoi_u(slines_before); | ||
437 | } | 433 | } |
438 | /* sanity checks */ | 434 | /* sanity checks */ |
439 | if (option_mask32 & (OPT_c|OPT_q|OPT_l|OPT_L)) { | 435 | if (option_mask32 & (OPT_c|OPT_q|OPT_l|OPT_L)) { |
@@ -444,13 +440,11 @@ int grep_main(int argc, char **argv) | |||
444 | before_buf = xzalloc(lines_before * sizeof(char *)); | 440 | before_buf = xzalloc(lines_before * sizeof(char *)); |
445 | #else | 441 | #else |
446 | /* with auto sanity checks */ | 442 | /* with auto sanity checks */ |
447 | opt_complementary = "H-h:e::f::c-n:q-n:l-n"; | 443 | /* -H unsets -h; -c,-q or -l unset -n; -e,-f are lists; -m N */ |
444 | opt_complementary = "H-h:c-n:q-n:l-n:e::f::m+"; | ||
448 | getopt32(argv, OPTSTR_GREP, | 445 | getopt32(argv, OPTSTR_GREP, |
449 | &pattern_head, &fopt, &mopt); | 446 | &pattern_head, &fopt, &max_matches); |
450 | #endif | 447 | #endif |
451 | if (option_mask32 & OPT_m) { | ||
452 | max_matches = xatoi_u(mopt); | ||
453 | } | ||
454 | invert_search = ((option_mask32 & OPT_v) != 0); /* 0 | 1 */ | 448 | invert_search = ((option_mask32 & OPT_v) != 0); /* 0 | 1 */ |
455 | 449 | ||
456 | if (pattern_head != NULL) { | 450 | if (pattern_head != NULL) { |
@@ -481,8 +475,8 @@ int grep_main(int argc, char **argv) | |||
481 | argv += optind; | 475 | argv += optind; |
482 | argc -= optind; | 476 | argc -= optind; |
483 | 477 | ||
484 | /* if we didn't get a pattern from a -e and no command file was specified, | 478 | /* if we didn't get a pattern from -e and no command file was specified, |
485 | * argv[optind] should be the pattern. no pattern, no worky */ | 479 | * first parameter should be the pattern. no pattern, no worky */ |
486 | if (pattern_head == NULL) { | 480 | if (pattern_head == NULL) { |
487 | char *pattern; | 481 | char *pattern; |
488 | if (*argv == NULL) | 482 | if (*argv == NULL) |
@@ -508,7 +502,7 @@ int grep_main(int argc, char **argv) | |||
508 | do { | 502 | do { |
509 | cur_file = *argv++; | 503 | cur_file = *argv++; |
510 | file = stdin; | 504 | file = stdin; |
511 | if (!cur_file || (*cur_file == '-' && !cur_file[1])) { | 505 | if (!cur_file || LONE_DASH(cur_file)) { |
512 | cur_file = "(standard input)"; | 506 | cur_file = "(standard input)"; |
513 | } else { | 507 | } else { |
514 | if (option_mask32 & OPT_r) { | 508 | if (option_mask32 & OPT_r) { |