aboutsummaryrefslogtreecommitdiff
path: root/coreutils
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-08-31 05:15:21 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2009-08-31 05:15:21 +0200
commit44f174e61b9f02e1d9210d292886498cee4aced7 (patch)
tree331109b8cf6d195216a1e8db041f65ca45b26a9b /coreutils
parenta00329ca8edd29c62084e400aa972cfcd0a8ab02 (diff)
downloadbusybox-w32-44f174e61b9f02e1d9210d292886498cee4aced7.tar.gz
busybox-w32-44f174e61b9f02e1d9210d292886498cee4aced7.tar.bz2
busybox-w32-44f174e61b9f02e1d9210d292886498cee4aced7.zip
uniq: shave off whole 10 bytes off, oh my
text data bss dec hex filename 823673 458 6956 831087 cae6f busybox_old 823663 458 6956 831077 cae65 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/uniq.c45
1 files changed, 22 insertions, 23 deletions
diff --git a/coreutils/uniq.c b/coreutils/uniq.c
index 910f46e15..e566dc1bc 100644
--- a/coreutils/uniq.c
+++ b/coreutils/uniq.c
@@ -12,20 +12,6 @@
12 12
13#include "libbb.h" 13#include "libbb.h"
14 14
15static void xgetoptfile_uniq_s(const char *n, int fd)
16{
17 if (n == NULL)
18 return;
19 if ((n[0] == '-') && !n[1])
20 return;
21 /* close(fd); - optimization */
22 xmove_fd(
23 xopen3(n,
24 (fd == STDIN_FILENO) ? O_RDONLY : (O_WRONLY | O_CREAT | O_TRUNC),
25 0666),
26 fd);
27}
28
29int uniq_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 15int uniq_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
30int uniq_main(int argc UNUSED_PARAM, char **argv) 16int uniq_main(int argc UNUSED_PARAM, char **argv)
31{ 17{
@@ -51,15 +37,25 @@ int uniq_main(int argc UNUSED_PARAM, char **argv)
51 opt = getopt32(argv, "cduf:s:w:", &skip_fields, &skip_chars, &max_chars); 37 opt = getopt32(argv, "cduf:s:w:", &skip_fields, &skip_chars, &max_chars);
52 argv += optind; 38 argv += optind;
53 39
54 input_filename = *argv; 40 input_filename = argv[0];
41 if (input_filename) {
42 const char *output;
55 43
56 xgetoptfile_uniq_s(*argv, STDIN_FILENO); 44 if (input_filename[0] != '-' || input_filename[1]) {
57 if (*argv) { 45 close(STDIN_FILENO); /* == 0 */
58 ++argv; 46 xopen(input_filename, O_RDONLY); /* fd will be 0 */
59 } 47 }
60 xgetoptfile_uniq_s(*argv, STDOUT_FILENO); 48 output = argv[1];
61 if (*argv && argv[1]) { 49 if (output) {
62 bb_show_usage(); 50 if (argv[2])
51 bb_show_usage();
52 if (output[0] != '-' || output[1]) {
53 // Won't work with "uniq - FILE" and closed stdin:
54 //close(STDOUT_FILENO);
55 //xopen3(output, O_WRONLY | O_CREAT | O_TRUNC, 0666);
56 xmove_fd(xopen3(output, O_WRONLY | O_CREAT | O_TRUNC, 0666), STDOUT_FILENO);
57 }
58 }
63 } 59 }
64 60
65 cur_compare = cur_line = NULL; /* prime the pump */ 61 cur_compare = cur_line = NULL; /* prime the pump */
@@ -95,7 +91,10 @@ int uniq_main(int argc UNUSED_PARAM, char **argv)
95 91
96 if (old_line) { 92 if (old_line) {
97 if (!(opt & (OPT_d << !!dups))) { /* (if dups, opt & OPT_u) */ 93 if (!(opt & (OPT_d << !!dups))) { /* (if dups, opt & OPT_u) */
98 printf("\0%lu " + (opt & 1), dups + 1); /* 1 == OPT_c */ 94 if (opt & OPT_c) {
95 /* %7lu matches GNU coreutils 6.9 */
96 printf("%7lu ", dups + 1);
97 }
99 printf("%s\n", old_line); 98 printf("%s\n", old_line);
100 } 99 }
101 free(old_line); 100 free(old_line);