I'll look at this more carefully later today when I get back from a holiday, but it looks ok after a quick glance.
I've CC'd gcc-patches, as required for all patches. Thanks. On Sep 4, 2012 10:27 PM, "Mark Kettenis" <mark.kette...@xs4all.nl> wrote: > > Fixes a few testcases. Mostly based on the existing > NetBSD/FreeBSD/Darwin code. > > 2012-09-04 Mark Kettenis <kette...@openbsd.org> > > * configure.host (*-*-openbsd*) Set cpu_include_dir. > * config/os/bsd/openbsd/ctype_base.h: New file. > * config/os/bsd/openbsd/ctype_configure_char.cc: New file. > * config/os/bsd/openbsd/ctype_inline.h: New file. > * config/os/bsd/openbsd/os_defines.h: New file. > > Index: configure.host > =================================================================== > --- configure.host (revision 190863) > +++ configure.host (working copy) > @@ -270,6 +270,9 @@ > netbsd*) > os_include_dir="os/bsd/netbsd" > ;; > + openbsd*) > + os_include_dir="os/bsd/openbsd" > + ;; > qnx6.[12]*) > os_include_dir="os/qnx/qnx6.1" > c_model=c > Index: config/os/bsd/openbsd/ctype_base.h > =================================================================== > --- config/os/bsd/openbsd/ctype_base.h (revision 0) > +++ config/os/bsd/openbsd/ctype_base.h (working copy) > @@ -0,0 +1,59 @@ > +// Locale support -*- C++ -*- > + > +// Copyright (C) 2000, 2009, 2012 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 > +// terms of the GNU General Public License as published by the > +// Free Software Foundation; either version 3, or (at your option) > +// any later version. > + > +// This library is distributed in the hope that it will be useful, > +// but WITHOUT ANY WARRANTY; without even the implied warranty of > +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +// GNU General Public License for more details. > + > +// Under Section 7 of GPL version 3, you are granted additional > +// permissions described in the GCC Runtime Library Exception, version > +// 3.1, as published by the Free Software Foundation. > + > +// You should have received a copy of the GNU General Public License and > +// a copy of the GCC Runtime Library Exception along with this program; > +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see > +// <http://www.gnu.org/licenses/>. > + > +// > +// ISO C++ 14882: 22.1 Locales > +// > + > +// Information as gleaned from /usr/include/ctype.h on OpenBSD. > + > +namespace std _GLIBCXX_VISIBILITY(default) > +{ > +_GLIBCXX_BEGIN_NAMESPACE_VERSION > + > + /// @brief Base class for ctype. > + struct ctype_base > + { > + // Non-standard typedefs. > + typedef const short* __to_type; > + > + // NB: Offsets into ctype<char>::_M_table force a particular size > + // on the mask type. Because of this, we don't use an enum. > + typedef char mask; > + > + static const mask upper = _U; > + static const mask lower = _L; > + static const mask alpha = _U | _L; > + static const mask digit = _N; > + static const mask xdigit = _N | _X; > + static const mask space = _S; > + static const mask print = _P | _U | _L | _N | _B; > + static const mask graph = _P | _U | _L | _N; > + static const mask cntrl = _C; > + static const mask punct = _P; > + static const mask alnum = _U | _L | _N; > + }; > + > +_GLIBCXX_END_NAMESPACE_VERSION > +} // namespace > Index: config/os/bsd/openbsd/os_defines.h > =================================================================== > --- config/os/bsd/openbsd/os_defines.h (revision 0) > +++ config/os/bsd/openbsd/os_defines.h (working copy) > @@ -0,0 +1,41 @@ > +// Specific definitions for OpenBSD -*- C++ -*- > + > +// Copyright (C) 2000, 2002, 2009, 2012 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 > +// terms of the GNU General Public License as published by the > +// Free Software Foundation; either version 3, or (at your option) > +// any later version. > + > +// This library is distributed in the hope that it will be useful, > +// but WITHOUT ANY WARRANTY; without even the implied warranty of > +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +// GNU General Public License for more details. > + > +// Under Section 7 of GPL version 3, you are granted additional > +// permissions described in the GCC Runtime Library Exception, version > +// 3.1, as published by the Free Software Foundation. > + > +// You should have received a copy of the GNU General Public License and > +// a copy of the GCC Runtime Library Exception along with this program; > +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see > +// <http://www.gnu.org/licenses/>. > + > +/** @file bits/os_defines.h > + * This is an internal header file, included by other library headers. > + * Do not attempt to use it directly. @headername{iosfwd} > + */ > + > +#ifndef _GLIBCXX_OS_DEFINES > +#define _GLIBCXX_OS_DEFINES 1 > + > +// System-specific #define, typedefs, corrections, etc, go here. This > +// file will come before all others. > + > +#define _GLIBCXX_USE_C99_DYNAMIC (!(__ISO_C_VISIBLE >= 1999)) > +#define _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC _GLIBCXX_USE_C99_DYNAMIC > +#define _GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_DYNAMIC > _GLIBCXX_USE_C99_DYNAMIC > +#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC _GLIBCXX_USE_C99_DYNAMIC > + > +#endif > Index: config/os/bsd/openbsd/ctype_configure_char.cc > =================================================================== > --- config/os/bsd/openbsd/ctype_configure_char.cc (revision 0) > +++ config/os/bsd/openbsd/ctype_configure_char.cc (working copy) > @@ -0,0 +1,99 @@ > +// Locale support -*- C++ -*- > + > +// Copyright (C) 2011 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 > +// terms of the GNU General Public License as published by the > +// Free Software Foundation; either version 3, or (at your option) > +// any later version. > + > +// This library is distributed in the hope that it will be useful, > +// but WITHOUT ANY WARRANTY; without even the implied warranty of > +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +// GNU General Public License for more details. > + > +// Under Section 7 of GPL version 3, you are granted additional > +// permissions described in the GCC Runtime Library Exception, version > +// 3.1, as published by the Free Software Foundation. > + > +// You should have received a copy of the GNU General Public License and > +// a copy of the GCC Runtime Library Exception along with this program; > +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see > +// <http://www.gnu.org/licenses/>. > + > +/** @file ctype_configure_char.cc */ > + > +// > +// ISO C++ 14882: 22.1 Locales > +// > + > +#include <locale> > +#include <cstdlib> > +#include <cstring> > + > +namespace std _GLIBCXX_VISIBILITY(default) > +{ > +_GLIBCXX_BEGIN_NAMESPACE_VERSION > + > +// Information as gleaned from /usr/include/ctype.h > + > + 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) > + : facet(__refs), _M_del(__table != 0 && __del), > + _M_toupper(NULL), _M_tolower(NULL), > + _M_table(__table ? __table : classic_table()) > + { > + memset(_M_widen, 0, sizeof(_M_widen)); > + _M_widen_ok = 0; > + memset(_M_narrow, 0, sizeof(_M_narrow)); > + _M_narrow_ok = 0; > + } > + > + ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) > + : facet(__refs), _M_del(__table != 0 && __del), > + _M_toupper(NULL), _M_tolower(NULL), > + _M_table(__table ? __table : classic_table()) > + { > + memset(_M_widen, 0, sizeof(_M_widen)); > + _M_widen_ok = 0; > + memset(_M_narrow, 0, sizeof(_M_narrow)); > + _M_narrow_ok = 0; > + } > + > + char > + ctype<char>::do_toupper(char __c) const > + { return ::toupper((int) __c); } > + > + const char* > + ctype<char>::do_toupper(char* __low, const char* __high) const > + { > + while (__low < __high) > + { > + *__low = ::toupper((int) *__low); > + ++__low; > + } > + return __high; > + } > + > + char > + ctype<char>::do_tolower(char __c) const > + { return ::tolower((int) __c); } > + > + const char* > + ctype<char>::do_tolower(char* __low, const char* __high) const > + { > + while (__low < __high) > + { > + *__low = ::tolower((int) *__low); > + ++__low; > + } > + return __high; > + } > + > +_GLIBCXX_END_NAMESPACE_VERSION > +} // namespace > Index: config/os/bsd/openbsd/ctype_inline.h > =================================================================== > --- config/os/bsd/openbsd/ctype_inline.h (revision 0) > +++ config/os/bsd/openbsd/ctype_inline.h (working copy) > @@ -0,0 +1,74 @@ > +// Locale support -*- C++ -*- > + > +// Copyright (C) 2010 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 > +// terms of the GNU General Public License as published by the > +// Free Software Foundation; either version 3, or (at your option) > +// any later version. > + > +// This library is distributed in the hope that it will be useful, > +// but WITHOUT ANY WARRANTY; without even the implied warranty of > +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +// GNU General Public License for more details. > + > +// Under Section 7 of GPL version 3, you are granted additional > +// permissions described in the GCC Runtime Library Exception, version > +// 3.1, as published by the Free Software Foundation. > + > +// You should have received a copy of the GNU General Public License and > +// a copy of the GCC Runtime Library Exception along with this program; > +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see > +// <http://www.gnu.org/licenses/>. > + > +/** @file bits/ctype_inline.h > + * This is an internal header file, included by other library headers. > + * Do not attempt to use it directly. @headername{locale} > + */ > + > +// > +// ISO C++ 14882: 22.1 Locales > +// > + > +// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*) > +// functions go in ctype.cc > + > +namespace std _GLIBCXX_VISIBILITY(default) > +{ > +_GLIBCXX_BEGIN_NAMESPACE_VERSION > + > + bool > + ctype<char>:: > + is(mask __m, char __c) const > + { return _M_table[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[static_cast<unsigned char>(*__low++)]; > + return __high; > + } > + > + const char* > + ctype<char>:: > + scan_is(mask __m, const char* __low, const char* __high) const > + { > + while (__low < __high && !this->is(__m, *__low)) > + ++__low; > + return __low; > + } > + > + const char* > + ctype<char>:: > + scan_not(mask __m, const char* __low, const char* __high) const > + { > + while (__low < __high && this->is(__m, *__low) != 0) > + ++__low; > + return __low; > + } > + > +_GLIBCXX_END_NAMESPACE_VERSION > +} // namespace