Author: jkupec Date: Tue Oct 14 16:51:08 2008 New Revision: 11346 URL: http://svn.opensuse.org/viewcvs/zypp?rev=11346&view=rev Log: - catch exceptions from initialization of callbacks, show an error message and return ZYPPER_EXIT_ERR_BUG (bnc #435198) Modified: trunk/zypper/src/main.cc Modified: trunk/zypper/src/main.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/zypper/src/main.cc?rev=11346&r1=11345&r2=11346&view=diff ============================================================================== --- trunk/zypper/src/main.cc (original) +++ trunk/zypper/src/main.cc Tue Oct 14 16:51:08 2008 @@ -13,17 +13,11 @@ #include "callbacks/repo.h" #include "callbacks/media.h" #include "callbacks/locks.h" +#include "output/OutNormal.h" +#include "utils/messages.h" using namespace std; -RpmCallbacks rpm_callbacks; -SourceCallbacks source_callbacks; -MediaCallbacks media_callbacks; -KeyRingCallbacks keyring_callbacks; -DigestCallbacks digest_callbacks; -LocksCallbacks locks_callbacks; - - void signal_handler(int sig) { Zypper & zypper = *Zypper::instance(); @@ -72,10 +66,36 @@ MIL << "Hi, me zypper " VERSION " built " << __DATE__ << " " << __TIME__ << endl; + OutNormal out(Out::QUIET); + if (::signal(SIGINT, signal_handler) == SIG_ERR) - cerr << "Failed to set SIGINT handler." << endl; + out.error("Failed to set SIGINT handler."); if (::signal(SIGTERM, signal_handler) == SIG_ERR) - cerr << "Failed to set SIGTERM handler." << endl; + out.error("Failed to set SIGTERM handler."); + + try + { + static RpmCallbacks rpm_callbacks; + static SourceCallbacks source_callbacks; + static MediaCallbacks media_callbacks; + static KeyRingCallbacks keyring_callbacks; + static DigestCallbacks digest_callbacks; + static LocksCallbacks locks_callbacks; + } + catch (const zypp::Exception & e) + { + ZYPP_CAUGHT(e); + out.error(e, "Failed to initialize zypper callbacks."); + report_a_bug(out); + return ZYPPER_EXIT_ERR_BUG; + } + catch (...) + { + out.error("Failed to initialize zypper callbacks."); + ERR << "Failed to initialize zypper callbacks." << endl; + report_a_bug(out); + return ZYPPER_EXIT_ERR_BUG; + } return Zypper::instance()->main(argc, argv); } -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org