diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-06-13 22:49:08 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-06-13 22:49:08 +0200 |
commit | 16635cc2e052897ce7c2d4989acd0b706c3ac3dd (patch) | |
tree | 35af25c96f7f6e6340c043a91b10f46593c6afce /coreutils | |
parent | a3dcee3e8a2d41e90cc235fd407dff9fe99d8604 (diff) | |
download | busybox-w32-16635cc2e052897ce7c2d4989acd0b706c3ac3dd.tar.gz busybox-w32-16635cc2e052897ce7c2d4989acd0b706c3ac3dd.tar.bz2 busybox-w32-16635cc2e052897ce7c2d4989acd0b706c3ac3dd.zip |
test, tcpsvd, tcpsvd: shrink
function old new delta
nexpr 825 826 +1
tcpudpsvd_main 1830 1822 -8
test_main 257 247 -10
binop 584 525 -59
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 1/-77) Total: -76 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'coreutils')
-rw-r--r-- | coreutils/test.c | 52 |
1 files changed, 33 insertions, 19 deletions
diff --git a/coreutils/test.c b/coreutils/test.c index ae40192a2..cfaf4ca5d 100644 --- a/coreutils/test.c +++ b/coreutils/test.c | |||
@@ -51,39 +51,49 @@ | |||
51 | 51 | ||
52 | enum token { | 52 | enum token { |
53 | EOI, | 53 | EOI, |
54 | FILRD, | 54 | |
55 | FILRD, /* file access */ | ||
55 | FILWR, | 56 | FILWR, |
56 | FILEX, | 57 | FILEX, |
58 | |||
57 | FILEXIST, | 59 | FILEXIST, |
58 | FILREG, | 60 | |
61 | FILREG, /* file type */ | ||
59 | FILDIR, | 62 | FILDIR, |
60 | FILCDEV, | 63 | FILCDEV, |
61 | FILBDEV, | 64 | FILBDEV, |
62 | FILFIFO, | 65 | FILFIFO, |
63 | FILSOCK, | 66 | FILSOCK, |
67 | |||
64 | FILSYM, | 68 | FILSYM, |
65 | FILGZ, | 69 | FILGZ, |
66 | FILTT, | 70 | FILTT, |
67 | FILSUID, | 71 | |
72 | FILSUID, /* file bit */ | ||
68 | FILSGID, | 73 | FILSGID, |
69 | FILSTCK, | 74 | FILSTCK, |
70 | FILNT, | 75 | |
76 | FILNT, /* file ops */ | ||
71 | FILOT, | 77 | FILOT, |
72 | FILEQ, | 78 | FILEQ, |
79 | |||
73 | FILUID, | 80 | FILUID, |
74 | FILGID, | 81 | FILGID, |
75 | STREZ, | 82 | |
83 | STREZ, /* str ops */ | ||
76 | STRNZ, | 84 | STRNZ, |
77 | STREQ, | 85 | STREQ, |
78 | STRNE, | 86 | STRNE, |
79 | STRLT, | 87 | STRLT, |
80 | STRGT, | 88 | STRGT, |
81 | INTEQ, | 89 | |
90 | INTEQ, /* int ops */ | ||
82 | INTNE, | 91 | INTNE, |
83 | INTGE, | 92 | INTGE, |
84 | INTGT, | 93 | INTGT, |
85 | INTLE, | 94 | INTLE, |
86 | INTLT, | 95 | INTLT, |
96 | |||
87 | UNOT, | 97 | UNOT, |
88 | BAND, | 98 | BAND, |
89 | BOR, | 99 | BOR, |
@@ -385,8 +395,8 @@ static int binop(void) | |||
385 | return val1 > val2; | 395 | return val1 > val2; |
386 | if (op->op_num == INTLE) | 396 | if (op->op_num == INTLE) |
387 | return val1 <= val2; | 397 | return val1 <= val2; |
388 | if (op->op_num == INTLT) | 398 | /*if (op->op_num == INTLT)*/ |
389 | return val1 < val2; | 399 | return val1 < val2; |
390 | } | 400 | } |
391 | if (is_str_op(op->op_num)) { | 401 | if (is_str_op(op->op_num)) { |
392 | val1 = strcmp(opnd1, opnd2); | 402 | val1 = strcmp(opnd1, opnd2); |
@@ -396,8 +406,8 @@ static int binop(void) | |||
396 | return val1 != 0; | 406 | return val1 != 0; |
397 | if (op->op_num == STRLT) | 407 | if (op->op_num == STRLT) |
398 | return val1 < 0; | 408 | return val1 < 0; |
399 | if (op->op_num == STRGT) | 409 | /*if (op->op_num == STRGT)*/ |
400 | return val1 > 0; | 410 | return val1 > 0; |
401 | } | 411 | } |
402 | /* We are sure that these three are by now the only binops we didn't check | 412 | /* We are sure that these three are by now the only binops we didn't check |
403 | * yet, so we do not check if the class is correct: | 413 | * yet, so we do not check if the class is correct: |
@@ -412,25 +422,29 @@ static int binop(void) | |||
412 | return b1.st_mtime > b2.st_mtime; | 422 | return b1.st_mtime > b2.st_mtime; |
413 | if (op->op_num == FILOT) | 423 | if (op->op_num == FILOT) |
414 | return b1.st_mtime < b2.st_mtime; | 424 | return b1.st_mtime < b2.st_mtime; |
415 | if (op->op_num == FILEQ) | 425 | /*if (op->op_num == FILEQ)*/ |
416 | return b1.st_dev == b2.st_dev && b1.st_ino == b2.st_ino; | 426 | return b1.st_dev == b2.st_dev && b1.st_ino == b2.st_ino; |
417 | } | 427 | } |
418 | return 1; /* NOTREACHED */ | 428 | /*return 1; - NOTREACHED */ |
419 | } | 429 | } |
420 | 430 | ||
421 | 431 | ||
422 | static void initialize_group_array(void) | 432 | static void initialize_group_array(void) |
423 | { | 433 | { |
424 | ngroups = getgroups(0, NULL); | 434 | int n; |
425 | if (ngroups > 0) { | 435 | |
436 | /* getgroups may be expensive, try to use it only once */ | ||
437 | ngroups = 32; | ||
438 | do { | ||
426 | /* FIXME: ash tries so hard to not die on OOM, | 439 | /* FIXME: ash tries so hard to not die on OOM, |
427 | * and we spoil it with just one xrealloc here */ | 440 | * and we spoil it with just one xrealloc here */ |
428 | /* We realloc, because test_main can be entered repeatedly by shell. | 441 | /* We realloc, because test_main can be entered repeatedly by shell. |
429 | * Testcase (ash): 'while true; do test -x some_file; done' | 442 | * Testcase (ash): 'while true; do test -x some_file; done' |
430 | * and watch top. (some_file must have owner != you) */ | 443 | * and watch top. (some_file must have owner != you) */ |
431 | group_array = xrealloc(group_array, ngroups * sizeof(gid_t)); | 444 | n = ngroups; |
432 | getgroups(ngroups, group_array); | 445 | group_array = xrealloc(group_array, n * sizeof(gid_t)); |
433 | } | 446 | ngroups = getgroups(n, group_array); |
447 | } while (ngroups > n); | ||
434 | } | 448 | } |
435 | 449 | ||
436 | 450 | ||
@@ -717,7 +731,7 @@ int test_main(int argc, char **argv) | |||
717 | * isn't likely in the case of a shell. paranoia | 731 | * isn't likely in the case of a shell. paranoia |
718 | * prevails... | 732 | * prevails... |
719 | */ | 733 | */ |
720 | ngroups = 0; | 734 | /*ngroups = 0; - done by INIT_S() */ |
721 | 735 | ||
722 | //argc--; | 736 | //argc--; |
723 | argv++; | 737 | argv++; |