summaryrefslogtreecommitdiff
path: root/src/uniq.c
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2008-04-26 09:28:48 +0200
committerJim Meyering <meyering@redhat.com>2008-05-06 08:21:28 +0200
commit209850fd7e1e89cf8937310878bd22d70e3588a5 (patch)
tree4f124f7243ad25afb4ca6a2f2fab081a927a3016 /src/uniq.c
parent4d3bf408b9a308a4702ac93546446927c12cc101 (diff)
downloadcoreutils-209850fd7e1e89cf8937310878bd22d70e3588a5.tar.xz
avoid problems with sign-extended "char" operand to is* functions
* 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 ...
Diffstat (limited to 'src/uniq.c')
-rw-r--r--src/uniq.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/uniq.c b/src/uniq.c
index 1a54055b3..b167bbb08 100644
--- a/src/uniq.c
+++ b/src/uniq.c
@@ -1,5 +1,5 @@
/* uniq -- remove duplicate lines from a sorted file
- Copyright (C) 86, 91, 1995-2007 Free Software Foundation, Inc.
+ Copyright (C) 86, 91, 1995-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
@@ -213,9 +213,9 @@ find_field (const struct linebuffer *line)
for (count = 0; count < skip_fields && i < size; count++)
{
- while (i < size && isblank (lp[i]))
+ while (i < size && isblank (to_uchar (lp[i])))
i++;
- while (i < size && !isblank (lp[i]))
+ while (i < size && !isblank (to_uchar (lp[i])))
i++;
}