svn commit: r200442 - in head: tools/regression/usr.bin
tools/regression/usr.bin/comm usr.bin/comm
Jaakko Heinonen
jh at FreeBSD.org
Sat Dec 12 10:18:46 PST 2009
Author: jh
Date: Sat Dec 12 18:18:46 2009
New Revision: 200442
URL: http://svn.freebsd.org/changeset/base/200442
Log:
Don't read the newline character to line buffer because lines are passed
to wcscoll(3). Newline characters could cause incorrect results when
comparing lines.
Also, if an input line didn't contain a newline character, it was
omitted from the output. According to my interpretation, SUSv3 requires
that the newline is always printed.
Add regression tests for the cases. [1]
PR: bin/140976
Submitted by: D'Arcy Cain (original version) [1]
Approved by: trasz (mentor)
Added:
head/tools/regression/usr.bin/comm/
head/tools/regression/usr.bin/comm/Makefile (contents, props changed)
head/tools/regression/usr.bin/comm/regress.00.out (contents, props changed)
head/tools/regression/usr.bin/comm/regress.00a.in (contents, props changed)
head/tools/regression/usr.bin/comm/regress.00b.in (contents, props changed)
head/tools/regression/usr.bin/comm/regress.01.out (contents, props changed)
head/tools/regression/usr.bin/comm/regress.01a.in (contents, props changed)
head/tools/regression/usr.bin/comm/regress.01b.in (contents, props changed)
head/tools/regression/usr.bin/comm/regress.02.out (contents, props changed)
head/tools/regression/usr.bin/comm/regress.02a.in (contents, props changed)
head/tools/regression/usr.bin/comm/regress.02b.in (contents, props changed)
head/tools/regression/usr.bin/comm/regress.sh (contents, props changed)
head/tools/regression/usr.bin/comm/regress.t (contents, props changed)
Modified:
head/tools/regression/usr.bin/Makefile
head/usr.bin/comm/comm.c
Modified: head/tools/regression/usr.bin/Makefile
==============================================================================
--- head/tools/regression/usr.bin/Makefile Sat Dec 12 18:04:50 2009 (r200441)
+++ head/tools/regression/usr.bin/Makefile Sat Dec 12 18:18:46 2009 (r200442)
@@ -1,5 +1,5 @@
# $FreeBSD$
-SUBDIR= calendar file2c join jot m4 printf sed tr uudecode uuencode xargs lastcomm
+SUBDIR= calendar comm file2c join jot m4 printf sed tr uudecode uuencode xargs lastcomm
.include <bsd.subdir.mk>
Added: head/tools/regression/usr.bin/comm/Makefile
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/usr.bin/comm/Makefile Sat Dec 12 18:18:46 2009 (r200442)
@@ -0,0 +1,4 @@
+# $FreeBSD$
+
+all:
+ @m4 ${.CURDIR}/../regress.m4 ${.CURDIR}/regress.sh | sh /dev/stdin ${.CURDIR}
Added: head/tools/regression/usr.bin/comm/regress.00.out
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/usr.bin/comm/regress.00.out Sat Dec 12 18:18:46 2009 (r200442)
@@ -0,0 +1,2 @@
+a b
+e f g
Added: head/tools/regression/usr.bin/comm/regress.00a.in
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/usr.bin/comm/regress.00a.in Sat Dec 12 18:18:46 2009 (r200442)
@@ -0,0 +1,5 @@
+a b
+c d
+e f
+e f g
+h i
Added: head/tools/regression/usr.bin/comm/regress.00b.in
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/usr.bin/comm/regress.00b.in Sat Dec 12 18:18:46 2009 (r200442)
@@ -0,0 +1,2 @@
+a b
+e f g
Added: head/tools/regression/usr.bin/comm/regress.01.out
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/usr.bin/comm/regress.01.out Sat Dec 12 18:18:46 2009 (r200442)
@@ -0,0 +1,2 @@
+a b
+e f g
Added: head/tools/regression/usr.bin/comm/regress.01a.in
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/usr.bin/comm/regress.01a.in Sat Dec 12 18:18:46 2009 (r200442)
@@ -0,0 +1,5 @@
+a b
+c d
+e f
+e f g
+h i
Added: head/tools/regression/usr.bin/comm/regress.01b.in
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/usr.bin/comm/regress.01b.in Sat Dec 12 18:18:46 2009 (r200442)
@@ -0,0 +1,2 @@
+a b
+e f g
Added: head/tools/regression/usr.bin/comm/regress.02.out
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/usr.bin/comm/regress.02.out Sat Dec 12 18:18:46 2009 (r200442)
@@ -0,0 +1,5 @@
+a
+b
+ c
+ d
+ e
Added: head/tools/regression/usr.bin/comm/regress.02a.in
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/usr.bin/comm/regress.02a.in Sat Dec 12 18:18:46 2009 (r200442)
@@ -0,0 +1,3 @@
+a
+b
+c
\ No newline at end of file
Added: head/tools/regression/usr.bin/comm/regress.02b.in
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/usr.bin/comm/regress.02b.in Sat Dec 12 18:18:46 2009 (r200442)
@@ -0,0 +1,3 @@
+c
+d
+e
\ No newline at end of file
Added: head/tools/regression/usr.bin/comm/regress.sh
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/usr.bin/comm/regress.sh Sat Dec 12 18:18:46 2009 (r200442)
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+LC_ALL=C; export LC_ALL
+
+echo 1..3
+
+REGRESSION_START($1)
+
+REGRESSION_TEST(`00', `comm -12 regress.00a.in regress.00b.in')
+REGRESSION_TEST(`01', `comm -12 regress.01a.in regress.01b.in')
+REGRESSION_TEST(`02', `comm regress.02a.in regress.02b.in')
+
+REGRESSION_END()
Added: head/tools/regression/usr.bin/comm/regress.t
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/regression/usr.bin/comm/regress.t Sat Dec 12 18:18:46 2009 (r200442)
@@ -0,0 +1,6 @@
+#!/bin/sh
+# $FreeBSD$
+
+cd `dirname $0`
+
+m4 ../regress.m4 regress.sh | sh
Modified: head/usr.bin/comm/comm.c
==============================================================================
--- head/usr.bin/comm/comm.c Sat Dec 12 18:04:50 2009 (r200441)
+++ head/usr.bin/comm/comm.c Sat Dec 12 18:18:46 2009 (r200442)
@@ -163,7 +163,7 @@ main(int argc, char *argv[])
if (!comp) {
read1 = read2 = 1;
if (col3 != NULL)
- (void)printf("%ls%ls", col3, line1);
+ (void)printf("%ls%ls\n", col3, line1);
continue;
}
@@ -172,12 +172,12 @@ main(int argc, char *argv[])
read1 = 1;
read2 = 0;
if (col1 != NULL)
- (void)printf("%ls%ls", col1, line1);
+ (void)printf("%ls%ls\n", col1, line1);
} else {
read1 = 0;
read2 = 1;
if (col2 != NULL)
- (void)printf("%ls%ls", col2, line2);
+ (void)printf("%ls%ls\n", col2, line2);
}
}
exit(0);
@@ -190,19 +190,16 @@ getline(wchar_t *buf, size_t *buflen, FI
wint_t ch;
bufpos = 0;
- do {
- if ((ch = getwc(fp)) != WEOF) {
- if (bufpos + 2 >= *buflen) {
- *buflen = *buflen * 2;
- buf = reallocf(buf, *buflen * sizeof(*buf));
- if (buf == NULL)
- return (NULL);
- }
- buf[bufpos++] = ch;
+ while ((ch = getwc(fp)) != WEOF && ch != '\n') {
+ if (bufpos + 1 >= *buflen) {
+ *buflen = *buflen * 2;
+ buf = reallocf(buf, *buflen * sizeof(*buf));
+ if (buf == NULL)
+ return (NULL);
}
- } while (ch != WEOF && ch != '\n');
- if (bufpos + 1 != *buflen)
- buf[bufpos] = '\0';
+ buf[bufpos++] = ch;
+ }
+ buf[bufpos] = '\0';
return (bufpos != 0 || ch == '\n' ? buf : NULL);
}
@@ -212,7 +209,7 @@ show(FILE *fp, const char *fn, const wch
{
do {
- (void)printf("%ls%ls", offset, buf);
+ (void)printf("%ls%ls\n", offset, buf);
} while ((buf = getline(buf, buflen, fp)) != NULL);
if (ferror(fp))
err(1, "%s", fn);
More information about the svn-src-all
mailing list