31#if 3 == __GNUG__ && 3 > __GNUC_MINOR__ \
32 || 3 == __GNUC_MINOR__ && 1 >__GNUC_PATCHLEVEL__
36# ifndef _RWSTD_NO_EXTERN_TEMPLATE
37# define _RWSTD_NO_EXTERN_TEMPLATE
43#ifndef _RWSTD_EDG_ECCP
74# define vsnprintf _vsnprintf
75# undef _RWSTD_NO_VSNPRINTF
78#if defined (_RWSTD_NO_VSNPRINTF) && !defined (_RWSTD_NO_VSNPRINTF_IN_LIBC)
82vsnprintf (
char*, _RWSTD_SIZE_T,
const char*, va_list)
_LIBC_THROWS();
85# undef _RWSTD_NO_VSNPRINTF
89#ifndef _RWSTD_NO_VSNPRINTF
90# define _RWSTD_VSNPRINTF(buf, size, fmat, va) vsnprintf (buf, size, fmat, va)
93# define _RWSTD_VSNPRINTF(buf, ignore, fmat, va) vsprintf (buf, fmat, va)
116# undef _RWSTD_NO_GLOBAL_UNCAUGHT_EXCEPTION
117# define UNCAUGHT_EXCEPTION __uncaught_exception
120#ifndef UNCAUGHT_EXCEPTION
121# define UNCAUGHT_EXCEPTION uncaught_exception
135#ifndef _RWSTD_NO_HONOR_STD
137# if defined (_RWSTD_NO_STD_TERMINATE)
142# ifndef _RWSTD_NO_GLOBAL_TERMINATE
157# if defined (_RWSTD_NO_STD_SET_TERMINATE)
163# ifndef _RWSTD_NO_GLOBAL_SET_TERMINATE
165 return ::set_terminate (
handler);
186# if defined (_RWSTD_NO_STD_SET_UNEXPECTED)
192# ifndef _RWSTD_NO_GLOBAL_SET_UNEXPECTED
194 return ::set_unexpected (
handler);
215# if defined (_RWSTD_NO_STD_UNEXPECTED)
220# ifndef _RWSTD_NO_GLOBAL_UNEXPECTED
235# if defined (_RWSTD_NO_STD_UNCAUGHT_EXCEPTION)
240# ifndef _RWSTD_NO_GLOBAL_UNCAUGHT_EXCEPTION
242 return ::UNCAUGHT_EXCEPTION ();
246# ifndef _RWSTD_NO_EXCEPTIONS
266#if defined _RWSTD_EXCEPTION_INCLUDED
276# if !defined (_RWSTD_NO_STD_EXCEPTION) \
277 || !defined (_RWSTD_NO_RUNTIME_IN_STD) \
278 || 2 == __GNUG__ && !defined (_RWSTD_NO_HONOR_STD)
285#ifdef _RWSTD_NO_EXCEPTION_DEFAULT_CTOR
287exception::exception ()
_THROWS (())
289#if defined (_MSC_VER)
294#elif defined (__INTEL_COMPILER)
303#ifdef _RWSTD_NO_EXCEPTION_COPY_CTOR
307#if defined (_MSC_VER)
312#elif defined (__INTEL_COMPILER)
321#ifdef _RWSTD_NO_EXCEPTION_DTOR
323exception::~exception ()
_THROWS (())
330#ifdef _RWSTD_NO_EXCEPTION_ASSIGNMENT
340#ifdef _RWSTD_NO_EXCEPTION_WHAT
342const char* exception::what () const
_THROWS (())
350# if !defined (_RWSTD_NO_STD_EXCEPTION) \
351 || !defined (_RWSTD_NO_RUNTIME_IN_STD) \
352 || 2 == __GNUG__ && !defined (_RWSTD_NO_HONOR_STD)
362# if !defined (_RWSTD_NO_STD_BAD_EXCEPTION) \
363 || !defined (_RWSTD_NO_RUNTIME_IN_STD) \
364 || 2 == __GNUG__ && !defined (_RWSTD_NO_HONOR_STD)
371#ifdef _RWSTD_NO_BAD_EXCEPTION_DEFAULT_CTOR
373bad_exception::bad_exception ()
_THROWS (())
380#ifdef _RWSTD_NO_BAD_EXCEPTION_COPY_CTOR
389#ifdef _RWSTD_NO_BAD_EXCEPTION_DTOR
391bad_exception::~bad_exception ()
_THROWS (())
398#ifdef _RWSTD_NO_BAD_EXCEPTION_ASSIGNMENT
403 exception::operator= (
rhs);
410#ifdef _RWSTD_NO_BAD_EXCEPTION_WHAT
412const char* bad_exception::what () const
_THROWS (())
420# if !defined (_RWSTD_NO_STD_BAD_EXCEPTION) \
421 || !defined (_RWSTD_NO_RUNTIME_IN_STD) \
422 || 2 == __GNUG__ && !defined (_RWSTD_NO_HONOR_STD)
444 if (__rw_what_buf ==
buf) {
456__rw_vfmtwhat (
char *
buf,
457 _RWSTD_SIZE_T bufsize,
464#ifndef _RWSTD_NO_VSNPRINTF
466 _RWSTD_SIZE_T
size = bufsize ? bufsize : 256;
469 _RWSTD_SIZE_T
size = bufsize ? bufsize : strlen (fmat);
523#ifdef _RWSTD_NO_VSNPRINTF_VFLOW_VALID
540#ifdef _RWSTD_NO_VSNPRINTF_VFLOW_VALID
542 if (nwrote >=
int (
size) - 1) {
551 else if (
int (
size) <= nwrote)
560 __rw_free_what_buf (
buf);
569char* __rw_vfmtwhat (
char *
buf,
570 _RWSTD_SIZE_T bufsize,
574 typedef _STD::messages<char> _Msgs;
576 static const char *__fname = 0;
577 static int __catset = 1;
578 static _Msgs::catalog __cat = -1;
581 static __rw_aligned_buffer<_Msgs> msgs;
602 char *__set = strrchr (
__fn,
':');
605 if ( 1 != sscanf (__set,
"%d", &__catset)
610 new (msgs._C_store ()) _Msgs;
615 __cat = msgs._C_data ()->open (
__fn, _STD::locale::classic ());
626 _STD::string fmat = msgs._C_data ()->get (__cat, __catset,
id,
"");
631 return __rw_vfmtwhat (
buf, bufsize, fmat.data (), va);
634#ifdef _RWSTD_REENTRANT
636extern const char*
const __rw_mutex_exception =
637 "Thread synchronization exception.";
648static void __rw_throw_exception (
int id,
char *what)
650#ifndef _RWSTD_NO_EXCEPTIONS
667#ifndef _RWSTD_BAD_ALLOC
668# ifndef _RWSTD_NO_RUNTIME_IN_STD
681 throw (_STD::logic_error&)_STD::logic_error ()._C_assign (what, 0);
684 throw (_STD::domain_error&)_STD::domain_error ()._C_assign (what, 0);
687 throw (_STD::invalid_argument&)
688 _STD::invalid_argument ()._C_assign (what, 0);
691 throw (_STD::length_error&)_STD::length_error ()._C_assign (what, 0);
694 throw (_STD::out_of_range&)_STD::out_of_range ()._C_assign (what, 0);
697 throw (_STD::runtime_error&)
698 _STD::runtime_error ()._C_assign (what, 0);
701 throw (_STD::range_error&)_STD::range_error ()._C_assign (what, 0);
704 throw (_STD::overflow_error&)
705 _STD::overflow_error ()._C_assign (what, 0);
708 throw (_STD::underflow_error&)
709 _STD::underflow_error ()._C_assign (what, 0);
711#ifndef _RWSTD_NO_EXT_FAILURE
714 throw (__rw_failbit_set&)
715 __rw_failbit_set ()._C_assign (what, 0);
718 throw (__rw_badbit_set&)
719 __rw_badbit_set ()._C_assign (what, 0);
722 throw (__rw_eofbit_set&)
723 __rw_eofbit_set ()._C_assign (what, 0);
735 throw (__rw_failure&)
736 __rw_failure ()._C_assign (what, 0);
744 throw (_STD::runtime_error&)
745 _STD::runtime_error ()._C_assign (what, 0);
748 __rw_free_what_buf (what);
753 fprintf (
stderr,
"Exception: %s.\n", what);
754 __rw_free_what_buf (what);
762 default: __str =
"unknown exception";
765 fprintf (
stderr,
"Exception: %s.\n", __str);
775_RWSTD_EXPORT void (*__rw_throw_proc)(int,
char*) = __rw_throw_exception;
780 if (!__rw_throw_proc)
786 __rw_throw_proc (
id, 0);
800 va_copy (tmp_va, va);
803 char *what = _RW::__rw_vfmtwhat (0, 0,
id, tmp_va);
809 char *what = _RW::__rw_vfmtwhat (0, 0,
id, va);
821 if (id < 0 || id >=
int (
sizeof errors /
sizeof *
errors))
825 what = _RW::__rw_vfmtwhat (0, 0,
errors [
id], va);
832 __rw_throw_proc (
id, what);
837__rw_exception::__rw_exception ()
_THROWS (())
838 : _STD::exception (), _C_what (0) { }
841__rw_exception::__rw_exception (
const __rw_exception &
rhs)
842 : _STD::exception (
rhs), _C_what (0)
844 _C_assign (
rhs.what ());
848 __rw_exception::__rw_exception (
const char *
str)
849 : _STD::exception (), _C_what (0)
856__rw_exception::__rw_exception (
const _STD::string &whatstr)
859 _C_assign (whatstr.c_str (), whatstr.length ());
864 __rw_exception::~__rw_exception ()
_THROWS (())
866 __rw_free_what_buf (_C_what);
881__rw_exception& __rw_exception::
882operator= (
const __rw_exception &__rhs)
_THROWS (())
884 _C_assign (__rhs.what ());
890 const char* __rw_exception::
894 return _C_what ? _C_what :
"";
903__rw_exception& __rw_exception::
904_C_assign (
const char *whatstr,
size_t len )
906 if (whatstr != _C_what) {
909 if (whatstr && *whatstr) {
911 if (whatstr == __rw_what_buf) {
917 if (_RWSTD_SIZE_MAX ==
len)
918 len = strlen (whatstr);
923 memcpy (
tmp, whatstr,
len + 1);
932 __rw_free_what_buf (_C_what);
944 __rw_failure::~__rw_failure ()
_THROWS (())
950 __rw_badbit_set::~__rw_badbit_set ()
_THROWS (())
956 __rw_eofbit_set::~__rw_eofbit_set ()
_THROWS (())
962 __rw_failbit_set::~__rw_failbit_set ()
_THROWS (())
const char *const errors[]
void(* terminate_handler)()
void(* unexpected_handler)()
bool(* uncaught_exception)()
#define _RWSTD_GNUC_ATTRIBUTE(attr)
#define va_start(va, name)
#define _RWSTD_THREAD_PREDECREMENT(x, mutex)
#define _RWSTD_THREAD_PREINCREMENT(x, mutex)
#define _RWSTD_VA_COPY(va_dst, va_src)
#define _RWSTD_NAMESPACE(name)
#define _RWSTD_ASSERT(ignore)
#define _RWSTD_CONST_CAST(T, x)
#define _RWSTD_MT_STATIC_GUARD(name)
#define _RWSTD_ERROR_FACET_NOT_FOUND
#define _RWSTD_ERROR_OVERFLOW_ERROR
#define _RWSTD_ERROR_BAD_ALLOC
#define _RWSTD_ERROR_IOSTATE_BIT_SET
#define _RWSTD_ERROR_BAD_CAST
#define _RWSTD_ERROR_BAD_POINTER
#define _RWSTD_ERROR_RUNTIME_ERROR
#define _RWSTD_ERROR_LOCALE_BAD_NAME
#define _RWSTD_ERROR_STRINGS
#define _RWSTD_ERROR_FAILBIT_SET
#define _RWSTD_ERROR_FIRST
#define _RWSTD_ERROR_RANGE_ERROR
#define _RWSTD_ERROR_LOGIC_ERROR
#define _RWSTD_ERROR_LENGTH_ERROR
#define _RWSTD_ERROR_INVALID_ARGUMENT
#define _RWSTD_ERROR_BADBIT_SET
#define _RWSTD_ERROR_LOCALE_BAD_CAT
#define _RWSTD_ERROR_OUT_OF_RANGE
#define _RWSTD_ERROR_CATALOG
#define _RWSTD_ERROR_UNDERFLOW_ERROR
#define _RWSTD_ERROR_CODECVT
#define _RWSTD_ERROR_BAD_EXCEPTION
#define _RWSTD_ERROR_EXCEPTION
#define _RWSTD_ERROR_DOMAIN_ERROR
#define _RWSTD_ERROR_ENVVAR
#define _RWSTD_ERROR_LOCALE_ERROR_NAME
#define _RWSTD_ERROR_EOFBIT_SET
#define _RWSTD_VSNPRINTF(buf, size, fmat, va)
#define UNCAUGHT_EXCEPTION
void terminate() _RWSTD_GNUC_ATTRIBUTE((__noreturn__))
void unexpected() _RWSTD_GNUC_ATTRIBUTE((__noreturn__))