summaryrefslogtreecommitdiff
path: root/packages/gcc/gcc-3.3.3/gcc-uclibc-3.3-200-code.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/gcc/gcc-3.3.3/gcc-uclibc-3.3-200-code.patch')
-rw-r--r--packages/gcc/gcc-3.3.3/gcc-uclibc-3.3-200-code.patch3021
1 files changed, 0 insertions, 3021 deletions
diff --git a/packages/gcc/gcc-3.3.3/gcc-uclibc-3.3-200-code.patch b/packages/gcc/gcc-3.3.3/gcc-uclibc-3.3-200-code.patch
deleted file mode 100644
index 5880d834b4..0000000000
--- a/packages/gcc/gcc-3.3.3/gcc-uclibc-3.3-200-code.patch
+++ /dev/null
@@ -1,3021 +0,0 @@
-Warning! This patch is not finished. The wide char time-related stuff
-is broken or non-functional. But it serves as a starting point to get
-things building while I continue to work on the uClibc locale internals.
-diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h
---- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 1969-12-31 18:00:00.000000000 -0600
-+++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c++locale_internal.h 2004-01-09 07:55:02.000000000 -0600
-@@ -0,0 +1,63 @@
-+// Prototypes for GLIBC thread locale __-prefixed functions -*- C++ -*-
-+
-+// Copyright (C) 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
-+// terms of the GNU General Public License as published by the
-+// Free Software Foundation; either version 2, 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.
-+
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING. If not, write to the Free
-+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-+// USA.
-+
-+// As a special exception, you may use this file as part of a free software
-+// library without restriction. Specifically, if other files instantiate
-+// templates or use macros or inline functions from this file, or you compile
-+// this file and link it with other files to produce an executable, this
-+// file does not by itself cause the resulting executable to be covered by
-+// the GNU General Public License. This exception does not however
-+// invalidate any other reasons why the executable file might be covered by
-+// the GNU General Public License.
-+
-+// Written by Jakub Jelinek <jakub@redhat.com>
-+
-+#include <clocale>
-+
-+#ifdef __UCLIBC_MJN3_ONLY__
-+#warning clean this up
-+#endif
-+
-+#ifdef __UCLIBC_HAS_XLOCALE__
-+
-+extern "C" __typeof(iswctype_l) __iswctype_l;
-+extern "C" __typeof(nl_langinfo_l) __nl_langinfo_l;
-+extern "C" __typeof(strcoll_l) __strcoll_l;
-+extern "C" __typeof(strftime_l) __strftime_l;
-+extern "C" __typeof(strtod_l) __strtod_l;
-+extern "C" __typeof(strtof_l) __strtof_l;
-+extern "C" __typeof(strtold_l) __strtold_l;
-+extern "C" __typeof(strtol_l) __strtol_l;
-+extern "C" __typeof(strtoll_l) __strtoll_l;
-+extern "C" __typeof(strtoul_l) __strtoul_l;
-+extern "C" __typeof(strtoull_l) __strtoull_l;
-+extern "C" __typeof(strxfrm_l) __strxfrm_l;
-+extern "C" __typeof(towlower_l) __towlower_l;
-+extern "C" __typeof(towupper_l) __towupper_l;
-+extern "C" __typeof(wcscoll_l) __wcscoll_l;
-+extern "C" __typeof(wcsftime_l) __wcsftime_l;
-+extern "C" __typeof(wcsxfrm_l) __wcsxfrm_l;
-+extern "C" __typeof(wctype_l) __wctype_l;
-+extern "C" __typeof(newlocale) __newlocale;
-+extern "C" __typeof(freelocale) __freelocale;
-+extern "C" __typeof(duplocale) __duplocale;
-+extern "C" __typeof(uselocale) __uselocale;
-+
-+#endif // GLIBC 2.3 and later
-diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.cc
---- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.cc 1969-12-31 18:00:00.000000000 -0600
-+++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.cc 2004-01-09 08:37:55.000000000 -0600
-@@ -0,0 +1,231 @@
-+// Wrapper for underlying C-language localization -*- C++ -*-
-+
-+// Copyright (C) 2001, 2002, 2003 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 2, 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.
-+
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING. If not, write to the Free
-+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-+// USA.
-+
-+// As a special exception, you may use this file as part of a free software
-+// library without restriction. Specifically, if other files instantiate
-+// templates or use macros or inline functions from this file, or you compile
-+// this file and link it with other files to produce an executable, this
-+// file does not by itself cause the resulting executable to be covered by
-+// the GNU General Public License. This exception does not however
-+// invalidate any other reasons why the executable file might be covered by
-+// the GNU General Public License.
-+
-+//
-+// ISO C++ 14882: 22.8 Standard locale categories.
-+//
-+
-+// Written by Benjamin Kosnik <bkoz@redhat.com>
-+
-+#include <locale>
-+#include <stdexcept>
-+#include <langinfo.h>
-+#include <bits/c++locale_internal.h>
-+
-+#ifndef __UCLIBC_HAS_XLOCALE__
-+#define __strtol_l(S, E, B, L) strtol((S), (E), (B))
-+#define __strtoul_l(S, E, B, L) strtoul((S), (E), (B))
-+#define __strtoll_l(S, E, B, L) strtoll((S), (E), (B))
-+#define __strtoull_l(S, E, B, L) strtoull((S), (E), (B))
-+#define __strtof_l(S, E, L) strtof((S), (E))
-+#define __strtod_l(S, E, L) strtod((S), (E))
-+#define __strtold_l(S, E, L) strtold((S), (E))
-+#endif
-+
-+namespace std
-+{
-+ template<>
-+ void
-+ __convert_to_v(const char* __s, long& __v, ios_base::iostate& __err,
-+ const __c_locale& __cloc, int __base)
-+ {
-+ if (!(__err & ios_base::failbit))
-+ {
-+ char* __sanity;
-+ errno = 0;
-+ long __l = __strtol_l(__s, &__sanity, __base, __cloc);
-+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
-+ __v = __l;
-+ else
-+ __err |= ios_base::failbit;
-+ }
-+ }
-+
-+ template<>
-+ void
-+ __convert_to_v(const char* __s, unsigned long& __v,
-+ ios_base::iostate& __err, const __c_locale& __cloc,
-+ int __base)
-+ {
-+ if (!(__err & ios_base::failbit))
-+ {
-+ char* __sanity;
-+ errno = 0;
-+ unsigned long __ul = __strtoul_l(__s, &__sanity, __base, __cloc);
-+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
-+ __v = __ul;
-+ else
-+ __err |= ios_base::failbit;
-+ }
-+ }
-+
-+#ifdef _GLIBCPP_USE_LONG_LONG
-+ template<>
-+ void
-+ __convert_to_v(const char* __s, long long& __v, ios_base::iostate& __err,
-+ const __c_locale& __cloc, int __base)
-+ {
-+ if (!(__err & ios_base::failbit))
-+ {
-+ char* __sanity;
-+ errno = 0;
-+ long long __ll = __strtoll_l(__s, &__sanity, __base, __cloc);
-+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
-+ __v = __ll;
-+ else
-+ __err |= ios_base::failbit;
-+ }
-+ }
-+
-+ template<>
-+ void
-+ __convert_to_v(const char* __s, unsigned long long& __v,
-+ ios_base::iostate& __err, const __c_locale& __cloc,
-+ int __base)
-+ {
-+ if (!(__err & ios_base::failbit))
-+ {
-+ char* __sanity;
-+ errno = 0;
-+ unsigned long long __ull = __strtoull_l(__s, &__sanity, __base,
-+ __cloc);
-+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
-+ __v = __ull;
-+ else
-+ __err |= ios_base::failbit;
-+ }
-+ }
-+#endif
-+
-+ template<>
-+ void
-+ __convert_to_v(const char* __s, float& __v, ios_base::iostate& __err,
-+ const __c_locale& __cloc, int)
-+ {
-+ if (!(__err & ios_base::failbit))
-+ {
-+ char* __sanity;
-+ errno = 0;
-+ float __f = __strtof_l(__s, &__sanity, __cloc);
-+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
-+ __v = __f;
-+ else
-+ __err |= ios_base::failbit;
-+ }
-+ }
-+
-+ template<>
-+ void
-+ __convert_to_v(const char* __s, double& __v, ios_base::iostate& __err,
-+ const __c_locale& __cloc, int)
-+ {
-+ if (!(__err & ios_base::failbit))
-+ {
-+ char* __sanity;
-+ errno = 0;
-+ double __d = __strtod_l(__s, &__sanity, __cloc);
-+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
-+ __v = __d;
-+ else
-+ __err |= ios_base::failbit;
-+ }
-+ }
-+
-+ template<>
-+ void
-+ __convert_to_v(const char* __s, long double& __v, ios_base::iostate& __err,
-+ const __c_locale& __cloc, int)
-+ {
-+ if (!(__err & ios_base::failbit))
-+ {
-+ char* __sanity;
-+ errno = 0;
-+ long double __ld = __strtold_l(__s, &__sanity, __cloc);
-+ if (__sanity != __s && *__sanity == '\0' && errno != ERANGE)
-+ __v = __ld;
-+ else
-+ __err |= ios_base::failbit;
-+ }
-+ }
-+
-+ void
-+ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
-+ __c_locale __old)
-+ {
-+#ifdef __UCLIBC_HAS_XLOCALE__
-+ __cloc = __newlocale(1 << LC_ALL, __s, __old);
-+ if (!__cloc)
-+ {
-+ // This named locale is not supported by the underlying OS.
-+ __throw_runtime_error("attempt to create locale from unknown name");
-+ }
-+#else
-+ __cloc = NULL;
-+#endif
-+ }
-+
-+ void
-+ locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
-+ {
-+#ifdef __UCLIBC_HAS_XLOCALE__
-+ if (_S_c_locale != __cloc)
-+ __freelocale(__cloc);
-+#else
-+ __cloc = NULL;
-+#endif
-+ }
-+
-+ __c_locale
-+ locale::facet::_S_clone_c_locale(__c_locale& __cloc)
-+#ifdef __UCLIBC_HAS_XLOCALE__
-+ { return __duplocale(__cloc); }
-+#else
-+ { return __c_locale(); }
-+#endif
-+
-+ const char* locale::_S_categories[_S_categories_size
-+ + _S_extra_categories_size] =
-+ {
-+ "LC_CTYPE",
-+ "LC_NUMERIC",
-+ "LC_TIME",
-+ "LC_COLLATE",
-+ "LC_MONETARY",
-+ "LC_MESSAGES"
-+#if _GLIBCPP_NUM_CATEGORIES != 0
-+ ,
-+ "LC_PAPER",
-+ "LC_NAME",
-+ "LC_ADDRESS",
-+ "LC_TELEPHONE",
-+ "LC_MEASUREMENT",
-+ "LC_IDENTIFICATION"
-+#endif
-+ };
-+} // namespace std
-diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.h
---- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/c_locale.h 1969-12-31 18:00:00.000000000 -0600
-+++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/c_locale.h 2004-01-09 07:51:06.000000000 -0600
-@@ -0,0 +1,118 @@
-+// Wrapper for underlying C-language localization -*- C++ -*-
-+
-+// Copyright (C) 2001, 2002, 2003 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 2, 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.
-+
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING. If not, write to the Free
-+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-+// USA.
-+
-+// As a special exception, you may use this file as part of a free software
-+// library without restriction. Specifically, if other files instantiate
-+// templates or use macros or inline functions from this file, or you compile
-+// this file and link it with other files to produce an executable, this
-+// file does not by itself cause the resulting executable to be covered by
-+// the GNU General Public License. This exception does not however
-+// invalidate any other reasons why the executable file might be covered by
-+// the GNU General Public License.
-+
-+//
-+// ISO C++ 14882: 22.8 Standard locale categories.
-+//
-+
-+// Written by Benjamin Kosnik <bkoz@redhat.com>
-+
-+#ifndef _CPP_BITS_C_LOCALE_H
-+#define _CPP_BITS_C_LOCALE_H 1
-+
-+#pragma GCC system_header
-+
-+#include <clocale>
-+#include <langinfo.h> // For codecvt
-+#ifdef __UCLIBC_MJN3_ONLY__
-+#warning fix this
-+#endif
-+#ifdef __UCLIBC_HAS_LOCALE__
-+#include <iconv.h> // For codecvt using iconv, iconv_t
-+#endif
-+#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
-+#include <libintl.h> // For messages
-+#endif
-+
-+#ifdef __UCLIBC_MJN3_ONLY__
-+#warning what is _GLIBCPP_C_LOCALE_GNU for
-+#endif
-+#define _GLIBCPP_C_LOCALE_GNU 1
-+
-+#ifdef __UCLIBC_MJN3_ONLY__
-+#warning fix categories
-+#endif
-+// #define _GLIBCPP_NUM_CATEGORIES 6
-+#define _GLIBCPP_NUM_CATEGORIES 0
-+
-+#ifdef __UCLIBC_HAS_XLOCALE__
-+namespace __gnu_cxx
-+{
-+ extern "C" __typeof(uselocale) __uselocale;
-+}
-+#endif
-+
-+namespace std
-+{
-+#ifdef __UCLIBC_HAS_XLOCALE__
-+ typedef __locale_t __c_locale;
-+#else
-+ typedef int* __c_locale;
-+#endif
-+
-+ // Convert numeric value of type _Tv to string and return length of
-+ // string. If snprintf is available use it, otherwise fall back to
-+ // the unsafe sprintf which, in general, can be dangerous and should
-+ // be avoided.
-+ template<typename _Tv>
-+ int
-+ __convert_from_v(char* __out, const int __size, const char* __fmt,
-+#ifdef __UCLIBC_HAS_XLOCALE__
-+ _Tv __v, const __c_locale& __cloc, int __prec = -1)
-+ {
-+ __c_locale __old = __gnu_cxx::__uselocale(__cloc);
-+#else
-+ _Tv __v, const __c_locale&, int __prec = -1)
-+ {
-+# ifdef __UCLIBC_HAS_LOCALE__
-+ char* __old = setlocale(LC_ALL, NULL);
-+ char* __sav = static_cast<char*>(malloc(strlen(__old) + 1));
-+ if (__sav)
-+ strcpy(__sav, __old);
-+ setlocale(LC_ALL, "C");
-+# endif
-+#endif
-+
-+ int __ret;
-+ if (__prec >= 0)
-+ __ret = snprintf(__out, __size, __fmt, __prec, __v);
-+ else
-+ __ret = snprintf(__out, __size, __fmt, __v);
-+
-+#ifdef __UCLIBC_HAS_XLOCALE__
-+ __gnu_cxx::__uselocale(__old);
-+#elif defined __UCLIBC_HAS_LOCALE__
-+ setlocale(LC_ALL, __sav);
-+ free(__sav);
-+#endif
-+ return __ret;
-+ }
-+}
-+
-+#endif
-diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc
---- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 1969-12-31 18:00:00.000000000 -0600
-+++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_members.cc 2004-01-09 04:04:34.000000000 -0600
-@@ -0,0 +1,113 @@
-+// std::codecvt implementation details, GNU version -*- C++ -*-
-+
-+// Copyright (C) 2002, 2003 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 2, 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.
-+
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING. If not, write to the Free
-+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-+// USA.
-+
-+// As a special exception, you may use this file as part of a free software
-+// library without restriction. Specifically, if other files instantiate
-+// templates or use macros or inline functions from this file, or you compile
-+// this file and link it with other files to produce an executable, this
-+// file does not by itself cause the resulting executable to be covered by
-+// the GNU General Public License. This exception does not however
-+// invalidate any other reasons why the executable file might be covered by
-+// the GNU General Public License.
-+
-+//
-+// ISO C++ 14882: 22.2.1.5 - Template class codecvt
-+//
-+
-+// Written by Benjamin Kosnik <bkoz@redhat.com>
-+
-+#include <locale>
-+#include <bits/c++locale_internal.h>
-+
-+namespace std
-+{
-+ // Specializations.
-+#ifdef _GLIBCPP_USE_WCHAR_T
-+ codecvt_base::result
-+ codecvt<wchar_t, char, mbstate_t>::
-+ do_out(state_type& __state, const intern_type* __from,
-+ const intern_type* __from_end, const intern_type*& __from_next,
-+ extern_type* __to, extern_type* __to_end,
-+ extern_type*& __to_next) const
-+ {
-+ result __ret = error;
-+ size_t __len = min(__from_end - __from, __to_end - __to);
-+#ifdef __UCLIBC_HAS_XLOCALE__
-+ __c_locale __old = __uselocale(_S_c_locale);
-+#endif
-+ size_t __conv = wcsrtombs(__to, &__from, __len, &__state);
-+#ifdef __UCLIBC_HAS_XLOCALE__
-+ __uselocale(__old);
-+#endif
-+
-+ if (__conv == __len)
-+ {
-+ __from_next = __from;
-+ __to_next = __to + __conv;
-+ __ret = ok;
-+ }
-+ else if (__conv > 0 && __conv < __len)
-+ {
-+ __from_next = __from;
-+ __to_next = __to + __conv;
-+ __ret = partial;
-+ }
-+ else
-+ __ret = error;
-+
-+ return __ret;
-+ }
-+
-+ codecvt_base::result
-+ codecvt<wchar_t, char, mbstate_t>::
-+ do_in(state_type& __state, const extern_type* __from,
-+ const extern_type* __from_end, const extern_type*& __from_next,
-+ intern_type* __to, intern_type* __to_end,
-+ intern_type*& __to_next) const
-+ {
-+ result __ret = error;
-+ size_t __len = min(__from_end - __from, __to_end - __to);
-+#ifdef __UCLIBC_HAS_XLOCALE__
-+ __c_locale __old = __uselocale(_S_c_locale);
-+#endif
-+ size_t __conv = mbsrtowcs(__to, &__from, __len, &__state);
-+#ifdef __UCLIBC_HAS_XLOCALE__
-+ __uselocale(__old);
-+#endif
-+
-+ if (__conv == __len)
-+ {
-+ __from_next = __from;
-+ __to_next = __to + __conv;
-+ __ret = ok;
-+ }
-+ else if (__conv > 0 && __conv < __len)
-+ {
-+ __from_next = __from;
-+ __to_next = __to + __conv;
-+ __ret = partial;
-+ }
-+ else
-+ __ret = error;
-+
-+ return __ret;
-+ }
-+#endif
-+}
-diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h
---- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h 1969-12-31 18:00:00.000000000 -0600
-+++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/codecvt_specializations.h 2004-01-09 01:53:51.000000000 -0600
-@@ -0,0 +1,461 @@
-+// Locale support (codecvt) -*- C++ -*-
-+
-+// Copyright (C) 2000, 2001, 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
-+// terms of the GNU General Public License as published by the
-+// Free Software Foundation; either version 2, 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.
-+
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING. If not, write to the Free
-+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-+// USA.
-+
-+// As a special exception, you may use this file as part of a free software
-+// library without restriction. Specifically, if other files instantiate
-+// templates or use macros or inline functions from this file, or you compile
-+// this file and link it with other files to produce an executable, this
-+// file does not by itself cause the resulting executable to be covered by
-+// the GNU General Public License. This exception does not however
-+// invalidate any other reasons why the executable file might be covered by
-+// the GNU General Public License.
-+
-+//
-+// ISO C++ 14882: 22.2.1.5 Template class codecvt
-+//
-+
-+// Warning: this file is not meant for user inclusion. Use <locale>.
-+
-+// Written by Benjamin Kosnik <bkoz@cygnus.com>
-+
-+ // XXX
-+ // Define this here to codecvt.cc can have _S_max_size definition.
-+#define _GLIBCPP_USE___ENC_TRAITS 1
-+
-+ // Extension to use icov for dealing with character encodings,
-+ // including conversions and comparisons between various character
-+ // sets. This object encapsulates data that may need to be shared between
-+ // char_traits, codecvt and ctype.
-+ class __enc_traits
-+ {
-+ public:
-+ // Types:
-+ // NB: A conversion descriptor subsumes and enhances the
-+ // functionality of a simple state type such as mbstate_t.
-+ typedef iconv_t __desc_type;
-+
-+ protected:
-+ // Data Members:
-+ // Max size of charset encoding name
-+ static const int _S_max_size = 32;
-+ // Name of internal character set encoding.
-+ char _M_int_enc[_S_max_size];
-+ // Name of external character set encoding.
-+ char _M_ext_enc[_S_max_size];
-+
-+ // Conversion descriptor between external encoding to internal encoding.
-+ __desc_type _M_in_desc;
-+ // Conversion descriptor between internal encoding to external encoding.
-+ __desc_type _M_out_desc;
-+
-+ // Details the byte-order marker for the external encoding, if necessary.
-+ int _M_ext_bom;
-+
-+ // Details the byte-order marker for the internal encoding, if necessary.
-+ int _M_int_bom;
-+
-+ public:
-+ explicit __enc_traits()
-+ : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
-+ {
-+ memset(_M_int_enc, 0, _S_max_size);
-+ memset(_M_ext_enc, 0, _S_max_size);
-+ }
-+
-+ explicit __enc_traits(const char* __int, const char* __ext,
-+ int __ibom = 0, int __ebom = 0)
-+ : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
-+ {
-+ strncpy(_M_int_enc, __int, _S_max_size);
-+ strncpy(_M_ext_enc, __ext, _S_max_size);
-+ }
-+
-+ // 21.1.2 traits typedefs
-+ // p4
-+ // typedef STATE_T state_type
-+ // requires: state_type shall meet the requirements of
-+ // CopyConstructible types (20.1.3)
-+ __enc_traits(const __enc_traits& __obj): _M_in_desc(0), _M_out_desc(0)
-+ {
-+ strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
-+ strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
-+ _M_ext_bom = __obj._M_ext_bom;
-+ _M_int_bom = __obj._M_int_bom;
-+ }
-+
-+ // Need assignment operator as well.
-+ __enc_traits&
-+ operator=(const __enc_traits& __obj)
-+ {
-+ strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
-+ strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
-+ _M_in_desc = 0;
-+ _M_out_desc = 0;
-+ _M_ext_bom = __obj._M_ext_bom;
-+ _M_int_bom = __obj._M_int_bom;
-+ return *this;
-+ }
-+
-+ ~__enc_traits()
-+ {
-+ __desc_type __err = reinterpret_cast<iconv_t>(-1);
-+ if (_M_in_desc && _M_in_desc != __err)
-+ iconv_close(_M_in_desc);
-+ if (_M_out_desc && _M_out_desc != __err)
-+ iconv_close(_M_out_desc);
-+ }
-+
-+ void
-+ _M_init()
-+ {
-+ const __desc_type __err = reinterpret_cast<iconv_t>(-1);
-+ if (!_M_in_desc)
-+ {
-+ _M_in_desc = iconv_open(_M_int_enc, _M_ext_enc);
-+ if (_M_in_desc == __err)
-+ __throw_runtime_error("creating iconv input descriptor failed.");
-+ }
-+ if (!_M_out_desc)
-+ {
-+ _M_out_desc = iconv_open(_M_ext_enc, _M_int_enc);
-+ if (_M_out_desc == __err)
-+ __throw_runtime_error("creating iconv output descriptor failed.");
-+ }
-+ }
-+
-+ bool
-+ _M_good()
-+ {
-+ const __desc_type __err = reinterpret_cast<iconv_t>(-1);
-+ bool __test = _M_in_desc && _M_in_desc != __err;
-+ __test &= _M_out_desc && _M_out_desc != __err;
-+ return __test;
-+ }
-+
-+ const __desc_type*
-+ _M_get_in_descriptor()
-+ { return &_M_in_desc; }
-+
-+ const __desc_type*
-+ _M_get_out_descriptor()
-+ { return &_M_out_desc; }
-+
-+ int
-+ _M_get_external_bom()
-+ { return _M_ext_bom; }
-+
-+ int
-+ _M_get_internal_bom()
-+ { return _M_int_bom; }
-+
-+ const char*
-+ _M_get_internal_enc()
-+ { return _M_int_enc; }
-+
-+ const char*
-+ _M_get_external_enc()
-+ { return _M_ext_enc; }
-+ };
-+
-+ // Partial specialization
-+ // This specialization takes advantage of iconv to provide code
-+ // conversions between a large number of character encodings.
-+ template<typename _InternT, typename _ExternT>
-+ class codecvt<_InternT, _ExternT, __enc_traits>
-+ : public __codecvt_abstract_base<_InternT, _ExternT, __enc_traits>
-+ {
-+ public:
-+ // Types:
-+ typedef codecvt_base::result result;
-+ typedef _InternT intern_type;
-+ typedef _ExternT extern_type;
-+ typedef __enc_traits state_type;
-+ typedef __enc_traits::__desc_type __desc_type;
-+ typedef __enc_traits __enc_type;
-+
-+ // Data Members:
-+ static locale::id id;
-+
-+ explicit
-+ codecvt(size_t __refs = 0)
-+ : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
-+ { }
-+
-+ explicit
-+ codecvt(__enc_type* __enc, size_t __refs = 0)
-+ : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
-+ { }
-+
-+ protected:
-+ virtual
-+ ~codecvt() { }
-+
-+ virtual result
-+ do_out(state_type& __state, const intern_type* __from,
-+ const intern_type* __from_end, const intern_type*& __from_next,
-+ extern_type* __to, extern_type* __to_end,
-+ extern_type*& __to_next) const;
-+
-+ virtual result
-+ do_unshift(state_type& __state, extern_type* __to,
-+ extern_type* __to_end, extern_type*& __to_next) const;
-+
-+ virtual result
-+ do_in(state_type& __state, const extern_type* __from,
-+ const extern_type* __from_end, const extern_type*& __from_next,
-+ intern_type* __to, intern_type* __to_end,
-+ intern_type*& __to_next) const;
-+
-+ virtual int
-+ do_encoding() const throw();
-+
-+ virtual bool
-+ do_always_noconv() const throw();
-+
-+ virtual int
-+ do_length(const state_type&, const extern_type* __from,
-+ const extern_type* __end, size_t __max) const;
-+
-+ virtual int
-+ do_max_length() const throw();
-+ };
-+
-+ template<typename _InternT, typename _ExternT>
-+ locale::id
-+ codecvt<_InternT, _ExternT, __enc_traits>::id;
-+
-+ // This adaptor works around the signature problems of the second
-+ // argument to iconv(): SUSv2 and others use 'const char**', but glibc 2.2
-+ // uses 'char**', which matches the POSIX 1003.1-2001 standard.
-+ // Using this adaptor, g++ will do the work for us.
-+ template<typename _T>
-+ inline size_t
-+ __iconv_adaptor(size_t(*__func)(iconv_t, _T, size_t*, char**, size_t*),
-+ iconv_t __cd, char** __inbuf, size_t* __inbytes,
-+ char** __outbuf, size_t* __outbytes)
-+ { return __func(__cd, (_T)__inbuf, __inbytes, __outbuf, __outbytes); }
-+
-+ template<typename _InternT, typename _ExternT>
-+ codecvt_base::result
-+ codecvt<_InternT, _ExternT, __enc_traits>::
-+ do_out(state_type& __state, const intern_type* __from,
-+ const intern_type* __from_end, const intern_type*& __from_next,
-+ extern_type* __to, extern_type* __to_end,
-+ extern_type*& __to_next) const
-+ {
-+ result __ret = codecvt_base::error;
-+ if (__state._M_good())
-+ {
-+ typedef state_type::__desc_type __desc_type;
-+ const __desc_type* __desc = __state._M_get_out_descriptor();
-+ const size_t __fmultiple = sizeof(intern_type);
-+ size_t __fbytes = __fmultiple * (__from_end - __from);
-+ const size_t __tmultiple = sizeof(extern_type);
-+ size_t __tbytes = __tmultiple * (__to_end - __to);
-+
-+ // Argument list for iconv specifies a byte sequence. Thus,
-+ // all to/from arrays must be brutally casted to char*.
-+ char* __cto = reinterpret_cast<char*>(__to);
-+ char* __cfrom;
-+ size_t __conv;
-+
-+ // Some encodings need a byte order marker as the first item
-+ // in the byte stream, to designate endian-ness. The default
-+ // value for the byte order marker is NULL, so if this is
-+ // the case, it's not necessary and we can just go on our
-+ // merry way.
-+ int __int_bom = __state._M_get_internal_bom();
-+ if (__int_bom)
-+ {
-+ size_t __size = __from_end - __from;
-+ intern_type* __cfixed = static_cast<intern_type*>(__builtin_alloca(sizeof(intern_type) * (__size + 1)));
-+ __cfixed[0] = static_cast<intern_type>(__int_bom);
-+ char_traits<intern_type>::copy(__cfixed + 1, __from, __size);
-+ __cfrom = reinterpret_cast<char*>(__cfixed);
-+ __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
-+ &__fbytes, &__cto, &__tbytes);
-+ }
-+ else
-+ {
-+ intern_type* __cfixed = const_cast<intern_type*>(__from);
-+ __cfrom = reinterpret_cast<char*>(__cfixed);
-+ __conv = __iconv_adaptor(iconv, *__desc, &__cfrom, &__fbytes,
-+ &__cto, &__tbytes);
-+ }
-+
-+ if (__conv != size_t(-1))
-+ {
-+ __from_next = reinterpret_cast<const intern_type*>(__cfrom);
-+ __to_next = reinterpret_cast<extern_type*>(__cto);
-+ __ret = codecvt_base::ok;
-+ }
-+ else
-+ {
-+ if (__fbytes < __fmultiple * (__from_end - __from))
-+ {
-+ __from_next = reinterpret_cast<const intern_type*>(__cfrom);
-+ __to_next = reinterpret_cast<extern_type*>(__cto);
-+ __ret = codecvt_base::partial;
-+ }
-+ else
-+ __ret = codecvt_base::error;
-+ }
-+ }
-+ return __ret;
-+ }
-+
-+ template<typename _InternT, typename _ExternT>
-+ codecvt_base::result
-+ codecvt<_InternT, _ExternT, __enc_traits>::
-+ do_unshift(state_type& __state, extern_type* __to,
-+ extern_type* __to_end, extern_type*& __to_next) const
-+ {
-+ result __ret = codecvt_base::error;
-+ if (__state._M_good())
-+ {
-+ typedef state_type::__desc_type __desc_type;
-+ const __desc_type* __desc = __state._M_get_in_descriptor();
-+ const size_t __tmultiple = sizeof(intern_type);
-+ size_t __tlen = __tmultiple * (__to_end - __to);
-+
-+ // Argument list for iconv specifies a byte sequence. Thus,
-+ // all to/from arrays must be brutally casted to char*.
-+ char* __cto = reinterpret_cast<char*>(__to);
-+ size_t __conv = __iconv_adaptor(iconv,*__desc, NULL, NULL,
-+ &__cto, &__tlen);
-+
-+ if (__conv != size_t(-1))
-+ {
-+ __to_next = reinterpret_cast<extern_type*>(__cto);
-+ if (__tlen == __tmultiple * (__to_end - __to))
-+ __ret = codecvt_base::noconv;
-+ else if (__tlen == 0)
-+ __ret = codecvt_base::ok;
-+ else
-+ __ret = codecvt_base::partial;
-+ }
-+ else
-+ __ret = codecvt_base::error;
-+ }
-+ return __ret;
-+ }
-+
-+ template<typename _InternT, typename _ExternT>
-+ codecvt_base::result
-+ codecvt<_InternT, _ExternT, __enc_traits>::
-+ do_in(state_type& __state, const extern_type* __from,
-+ const extern_type* __from_end, const extern_type*& __from_next,
-+ intern_type* __to, intern_type* __to_end,
-+ intern_type*& __to_next) const
-+ {
-+ result __ret = codecvt_base::error;
-+ if (__state._M_good())
-+ {
-+ typedef state_type::__desc_type __desc_type;
-+ const __desc_type* __desc = __state._M_get_in_descriptor();
-+ const size_t __fmultiple = sizeof(extern_type);
-+ size_t __flen = __fmultiple * (__from_end - __from);
-+ const size_t __tmultiple = sizeof(intern_type);
-+ size_t __tlen = __tmultiple * (__to_end - __to);
-+
-+ // Argument list for iconv specifies a byte sequence. Thus,
-+ // all to/from arrays must be brutally casted to char*.
-+ char* __cto = reinterpret_cast<char*>(__to);
-+ char* __cfrom;
-+ size_t __conv;
-+
-+ // Some encodings need a byte order marker as the first item
-+ // in the byte stream, to designate endian-ness. The default
-+ // value for the byte order marker is NULL, so if this is
-+ // the case, it's not necessary and we can just go on our
-+ // merry way.
-+ int __ext_bom = __state._M_get_external_bom();
-+ if (__ext_bom)
-+ {
-+ size_t __size = __from_end - __from;
-+ extern_type* __cfixed = static_cast<extern_type*>(__builtin_alloca(sizeof(extern_type) * (__size + 1)));
-+ __cfixed[0] = static_cast<extern_type>(__ext_bom);
-+ char_traits<extern_type>::copy(__cfixed + 1, __from, __size);
-+ __cfrom = reinterpret_cast<char*>(__cfixed);
-+ __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
-+ &__flen, &__cto, &__tlen);
-+ }
-+ else
-+ {
-+ extern_type* __cfixed = const_cast<extern_type*>(__from);
-+ __cfrom = reinterpret_cast<char*>(__cfixed);
-+ __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
-+ &__flen, &__cto, &__tlen);
-+ }
-+
-+
-+ if (__conv != size_t(-1))
-+ {
-+ __from_next = reinterpret_cast<const extern_type*>(__cfrom);
-+ __to_next = reinterpret_cast<intern_type*>(__cto);
-+ __ret = codecvt_base::ok;
-+ }
-+ else
-+ {
-+ if (__flen < static_cast<size_t>(__from_end - __from))
-+ {
-+ __from_next = reinterpret_cast<const extern_type*>(__cfrom);
-+ __to_next = reinterpret_cast<intern_type*>(__cto);
-+ __ret = codecvt_base::partial;
-+ }
-+ else
-+ __ret = codecvt_base::error;
-+ }
-+ }
-+ return __ret;
-+ }
-+
-+ template<typename _InternT, typename _ExternT>
-+ int
-+ codecvt<_InternT, _ExternT, __enc_traits>::
-+ do_encoding() const throw()
-+ {
-+ int __ret = 0;
-+ if (sizeof(_ExternT) <= sizeof(_InternT))
-+ __ret = sizeof(_InternT)/sizeof(_ExternT);
-+ return __ret;
-+ }
-+
-+ template<typename _InternT, typename _ExternT>
-+ bool
-+ codecvt<_InternT, _ExternT, __enc_traits>::
-+ do_always_noconv() const throw()
-+ { return false; }
-+
-+ template<typename _InternT, typename _ExternT>
-+ int
-+ codecvt<_InternT, _ExternT, __enc_traits>::
-+ do_length(const state_type&, const extern_type* __from,
-+ const extern_type* __end, size_t __max) const
-+ { return min(__max, static_cast<size_t>(__end - __from)); }
-+
-+#ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS
-+// 74. Garbled text for codecvt::do_max_length
-+ template<typename _InternT, typename _ExternT>
-+ int
-+ codecvt<_InternT, _ExternT, __enc_traits>::
-+ do_max_length() const throw()
-+ { return 1; }
-+#endif
-diff -urN gcc-3.3.2/libstdc++-v3/config/locale/uclibc/collate_members.cc gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/collate_members.cc
---- gcc-3.3.2/libstdc++-v3/config/locale/uclibc/collate_members.cc 1969-12-31 18:00:00.000000000 -0600
-+++ gcc-3.3.2-uClibc/libstdc++-v3/config/locale/uclibc/collate_members.cc 2004-01-09 08:06:24.000000000 -0600
-@@ -0,0 +1,80 @@
-+// std::collate implementation details, GNU version -*- C++ -*-