libstdc++/7461: ctype<char>::classic_table() returns offset array on Cygwin
Rick Danos
rdanos@hotmail.com
Thu Aug 1 15:31:00 GMT 2002
Sorry - I believe that now that the offset is being taken into account in
the return from classic_table(), it is *no longer* necessary to also have
the offsets in the ctype_inline.h functions that reference the mask array.
In other words, I don't believe it is necessary to use (_M_table + 1) in the
ctype_inline.h functions, but you should now just use _M_table.
I appreciate the rapid addressing of this issue, and your and the entire
team's work on this product is amazing.
-- Rick
----- Original Message -----
From: <bkoz@gcc.gnu.org>
To: <bkoz@gcc.gnu.org>; <gcc-bugs@gcc.gnu.org>; <gcc-prs@gcc.gnu.org>;
<nobody@gcc.gnu.org>; <rdanos@hotmail.com>
Sent: Thursday, August 01, 2002 3:39 PM
Subject: Re: libstdc++/7461: ctype<char>::classic_table() returns offset
array on Cygwin
> Synopsis: ctype<char>::classic_table() returns offset array on Cygwin
>
> Responsible-Changed-From-To: unassigned->bkoz
> Responsible-Changed-By: bkoz
> Responsible-Changed-When: Thu Aug 1 14:39:18 2002
> Responsible-Changed-Why:
> Mine.
> State-Changed-From-To: open->feedback
> State-Changed-By: bkoz
> State-Changed-When: Thu Aug 1 14:39:18 2002
> State-Changed-Why:
> Fixed.
>
> 2002-08-01 Rick Danos <rdanos@hotmail.com>
>
> PR libstdc++/7461
> * config/os/newlib/ctype_noninline.h (classic_table): Add offset.
> * config/os/newlib/ctype_inline.h (is): Use static_cast.
>
> Index: config/os/newlib/ctype_inline.h
> ===================================================================
> RCS file: /cvs/gcc/gcc/libstdc++-v3/config/os/newlib/ctype_inline.h,v
> retrieving revision 1.1
> diff -c -p -r1.1 ctype_inline.h
> *** config/os/newlib/ctype_inline.h 24 Jun 2002 05:49:54 -0000 1.1
> --- config/os/newlib/ctype_inline.h 1 Aug 2002 21:38:07 -0000
> ***************
> *** 1,6 ****
> // Locale support -*- C++ -*-
>
> ! // Copyright (C) 2000 Free Software Foundation, Inc.
> //
> // This file is part of the GNU ISO C++ Library. This library is
free
> // software; you can redistribute it and/or modify it under the
> --- 1,6 ----
> // Locale support -*- C++ -*-
>
> ! // Copyright (C) 2000, 2002 Free Software Foundation, Inc.
> //
> // This file is part of the GNU ISO C++ Library. This library is
free
> // software; you can redistribute it and/or modify it under the
> ***************
> *** 37,50 ****
> bool
> ctype<char>::
> is(mask __m, char __c) const
> ! { return (_M_table + 1)[(unsigned char)(__c)] & __m; }
>
> const char*
> ctype<char>::
> is(const char* __low, const char* __high, mask* __vec) const
> {
> while (__low < __high)
> ! *__vec++ = (_M_table + 1)[(unsigned char) (*__low++)];
> return __high;
> }
>
> --- 37,50 ----
> bool
> ctype<char>::
> is(mask __m, char __c) const
> ! { return (_M_table + 1)[static_cast<unsigned char>(__c)] & __m; }
>
> const char*
> ctype<char>::
> is(const char* __low, const char* __high, mask* __vec) const
> {
> while (__low < __high)
> ! *__vec++ = (_M_table + 1)[static_cast<unsigned
char>(*__low++)];
> return __high;
> }
>
> ***************
> *** 52,58 ****
> ctype<char>::
> scan_is(mask __m, const char* __low, const char* __high) const
> {
> ! while (__low < __high && !((_M_table + 1)[(unsigned
char)(*__low)] & __m))
> ++__low;
> return __low;
> }
> --- 52,59 ----
> ctype<char>::
> scan_is(mask __m, const char* __low, const char* __high) const
> {
> ! while (__low < __high
> ! && !((_M_table + 1)[static_cast<unsigned char>(*__low)] & __m))
> ++__low;
> return __low;
> }
> ***************
> *** 62,73 ****
> scan_not(mask __m, const char* __low, const char* __high) const
> {
> while (__low < __high
> ! && ((_M_table + 1)[(unsigned char)(*__low)] & __m) != 0)
> ++__low;
> return __low;
> }
> -
> -
> -
> -
> -
> --- 63,69 ----
> scan_not(mask __m, const char* __low, const char* __high) const
> {
> while (__low < __high
> ! && ((_M_table + 1)[static_cast<unsigned char>(*__low)] & __m) !=
0)
> ++__low;
> return __low;
> }
> Index: config/os/newlib/ctype_noninline.h
> ===================================================================
> RCS file:
/cvs/gcc/gcc/libstdc++-v3/config/os/newlib/ctype_noninline.h,v
> retrieving revision 1.1
> diff -c -p -r1.1 ctype_noninline.h
> *** config/os/newlib/ctype_noninline.h 24 Jun 2002 05:49:54 -0000 1.1
> --- config/os/newlib/ctype_noninline.h 1 Aug 2002 21:38:07 -0000
> ***************
> *** 35,41 ****
>
> const ctype_base::mask*
> ctype<char>::classic_table() throw()
> ! { return _ctype_; }
>
> ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
> size_t __refs)
> --- 35,41 ----
>
> const ctype_base::mask*
> ctype<char>::classic_table() throw()
> ! { return _ctype_ + 1; }
>
> ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
> size_t __refs)
>
>
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&p
r=7461
>
More information about the Gcc-bugs
mailing list