aboutsummaryrefslogtreecommitdiffstats
path: root/src/cut.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/cut.c
parentbase64: remove some unused/redundant getopt code (diff)
downloadcoreutils-209850fd7e1e89cf8937310878bd22d70e3588a5.tar.gz
coreutils-209850fd7e1e89cf8937310878bd22d70e3588a5.zip
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/cut.c')
-rw-r--r--src/cut.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/cut.c b/src/cut.c
index e0ce42a6b..f6254e45b 100644
--- a/src/cut.c
+++ b/src/cut.c
@@ -1,5 +1,5 @@
/* cut - remove parts of lines of files
- Copyright (C) 1997-2007 Free Software Foundation, Inc.
+ Copyright (C) 1997-2008 Free Software Foundation, Inc.
Copyright (C) 1984 David M. Ihnat
This program is free software: you can redistribute it and/or modify
@@ -372,7 +372,8 @@ set_fields (const char *fieldstr)
initial = (lhs_specified ? value : 1);
value = 0;
}
- else if (*fieldstr == ',' || isblank (*fieldstr) || *fieldstr == '\0')
+ else if (*fieldstr == ',' ||
+ isblank (to_uchar (*fieldstr)) || *fieldstr == '\0')
{
in_digits = false;
/* Ending the string, or this field/byte sublist. */