From f33e4b3d2e3568d912e067fac3be7eaa19c523f3 Mon Sep 17 00:00:00 2001 From: Carey Evans Date: Sat, 29 Oct 2005 22:44:23 +0000 Subject: [PATCH] re PR libstdc++/22087 (ctype tables are offset by one on DJGPP) 2005-10-29 Carey Evans PR libstdc++/22087 * config/os/djgpp/ctype_inline.h: Fix. * config/os/djgpp/ctype_noninline.h: Likewise. From-SVN: r105999 --- libstdc++-v3/ChangeLog | 6 ++++++ libstdc++-v3/config/os/djgpp/ctype_inline.h | 10 ++++++---- libstdc++-v3/config/os/djgpp/ctype_noninline.h | 16 ++++++++-------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index ceea46da6260..4aeee69f030a 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2005-10-29 Carey Evans + + PR libstdc++/22087 + * config/os/djgpp/ctype_inline.h: Fix. + * config/os/djgpp/ctype_noninline.h: Likewise. + 2005-10-28 Paolo Carlini PR libstdc++/24559 diff --git a/libstdc++-v3/config/os/djgpp/ctype_inline.h b/libstdc++-v3/config/os/djgpp/ctype_inline.h index 2758d015518b..2383325518f7 100644 --- a/libstdc++-v3/config/os/djgpp/ctype_inline.h +++ b/libstdc++-v3/config/os/djgpp/ctype_inline.h @@ -1,6 +1,6 @@ // Locale support -*- C++ -*- -// Copyright (C) 2001 Free Software Foundation, Inc. +// Copyright (C) 2001, 2002, 2003, 2004, 2005 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,7 +37,7 @@ bool ctype:: is(mask __m, char __c) const - { return _M_table[static_cast(__c + 1)] & __m; } + { return _M_table[static_cast(__c)] & __m; } const char* ctype:: @@ -52,7 +52,8 @@ ctype:: scan_is(mask __m, const char* __low, const char* __high) const { - while (__low < __high && !this->is(__m, *__low)) + while (__low < __high + && !(_M_table[static_cast(*__low)] & __m)) ++__low; return __low; } @@ -61,7 +62,8 @@ ctype:: scan_not(mask __m, const char* __low, const char* __high) const { - while (__low < __high && this->is(__m, *__low) != 0) + while (__low < __high + && (_M_table[static_cast(*__low)] & __m) != 0) ++__low; return __low; } diff --git a/libstdc++-v3/config/os/djgpp/ctype_noninline.h b/libstdc++-v3/config/os/djgpp/ctype_noninline.h index bb05583e57b1..0c905492c502 100644 --- a/libstdc++-v3/config/os/djgpp/ctype_noninline.h +++ b/libstdc++-v3/config/os/djgpp/ctype_noninline.h @@ -1,6 +1,6 @@ // Locale support -*- C++ -*- -// Copyright (C) 2001, 2002 Free Software Foundation, Inc. +// Copyright (C) 2001, 2002, 2003, 2004, 2005 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 @@ -35,13 +35,13 @@ const ctype_base::mask* ctype::classic_table() throw() - { return 0; } + { return __dj_ctype_flags+1; } ctype::ctype(__c_locale, const mask* __table, bool __del, size_t __refs) : facet(__refs), _M_del(__table != 0 && __del), _M_toupper(__dj_ctype_toupper), _M_tolower(__dj_ctype_tolower), - _M_table(__table ? __table : __dj_ctype_flags) + _M_table(__table ? __table : classic_table()) { memset(_M_widen, 0, sizeof(_M_widen)); _M_widen_ok = 0; @@ -52,7 +52,7 @@ ctype::ctype(const mask* __table, bool __del, size_t __refs) : facet(__refs), _M_del(__table != 0 && __del), _M_toupper(__dj_ctype_toupper), _M_tolower(__dj_ctype_tolower), - _M_table(__table ? __table : __dj_ctype_flags) + _M_table(__table ? __table : classic_table()) { memset(_M_widen, 0, sizeof(_M_widen)); _M_widen_ok = 0; @@ -62,14 +62,14 @@ char ctype::do_toupper(char __c) const - { return _M_toupper[static_cast(__c)+1]; } + { return _M_toupper[static_cast(__c)]; } const char* ctype::do_toupper(char* __low, const char* __high) const { while (__low < __high) { - *__low = ::toupper(static_cast (*__low)); + *__low = _M_toupper[static_cast(*__low)]; ++__low; } return __high; @@ -77,14 +77,14 @@ char ctype::do_tolower(char __c) const - { return _M_tolower[static_cast(__c)+1]; } + { return _M_tolower[static_cast(__c)]; } const char* ctype::do_tolower(char* __low, const char* __high) const { while (__low < __high) { - *__low = ::tolower(static_cast (*__low)); + *__low = _M_tolower[static_cast(*__low)]; ++__low; } return __high; -- 2.43.5