summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/commands.sh.in2
-rw-r--r--tests/expected/ts-col-multibyte1
-rw-r--r--tests/functions.sh5
-rw-r--r--tests/input/ts-col-multibyte1
-rwxr-xr-xtests/ts-col-multibyte17
-rw-r--r--text-utils/col.c15
6 files changed, 37 insertions, 4 deletions
diff --git a/tests/commands.sh.in b/tests/commands.sh.in
index 4345a28f5..92deda21d 100644
--- a/tests/commands.sh.in
+++ b/tests/commands.sh.in
@@ -11,3 +11,5 @@ TS_CMD_SWAPON=${TS_CMD_MOUNT:-"$TOPDIR/mount/swapon"}
TS_CMD_SWAPOFF=${TS_CMD_MOUNT:-"$TOPDIR/mount/swapoff"}
TS_CMD_IPCS=${TS_CMD_IPCS:-"$TOPDIR/sys-utils/ipcs"}
+
+TS_CMD_COL=${TS_CMD_COL:-"$TOPDIR/text-utils/col"}
diff --git a/tests/expected/ts-col-multibyte b/tests/expected/ts-col-multibyte
new file mode 100644
index 000000000..c6d36cce3
--- /dev/null
+++ b/tests/expected/ts-col-multibyte
@@ -0,0 +1 @@
+col: Invalid or incomplete multibyte or wide character
diff --git a/tests/functions.sh b/tests/functions.sh
index 81168fc32..8e8b34f74 100644
--- a/tests/functions.sh
+++ b/tests/functions.sh
@@ -2,6 +2,7 @@
TS_OUTDIR="$TS_TOPDIR/output"
TS_DIFFDIR="$TS_TOPDIR/diff"
TS_EXPECTEDDIR="$TS_TOPDIR/expected"
+TS_INPUTDIR="$TS_TOPDIR/input"
function ts_skip {
echo " IGNORE ($1)"
@@ -9,6 +10,7 @@ function ts_skip {
}
function ts_init {
+ export LANG="en_US.UTF-8":
TS_NAME=$(basename $0)
if [ ! -d $TS_OUTDIR ]; then
mkdir -p $TS_OUTDIR
@@ -19,6 +21,7 @@ function ts_init {
TS_OUTPUT="$TS_OUTDIR/$TS_NAME"
TS_DIFF="$TS_DIFFDIR/$TS_NAME"
TS_EXPECTED="$TS_EXPECTEDDIR/$TS_NAME"
+ TS_INPUT="$TS_INPUTDIR/$TS_NAME"
rm -f $TS_OUTPUT
@@ -35,7 +38,7 @@ function ts_finalize {
res=1
fi
else
- res=0
+ res=1
fi
else
echo " IGNORE (expected output undefined)"
diff --git a/tests/input/ts-col-multibyte b/tests/input/ts-col-multibyte
new file mode 100644
index 000000000..b203afd0a
--- /dev/null
+++ b/tests/input/ts-col-multibyte
@@ -0,0 +1 @@
+Dateiname der Versandhülle
diff --git a/tests/ts-col-multibyte b/tests/ts-col-multibyte
new file mode 100755
index 000000000..125e396c7
--- /dev/null
+++ b/tests/ts-col-multibyte
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+. commands.sh
+. functions.sh
+
+TS_COMPONENT="col"
+TS_DESC="multibyte"
+
+ts_init
+
+cat $TS_INPUT | $TS_CMD_COL > /dev/null 2> $TS_OUTPUT
+
+
+
+
+ts_finalize
+
diff --git a/text-utils/col.c b/text-utils/col.c
index 052d91e7a..3b81a891a 100644
--- a/text-utils/col.c
+++ b/text-utils/col.c
@@ -128,6 +128,7 @@ int main(int argc, char **argv)
int this_line; /* line l points to */
int nflushd_lines; /* number of lines that were flushed */
int adjust, opt, warned;
+ int ret = 0;
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
@@ -175,8 +176,16 @@ int main(int argc, char **argv)
cur_line = max_line = nflushd_lines = this_line = 0;
cur_set = last_set = CS_NORMAL;
lines = l = alloc_line();
-
- while ((ch = getwchar()) != WEOF) {
+
+ while (feof(stdin)==0) {
+ errno = 0;
+ if ((ch = getwchar()) == WEOF) {
+ if (errno==EILSEQ) {
+ perror("col");
+ ret = 1;
+ }
+ break;
+ }
if (!iswgraph(ch)) {
switch (ch) {
case BS: /* can't go back further */
@@ -332,7 +341,7 @@ int main(int argc, char **argv)
flush_blanks();
if (ferror(stdout) || fclose(stdout))
return 1;
- return 0;
+ return ret;
}
void flush_lines(int nflush)