Don't comment warnings. Don't put #warnings about warnings. _FIX_ warnings.
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -23,7 +23,7 @@ LIBCOREUTILS_DIR:=$(top_builddir)/coreutils/libcoreutils/ | |
| endif | |
| srcdir=$(top_srcdir)/coreutils/libcoreutils | |
| - | LIBCOREUTILS_SRC:= cp_mv_stat.c getopt_mk_fifo_nod.c xgetoptfile_sort_uniq.c |
| + | LIBCOREUTILS_SRC:= cp_mv_stat.c getopt_mk_fifo_nod.c |
| LIBCOREUTILS_OBJS=$(patsubst %.c,$(LIBCOREUTILS_DIR)%.o, $(LIBCOREUTILS_SRC)) | |
| @@ -1,38 +0,0 @@ | |
| - | /* vi: set sw=4 ts=4: */ |
| - | /* |
| - | * coreutils utility routine |
| - | * |
| - | * Copyright (C) 2003 Manuel Novoa III <[email protected]> |
| - | * |
| - | * This program is free software; you can redistribute it and/or modify |
| - | * it under the terms of the GNU General Public License as published by |
| - | * the Free Software Foundation; either version 2 of the License, or |
| - | * (at your option) any later version. |
| - | * |
| - | * This program is distributed in the hope that it will be useful, |
| - | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| - | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| - | * General Public License for more details. |
| - | * |
| - | * You should have received a copy of the GNU General Public License |
| - | * along with this program; if not, write to the Free Software |
| - | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| - | * |
| - | */ |
| - | |
| - | #include <stdio.h> |
| - | #include <unistd.h> |
| - | #include "libbb.h" |
| - | #include "coreutils.h" |
| - | |
| - | extern FILE *xgetoptfile_sort_uniq(char **argv, const char *mode) |
| - | { |
| - | const char *n; |
| - | |
| - | if ((n = *argv) != NULL) { |
| - | if ((*n != '-') || n[1]) { |
| - | return bb_xfopen(n, mode); |
| - | } |
| - | } |
| - | return (*mode == 'r') ? stdin : stdout; |
| - | } |
| @@ -4,19 +4,7 @@ | |
| * | |
| * Copyright (C) 2003 Manuel Novoa III <[email protected]> | |
| * | |
| - | * This program is free software; you can redistribute it and/or modify |
| - | * it under the terms of the GNU General Public License as published by |
| - | * the Free Software Foundation; either version 2 of the License, or |
| - | * (at your option) any later version. |
| - | * |
| - | * This program is distributed in the hope that it will be useful, |
| - | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| - | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| - | * General Public License for more details. |
| - | * |
| - | * You should have received a copy of the GNU General Public License |
| - | * along with this program; if not, write to the Free Software |
| - | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| + | * Licensed under GPL v2, see file LICENSE in this tarball for details. |
| * | |
| */ | |
| @@ -31,7 +19,21 @@ | |
| #include "busybox.h" | |
| #include "libcoreutils/coreutils.h" | |
| - | static const char uniq_opts[] = "f:s:cdu\0\7\3\5\1\2\4"; |
| + | /* The extra data is flags to make -d and -u switch each other off */ |
| + | static const char uniq_opts[] = "cudf:s:\0\7\3\5\1\2\4"; |
| + | |
| + | #define SHOW_COUNT 1 |
| + | #define SHOW_UNIQUE 2 |
| + | #define SHOW_DUPLICATE 4 |
| + | |
| + | static FILE *open_arg(char **argv, char *mode) |
| + | { |
| + | char *n=*argv; |
| + | |
| + | return (n && *n != '-' && n[1]) ? bb_xfopen(n, mode) : |
| + | *mode=='r' ? stdin : stdout; |
| + | } |
| + | |
| int uniq_main(int argc, char **argv) | |
| { | |
| @@ -39,28 +41,37 @@ int uniq_main(int argc, char **argv) | |
| unsigned long dups, skip_fields, skip_chars, i; | |
| const char *oldline, *oldskipped, *line, *skipped, *input_filename; | |
| int opt; | |
| - | int uniq_flags = 6; /* -u */ |
| + | int uniq_flags = SHOW_UNIQUE | SHOW_DUPLICATE; |
| skip_fields = skip_chars = 0; | |
| while ((opt = getopt(argc, argv, uniq_opts)) > 0) { | |
| if (opt == 'f') skip_fields = bb_xgetularg10(optarg); | |
| else if (opt == 's') skip_chars = bb_xgetularg10(optarg); | |
| + | |
| + | /* This bit uses the extra data at the end of uniq_opts to make |
| + | * -d and -u switch each other off in a very small amount of space */ |
| + | |
| else if ((line = strchr(uniq_opts, opt)) != NULL) { | |
| - | uniq_flags &= line[4]; |
| - | uniq_flags |= line[7]; |
| + | uniq_flags &= line[8]; |
| + | uniq_flags |= line[11]; |
| } else bb_show_usage(); | |
| } | |
| input_filename = *(argv += optind); | |
| - | in = xgetoptfile_sort_uniq(argv, "r"); |
| + | in = open_arg(argv, "r"); |
| if (*argv) ++argv; | |
| - | out = xgetoptfile_sort_uniq(argv, "w"); |
| + | out = open_arg(argv, "w"); |
| if (*argv && argv[1]) bb_show_usage(); | |
| - | oldline = NULL; |
| + | line = skipped = NULL; |
| + | NOT_DUPLICATE: |
| + | oldline = line; |
| + | oldskipped = skipped; |
| + | dups = 0; |
| + | |
| /* gnu uniq ignores newlines */ | |
| while ((line = bb_get_chomped_line_from_file(in)) != NULL) { | |
| skipped = line; | |
| @@ -70,27 +81,21 @@ int uniq_main(int argc, char **argv) | |
| } | |
| for (i = skip_chars ; *skipped && i ; i--) ++skipped; | |
| if (oldline) { | |
| - | if (strcmp(oldskipped, skipped) == 0) { |
| + | if (!strcmp(oldskipped, skipped)) { |
| ++dups; /* Note: Testing for overflow seems excessive. */ | |
| continue; | |
| } | |
| DO_LAST: | |
| - | if ((dups && (uniq_flags & 2)) || (!dups && (uniq_flags & 4))) { |
| - | bb_fprintf(out, "\0%7d\t" + (uniq_flags & 1), dups + 1); |
| + | if (uniq_flags & (dups ? SHOW_DUPLICATE : SHOW_UNIQUE)) { |
| + | bb_fprintf(out, "\0%7d " + (uniq_flags & SHOW_COUNT), dups + 1); |
| bb_fprintf(out, "%s\n", oldline); | |
| } | |
| free((void *)oldline); | |
| } | |
| - | |
| - | oldline = line; |
| - | oldskipped = skipped; |
| - | dups = 0; |
| + | goto NOT_DUPLICATE; |
| } | |
| - | if (oldline) { |
| - | skipped = NULL; |
| - | goto DO_LAST; |
| - | } |
| + | if (oldline) goto DO_LAST; |
| bb_xferror(in, input_filename); | |
| @@ -3041,7 +3041,7 @@ | |
| "\t-f\tforce overwrite an existing file" | |
| #define uniq_trivial_usage \ | |
| - | "[OPTION]... [INPUT [OUTPUT]]" |
| + | "[-fscdu]... [INPUT [OUTPUT]]" |
| #define uniq_full_usage \ | |
| "Discard all but one of successive identical lines from INPUT\n" \ | |
| "(or standard input), writing to OUTPUT (or standard output).\n\n" \ | |
| @@ -0,0 +1,36 @@ | |
| + | #!/bin/sh |
| + | |
| + | # SUSv3 compliant uniq tests. |
| + | # Copyright 2005 by Rob Landley <[email protected]> |
| + | # Licensed under GPL v2, see file LICENSE for details. |
| + | |
| + | # AUDIT: Not full coverage of the spec yet. |
| + | |
| + | if [ ${#COMMAND} -eq 0 ]; then COMMAND=uniq; fi |
| + | . testing.sh |
| + | |
| + | # The basic tests. These should work even with the small busybox. |
| + | #-f skip fields |
| + | #-s skip chars |
| + | #-c occurrences |
| + | #-d dups only |
| + | #-u |
| + | testing "uniq (default to stdin)" "" "one\ntwo\nthree\n" "" \ |
| + | "one\ntwo\ntwo\nthree\nthree\nthree\n" |
| + | testing "uniq - (specify stdin)" "-" "one\ntwo\nthree\n" "" \ |
| + | "one\ntwo\ntwo\nthree\nthree\nthree\n" |
| + | testing "uniq input (specify file)" "input" "one\ntwo\nthree\n" \ |
| + | "one\ntwo\ntwo\nthree\nthree\nthree\n" "" |
| + | testing "uniq input outfile (two files)" "input actual > /dev/null" \ |
| + | "one\ntwo\nthree\n" "one\ntwo\ntwo\nthree\nthree\nthree\n" "" |
| + | #testing "uniq - outfile" "- outfile" "one\ntwo\nthree\n" \ |
| + | # "one\ntwo\ntwo\nthree\nthree\nthree\n" "" |
| + | |
| + | testing "uniq -d" "-d" "two\nthree\n" "" \ |
| + | "one\ntwo\ntwo\nthree\nthree\nthree\n" |
| + | testing "uniq -c" "-c" " 1 one\n 2 two\n 3 three\n" "" \ |
| + | "one\ntwo\ntwo\nthree\nthree\nthree\n" |
| + | # testing "uniq -c -d" |
| + | # testing "uniq infile" |
| + | |
| + | exit $FAILCOUNT |