===================================================================
@@ -2032,10 +2032,10 @@
linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu)
enable_clocale_flag=gnu
;;
- darwin* | freebsd*)
+ darwin*)
enable_clocale_flag=darwin
;;
- dragonfly*)
+ dragonfly* | freebsd*)
enable_clocale_flag=dragonfly
;;
openbsd*)
@@ -2114,7 +2114,7 @@
CLOCALE_INTERNAL_H=config/locale/generic/c++locale_internal.h
;;
darwin)
- AC_MSG_RESULT(darwin or freebsd)
+ AC_MSG_RESULT(darwin)
CLOCALE_H=config/locale/generic/c_locale.h
CLOCALE_CC=config/locale/generic/c_locale.cc
@@ -2131,7 +2131,7 @@
;;
dragonfly)
- AC_MSG_RESULT(dragonfly)
+ AC_MSG_RESULT(dragonfly or freebsd)
CLOCALE_H=config/locale/dragonfly/c_locale.h
CLOCALE_CC=config/locale/dragonfly/c_locale.cc
===================================================================
@@ -1,6 +1,6 @@
// Locale support -*- C++ -*-
-// Copyright (C) 2011-2015 Free Software Foundation, Inc.
+// Copyright (C) 2014-2015 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,32 +37,60 @@
_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Information as gleaned from /usr/include/ctype.h
-
+
const ctype_base::mask*
ctype<char>::classic_table() throw()
- { return 0; }
+ { return NULL; }
- 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())
- {
+ ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
+ size_t __refs)
+ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
+ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
+ {
+ char* __old = setlocale(LC_CTYPE, NULL);
+ char* __sav = NULL;
+ if (strcmp(__old, "C"))
+ {
+ const size_t __len = strlen(__old) + 1;
+ __sav = new char[__len];
+ memcpy(__sav, __old, __len);
+ setlocale(LC_CTYPE, "C");
+ }
+ _M_toupper = NULL;
+ _M_tolower = NULL;
+ _M_table = __table ? __table : classic_table();
+ if (__sav)
+ {
+ setlocale(LC_CTYPE, __sav);
+ delete [] __sav;
+ }
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())
- {
+ ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
+ : facet(__refs), _M_c_locale_ctype(_S_get_c_locale()),
+ _M_del(__table != 0 && __del), _M_widen_ok(0), _M_narrow_ok(0)
+ {
+ char* __old = setlocale(LC_CTYPE, NULL);
+ char* __sav = NULL;
+ if (strcmp(__old, "C"))
+ {
+ const size_t __len = strlen(__old) + 1;
+ __sav = new char[__len];
+ memcpy(__sav, __old, __len);
+ setlocale(LC_CTYPE, "C");
+ }
+ _M_toupper = NULL;
+ _M_tolower = NULL;
+ _M_table = __table ? __table : classic_table();
+ if (__sav)
+ {
+ setlocale(LC_CTYPE, __sav);
+ delete [] __sav;
+ }
memset(_M_widen, 0, sizeof(_M_widen));
- _M_widen_ok = 0;
memset(_M_narrow, 0, sizeof(_M_narrow));
- _M_narrow_ok = 0;
}
char
@@ -84,7 +112,7 @@
ctype<char>::do_tolower(char __c) const
{ return ::tolower((int) __c); }
- const char*
+ const char*
ctype<char>::do_tolower(char* __low, const char* __high) const
{
while (__low < __high)
===================================================================
@@ -29,6 +29,10 @@
// System-specific #define, typedefs, corrections, etc, go here. This
// file will come before all others.
+#define _GLIBCXX_USE_C99_STDIO 1
+#define _GLIBCXX_USE_C99_STDLIB 1
+#define _GLIBCXX_USE_C99_WCHAR 1
+
#define _GLIBCXX_USE_C99_CHECK 1
#define _GLIBCXX_USE_C99_DYNAMIC (!(__ISO_C_VISIBLE >= 1999))
#define _GLIBCXX_USE_C99_LONG_LONG_CHECK 1