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