svn commit: trunk/busybox: coreutils coreutils/libcoreutils include etc...

landley at busybox.net landley at busybox.net
Wed Sep 7 04:18:38 UTC 2005


Author: landley
Date: 2005-09-06 21:18:36 -0700 (Tue, 06 Sep 2005)
New Revision: 11347

Log:
Don't comment warnings.  Don't put #warnings about warnings.  _FIX_ warnings.

This fixes the warning, and makes the binary smaller out of sheer pique.
(Yes, since Manuel did this one it's nice tight code that took several
attempts to shrink, but I was ticked.)

Add the start of a test for uniq; this is about the first 1/3 of the
tests we need for full susv3 coverage of uniq.


Added:
   trunk/busybox/testsuite/uniq.tests

Removed:
   trunk/busybox/coreutils/libcoreutils/xgetoptfile_sort_uniq.c

Modified:
   trunk/busybox/coreutils/libcoreutils/Makefile.in
   trunk/busybox/coreutils/uniq.c
   trunk/busybox/include/usage.h


Changeset:
Modified: trunk/busybox/coreutils/libcoreutils/Makefile.in
===================================================================
--- trunk/busybox/coreutils/libcoreutils/Makefile.in	2005-09-06 21:53:21 UTC (rev 11346)
+++ trunk/busybox/coreutils/libcoreutils/Makefile.in	2005-09-07 04:18:36 UTC (rev 11347)
@@ -23,7 +23,7 @@
 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))
 

Deleted: trunk/busybox/coreutils/libcoreutils/xgetoptfile_sort_uniq.c
===================================================================
--- trunk/busybox/coreutils/libcoreutils/xgetoptfile_sort_uniq.c	2005-09-06 21:53:21 UTC (rev 11346)
+++ trunk/busybox/coreutils/libcoreutils/xgetoptfile_sort_uniq.c	2005-09-07 04:18:36 UTC (rev 11347)
@@ -1,38 +0,0 @@
-/* vi: set sw=4 ts=4: */
-/*
- * coreutils utility routine
- *
- * Copyright (C) 2003  Manuel Novoa III  <mjn3 at codepoet.org>
- *
- * 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;
-}

Modified: trunk/busybox/coreutils/uniq.c
===================================================================
--- trunk/busybox/coreutils/uniq.c	2005-09-06 21:53:21 UTC (rev 11346)
+++ trunk/busybox/coreutils/uniq.c	2005-09-07 04:18:36 UTC (rev 11347)
@@ -4,20 +4,8 @@
  *
  * Copyright (C) 2003  Manuel Novoa III  <mjn3 at codepoet.org>
  *
- * 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.
+ * Licensed under GPL v2, see file LICENSE in this tarball for details.
  *
- * 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
- *
  */
 
 /* BB_AUDIT SUSv3 compliant */
@@ -31,36 +19,59 @@
 #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)
 {
 	FILE *in, *out;
 	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 @@
 		}
 		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);
 

Modified: trunk/busybox/include/usage.h
===================================================================
--- trunk/busybox/include/usage.h	2005-09-06 21:53:21 UTC (rev 11346)
+++ trunk/busybox/include/usage.h	2005-09-07 04:18:36 UTC (rev 11347)
@@ -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" \

Added: trunk/busybox/testsuite/uniq.tests
===================================================================
--- trunk/busybox/testsuite/uniq.tests	2005-09-06 21:53:21 UTC (rev 11346)
+++ trunk/busybox/testsuite/uniq.tests	2005-09-07 04:18:36 UTC (rev 11347)
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# SUSv3 compliant uniq tests.
+# Copyright 2005 by Rob Landley <rob at landley.net>
+# 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


Property changes on: trunk/busybox/testsuite/uniq.tests
___________________________________________________________________
Name: svn:executable
   + *




More information about the busybox-cvs mailing list