GNU bug report logs -
#7203
[PATCH] sort: fix unportable conversion of unsigned char * -> char *
Previous Next
Reported by: Paul Eggert <eggert <at> cs.ucla.edu>
Date: Tue, 12 Oct 2010 20:09:02 UTC
Severity: normal
Tags: patch
Done: Jim Meyering <jim <at> meyering.net>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your message dated Tue, 19 Apr 2011 09:08:28 +0200
with message-id <874o5u3ehf.fsf <at> rho.meyering.net>
and subject line Re: bug#7203: [PATCH] sort: fix unportable conversion of unsigned char * -> char *
has caused the GNU bug report #7203,
regarding [PATCH] sort: fix unportable conversion of unsigned char * -> char *
to be marked as done.
(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)
--
7203: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7203
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
This is another portability bug caught by the Sun C compiler.
Without this patch, cc complains:
"sort.c", line 3933: warning: assignment type mismatch:
pointer to const char "=" pointer to unsigned char
* src/sort.c (fold_toupper): Change this back from char to
unsigned char, fixing a regression introduced in commit
59e2e55d0f154a388adc9bac37d2b45f2ba971f8 dated February 26, as the
C Standard doesn't let you convert from unsigned char * to char *
without a cast, and the (in theory more portable) style here is to
convert char values, not pointer values.
(getmonth): Convert char to unsigned char when needed for
comparison.
---
src/sort.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/sort.c b/src/sort.c
index 89f7be3..c155eda 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -268,7 +268,7 @@ static bool nonprinting[UCHAR_LIM];
static bool nondictionary[UCHAR_LIM];
/* Translation table folding lower case to upper. */
-static unsigned char fold_toupper[UCHAR_LIM];
+static char fold_toupper[UCHAR_LIM];
#define MONTHS_PER_YEAR 12
@@ -1952,12 +1952,12 @@ getmonth (char const *month, char **ea)
*ea = (char *) m;
return monthtab[ix].val;
}
- if (fold_toupper[to_uchar (*m)] < to_uchar (*n))
+ if (to_uchar (fold_toupper[to_uchar (*m)]) < to_uchar (*n))
{
hi = ix;
break;
}
- else if (fold_toupper[to_uchar (*m)] > to_uchar (*n))
+ else if (to_uchar (fold_toupper[to_uchar (*m)]) > to_uchar (*n))
{
lo = ix + 1;
break;
--
1.7.2
[Message part 3 (message/rfc822, inline)]
Paul Eggert wrote:
> This is another portability bug caught by the Sun C compiler.
> Without this patch, cc complains:
>
> "sort.c", line 3933: warning: assignment type mismatch:
> pointer to const char "=" pointer to unsigned char
>
>
> * src/sort.c (fold_toupper): Change this back from char to
> unsigned char, fixing a regression introduced in commit
> 59e2e55d0f154a388adc9bac37d2b45f2ba971f8 dated February 26, as the
> C Standard doesn't let you convert from unsigned char * to char *
> without a cast, and the (in theory more portable) style here is to
> convert char values, not pointer values.
> (getmonth): Convert char to unsigned char when needed for
> comparison.
Thanks again.
The patch went in months ago, so I'm closing this.
This bug report was last modified 14 years and 39 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.