1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /*
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Copyright (c) 1999
- * Boris Fomitchev
- *
- * This material is provided "as is", with absolutely no warranty expressed
- * or implied. Any use is at your own risk.
- *
- * Permission to use or copy this software for any purpose is hereby granted
- * without fee, provided the above notices are retained on all copies.
- * Permission to modify the code and to distribute modified code is granted,
- * provided the above notices are retained, and a notice that the code was
- * modified is included with the above copyright notice.
- *
- */
- __Named_exception::__Named_exception(const string& __str) {
- size_t __size = strlen(_STLP_PRIV __get_c_string(__str)) + 1;
- if (__size > _S_bufsize) {
- _M_name = __STATIC_CAST(char*, malloc(__size * sizeof(char)));
- if (!_M_name) {
- __size = _S_bufsize;
- _M_name = _M_static_name;
- }
- else {
- *(__REINTERPRET_CAST(size_t*, &_M_static_name[0])) = __size * sizeof(char);
- }
- }
- else {
- _M_name = _M_static_name;
- }
- #if !defined (_STLP_USE_SAFE_STRING_FUNCTIONS)
- strncpy(_M_name, _STLP_PRIV __get_c_string(__str), __size - 1);
- _M_name[__size - 1] = '\0';
- #else
- strncpy_s(_M_name, __size, _STLP_PRIV __get_c_string(__str), __size - 1);
- #endif
- }
- __Named_exception::__Named_exception(const __Named_exception& __x) {
- size_t __size = strlen(__x._M_name) + 1;
- if (__size > _S_bufsize) {
- _M_name = __STATIC_CAST(char*, malloc(__size * sizeof(char)));
- if (!_M_name) {
- __size = _S_bufsize;
- _M_name = _M_static_name;
- }
- else {
- *(__REINTERPRET_CAST(size_t*, &_M_static_name[0])) = __size * sizeof(char);
- }
- }
- else {
- _M_name = _M_static_name;
- }
- #if !defined (_STLP_USE_SAFE_STRING_FUNCTIONS)
- strncpy(_M_name, __x._M_name, __size - 1);
- _M_name[__size - 1] = '\0';
- #else
- strncpy_s(_M_name, __size, __x._M_name, __size - 1);
- #endif
- }
- __Named_exception& __Named_exception::operator = (const __Named_exception& __x) {
- size_t __size = strlen(__x._M_name) + 1;
- size_t __buf_size = _M_name != _M_static_name ? *(__REINTERPRET_CAST(size_t*, &_M_static_name[0])) : _S_bufsize;
- if (__size > __buf_size) {
- // Being here necessarily mean that we need to allocate a buffer:
- if (_M_name != _M_static_name) free(_M_name);
- _M_name = __STATIC_CAST(char*, malloc(__size * sizeof(char)));
- if (!_M_name) {
- __size = _S_bufsize;
- _M_name = _M_static_name;
- }
- else {
- *(__REINTERPRET_CAST(size_t*, &_M_static_name[0])) = __size * sizeof(char);
- }
- }
- #if !defined (_STLP_USE_SAFE_STRING_FUNCTIONS)
- strncpy(_M_name, __x._M_name, __size - 1);
- _M_name[__size - 1] = '\0';
- #else
- strncpy_s(_M_name, __size, __x._M_name, __size - 1);
- #endif
- return *this;
- }
- __Named_exception::~__Named_exception() _STLP_NOTHROW_INHERENTLY {
- if (_M_name != _M_static_name)
- free(_M_name);
- }
- const char* __Named_exception::what() const _STLP_NOTHROW_INHERENTLY
- { return _M_name; }
|