system_error::what
Rodrigo Rivas
rodrigorivascosta@gmail.com
Wed Sep 15 09:06:00 GMT 2010
> I know, great, I see your patch for range based for loop is already in.
> By the way, the library bits should be already ok, please review, if you
> can.
Yes, I reviewed a while ago, and it seemed to me perfectly fine.
I've checked now the changes in the latest ISO draft and they are already there.
I'm attaching the patch updated to the current SVN revision, although
I think it is quite unchanged.
Regards.
Rodrigo.
-------------- next part --------------
Index: libstdc++-v3/include/std/system_error
===================================================================
--- libstdc++-v3/include/std/system_error (revision 164275)
+++ libstdc++-v3/include/std/system_error (working copy)
@@ -311,26 +311,29 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
public:
system_error(error_code __ec = error_code())
- : runtime_error(""), _M_code(__ec) { }
+ : runtime_error(__ec.message()), _M_code(__ec) { }
system_error(error_code __ec, const string& __what)
- : runtime_error(__what), _M_code(__ec) { }
-
+ : runtime_error(__what + ": " + __ec.message()), _M_code(__ec) { }
+
/*
* TODO: Add const char* ctors to all exceptions.
*
* system_error(error_code __ec, const char* __what)
- * : runtime_error(__what), _M_code(__ec) { }
+ * : runtime_error(__what + (": " + __ec.message())), _M_code(__ec) { }
*
* system_error(int __v, const error_category& __ecat, const char* __what)
- * : runtime_error(__what), _M_code(error_code(__v, __ecat)) { }
+ * : runtime_error(__what + (": " + __ec.message())),
+ * _M_code(error_code(__v, __ecat)) { }
*/
system_error(int __v, const error_category& __ecat)
- : runtime_error(""), _M_code(error_code(__v, __ecat)) { }
+ : runtime_error(error_code(__v, __ecat).message()),
+ _M_code(__v, __ecat) { }
system_error(int __v, const error_category& __ecat, const string& __what)
- : runtime_error(__what), _M_code(error_code(__v, __ecat)) { }
+ : runtime_error(__what + ": " + error_code(__v, __ecat).message()),
+ _M_code(__v, __ecat) { }
virtual ~system_error() throw();
Index: libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc
===================================================================
--- libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc (revision 164275)
+++ libstdc++-v3/testsuite/19_diagnostics/system_error/cons-1.cc (working copy)
@@ -18,7 +18,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <cstring>
+#include <string>
#include <system_error>
#include <testsuite_hooks.h>
@@ -33,14 +33,14 @@ int main()
{
std::system_error err1(e, s);
VERIFY( err1.code() == e );
- VERIFY( std::strcmp(err1.runtime_error::what(), s.c_str()) == 0 );
+ VERIFY( std::string(err1.what()).find(s) != std::string::npos );
}
// 2
{
std::system_error err2(95, std::system_category(), s);
VERIFY( err2.code() == std::error_code(95, std::system_category()) );
- VERIFY( std::strcmp(err2.runtime_error::what(), s.c_str()) == 0 );
+ VERIFY( std::string((err2.what(), s)).find(s) != std::string::npos );
}
return 0;
Index: libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc
===================================================================
--- libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc (revision 164275)
+++ libstdc++-v3/testsuite/19_diagnostics/system_error/what-1.cc (working copy)
@@ -22,7 +22,6 @@
#include <string>
#include <system_error>
-#include <cstring>
#include <testsuite_hooks.h>
using namespace std;
@@ -39,8 +38,8 @@ void test01()
// 2
system_error obj2(error_code(), s);
- VERIFY( strcmp(obj1.what(), s.data()) == 0 );
- VERIFY( strcmp(obj2.what(), s.data()) == 0 );
+ VERIFY( string(obj1.what()).find(s.data()) != string::npos );
+ VERIFY( string(obj2.what()).find(s.data()) != string::npos );
}
void test02()
@@ -49,7 +48,7 @@ void test02()
string s("lack of sunlight error");
system_error x(error_code(), s);
- VERIFY( strcmp(x.what(), s.data()) == 0 );
+ VERIFY( string(x.what()).find(s.data()) != string::npos );
}
int main(void)
Index: libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc
===================================================================
--- libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc (revision 164275)
+++ libstdc++-v3/testsuite/19_diagnostics/system_error/what-2.cc (working copy)
@@ -22,7 +22,6 @@
#include <string>
#include <system_error>
-#include <cstring>
#include <testsuite_hooks.h>
// libstdc++/2089
@@ -38,7 +37,7 @@ void test03()
try
{ throw fuzzy_logic(); }
catch(const fuzzy_logic& obj)
- { VERIFY( std::strcmp("whoa", obj.what()) == 0 ); }
+ { VERIFY( std::string(obj.what()).find("whoa") != std::string::npos ); }
catch(...)
{ VERIFY( false ); }
}
Index: libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc
===================================================================
--- libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc (revision 164275)
+++ libstdc++-v3/testsuite/19_diagnostics/system_error/what-big.cc (working copy)
@@ -17,7 +17,6 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#include <cstring>
#include <string>
#include <system_error>
#include <testsuite_hooks.h>
@@ -30,7 +29,7 @@ void test01()
bool test __attribute__((unused)) = true;
const std::string xxx(10000, 'x');
test_type t(std::error_code(), xxx);
- VERIFY( std::strcmp(t.what(), xxx.c_str()) == 0 );
+ VERIFY( std::string(t.what()).find(xxx) != std::string::npos );
}
int main(void)
Index: libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc
===================================================================
--- libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc (revision 164275)
+++ libstdc++-v3/testsuite/19_diagnostics/system_error/what-3.cc (working copy)
@@ -20,7 +20,6 @@
#include <string>
#include <system_error>
-#include <cstring>
#include <testsuite_hooks.h>
// test copy ctors, assignment operators, and persistence of member string data
@@ -52,7 +51,7 @@ void test04()
obj1 = obj2;
}
allocate_on_stack();
- VERIFY( std::strcmp(strlit1, obj1.what()) == 0 );
+ VERIFY( std::string(obj1.what()).find(strlit1) != std::string::npos );
// block 02
{
@@ -61,7 +60,7 @@ void test04()
obj1 = obj3;
}
allocate_on_stack();
- VERIFY( std::strcmp(strlit2, obj1.what()) == 0 );
+ VERIFY( std::string(obj1.what()).find(strlit2) != std::string::npos );
}
int main(void)
Index: libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc
===================================================================
--- libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc (revision 164275)
+++ libstdc++-v3/testsuite/19_diagnostics/system_error/what-4.cc (working copy)
@@ -20,7 +20,6 @@
// 19.1 Exception classes
-#include <cstring>
#include <string>
#include <system_error>
#include <testsuite_hooks.h>
More information about the Libstdc++
mailing list