mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-04-20 18:56:39 +02:00
* src/cut.c (set_fields): Apply to_uchar to isblank operands. * src/uniq.c (find_field): Likewise. * src/seq.c (scan_arg): Likewise, for isspace. * tests/misc/uniq: New file. Test for the above, but only when isspace(0240). * tests/Makefile.am (TESTS): Add misc/uniq. * configure.ac: Use gt_LOCALE_FR. * tests/check.mk (TESTS_ENVIRONMENT): Propagate LOCALE_FR to scripts. * NEWS: Mention the bug fixes. Before this patch, on FreeBSD 6: $ printf 'x y z\nx \xa0 y z\n' > in $ LC_ALL=fr_FR.UTF-8 uniq -f2 in|tr ' ' . x.y.z x. .y.z With the patch: $ LC_ALL=fr_FR.UTF-8 uniq -f2 in|tr ' ' . x.y.z This also affected many other locales: for i in $(locale -a); do test $(LC_ALL=$i ./uniq -f1 in|wc -l) = $(LC_ALL=$i uniq -f1 in|wc -l) || echo $i ; done ... en_GB.ISO8859-1 en_GB.ISO8859-15 en_GB.UTF-8 en_IE.UTF-8 en_NZ.ISO8859-1 en_NZ.ISO8859-15 en_NZ.UTF-8 en_US.ISO8859-1 en_US.ISO8859-15 en_US.UTF-8 ...
59 lines
1.7 KiB
Bash
Executable File
59 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
# Test for a subtle, system-and-locale-dependent bug in uniq.
|
|
|
|
# Copyright (C) 2008 Free Software Foundation, Inc.
|
|
|
|
# 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
|
|
case $LOCALE_FR in
|
|
''|none) echo "$0: skipping this test -- no appropriate locale" 1>&2; exit 77;;
|
|
esac
|
|
|
|
: ${srcdir=.}
|
|
. $top_srcdir/tests/require-perl
|
|
|
|
me=`echo $0|sed 's,.*/,,'`
|
|
exec $PERL -w -I$top_srcdir/tests -MCoreutils -M"CuTmpdir qw($me)" -- - <<\EOF
|
|
require 5.003;
|
|
use strict;
|
|
|
|
my $prog = 'uniq';
|
|
|
|
# Turn off localization of executable's output.
|
|
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
|
|
|
|
# I've only ever triggered the problem in a non-C locale.
|
|
my $locale = $ENV{LOCALE_FR};
|
|
|
|
# See if isblank returns true for nbsp.
|
|
my $x = `env printf '\xa0'| LC_ALL=$locale tr '[:blank:]' x`;
|
|
# If so, expect just one line of output in the schar test.
|
|
# Otherwise, expect two.
|
|
my $in = " y z\n\xa0 y z\n";
|
|
my $schar_exp = $x eq 'x' ? " y z\n" : $in;
|
|
|
|
my @Tests =
|
|
(
|
|
['schar', '-f1', {IN => $in}, {OUT => $schar_exp},
|
|
{ENV => "LC_ALL=$locale"},
|
|
],
|
|
);
|
|
|
|
my $save_temps = $ENV{DEBUG};
|
|
my $verbose = $ENV{VERBOSE};
|
|
|
|
my $fail = run_tests ($prog, $prog, \@Tests, $save_temps, $verbose);
|
|
exit $fail;
|
|
EOF
|