summaryrefslogtreecommitdiff
path: root/cpp/src/slice2docbook/Main.cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2009-05-20 15:44:43 -0230
committerDwayne Boone <dwayne@zeroc.com>2009-05-20 15:44:43 -0230
commitb902f409574d383c4f1b6f01fd8c8b56cbb50862 (patch)
treebc0622d1ce66844536341e60116c75c47c54082e /cpp/src/slice2docbook/Main.cpp
parentRemove debug line (diff)
downloadice-b902f409574d383c4f1b6f01fd8c8b56cbb50862.tar.bz2
ice-b902f409574d383c4f1b6f01fd8c8b56cbb50862.tar.xz
ice-b902f409574d383c4f1b6f01fd8c8b56cbb50862.zip
Bug 3996 - slice compilers can terminate on uncaught exceptions
Diffstat (limited to 'cpp/src/slice2docbook/Main.cpp')
-rw-r--r--cpp/src/slice2docbook/Main.cpp39
1 files changed, 38 insertions, 1 deletions
diff --git a/cpp/src/slice2docbook/Main.cpp b/cpp/src/slice2docbook/Main.cpp
index 48e2f0a6183..6782d7aace0 100644
--- a/cpp/src/slice2docbook/Main.cpp
+++ b/cpp/src/slice2docbook/Main.cpp
@@ -55,7 +55,7 @@ usage(const char* n)
}
int
-main(int argc, char* argv[])
+compile(int argc, char* argv[])
{
IceUtilInternal::Options opts;
opts.addOpt("h", "help");
@@ -241,3 +241,40 @@ main(int argc, char* argv[])
return status;
}
+
+int
+main(int argc, char* argv[])
+{
+ try
+ {
+ return compile(argc, argv);
+ }
+ catch(const IceUtil::Exception& ex)
+ {
+ cerr << ex.what() << endl;
+#ifdef __GNUC__
+ cerr << ex.ice_stackTrace() << endl;
+#endif
+ return EXIT_FAILURE;
+ }
+ catch(const std::exception& ex)
+ {
+ cerr << ex.what() << endl;
+ return EXIT_FAILURE;
+ }
+ catch(const std::string& msg)
+ {
+ cerr << msg << endl;
+ return EXIT_FAILURE;
+ }
+ catch(const char* msg)
+ {
+ cerr << msg << endl;
+ return EXIT_FAILURE;
+ }
+ catch(...)
+ {
+ cerr << "unknown exception" << endl;
+ return EXIT_FAILURE;
+ }
+}