This is the mail archive of the
cygwin-apps
mailing list for the Cygwin project.
[PATCH setup] Throw exceptions instead of exiting with error codes
- From: Ken Brown <kbrown at cornell dot edu>
- To: cygwin-apps at cygwin dot com
- Date: Tue, 19 Dec 2017 12:20:18 -0500
- Subject: [PATCH setup] Throw exceptions instead of exiting with error codes
- Authentication-results: sourceware.org; auth=none
---
Exception.h | 1 +
PickView.cc | 11 +++++++----
choose.cc | 7 +++++--
3 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/Exception.h b/Exception.h
index 7b16612..15a145e 100644
--- a/Exception.h
+++ b/Exception.h
@@ -36,6 +36,7 @@ private:
#define APPERR_CORRUPT_PACKAGE 1
#define APPERR_IO_ERROR 2
#define APPERR_LOGIC_ERROR 3
+#define APPERR_WINDOW_ERROR 4
#define TOPLEVEL_CATCH(threadname) \
catch (Exception *e) \
diff --git a/PickView.cc b/PickView.cc
index d24866c..2e1beda 100644
--- a/PickView.cc
+++ b/PickView.cc
@@ -27,6 +27,7 @@
/* For 'source' */
#include "state.h"
#include "LogSingleton.h"
+#include "Exception.h"
using namespace std;
@@ -539,8 +540,9 @@ PickView::init(views _mode)
HDS_HORZ, 0, 0, 0, 0, GetHWND(),
(HMENU) IDC_CHOOSE_LISTHEADER, hinstance,
(LPVOID) NULL)) == NULL)
- // FIXME: throw an exception
- exit (10);
+ throw new Exception (TOSTRING(__LINE__) " " __FILE__,
+ "Unable to create list header window",
+ APPERR_WINDOW_ERROR);
// Retrieve the bounding rectangle of the parent window's
// client area, and then request size and position values
@@ -550,8 +552,9 @@ PickView::init(views _mode)
hdl.prc = &rcParent;
hdl.pwpos = ℘
if (!SendMessage (listheader, HDM_LAYOUT, 0, (LPARAM) & hdl))
- // FIXME: throw an exception
- exit (11);
+ throw new Exception (TOSTRING(__LINE__) " " __FILE__,
+ "Unable to get size and position of rectangle",
+ APPERR_WINDOW_ERROR);
// Set the font of the listheader, but don't redraw, because its not shown
// yet.This message does not return a value, so we are not checking it as we
diff --git a/choose.cc b/choose.cc
index c78f55d..32600c8 100644
--- a/choose.cc
+++ b/choose.cc
@@ -57,6 +57,8 @@
#include "UserSettings.h"
+#include "Exception.h"
+
#include "getopt++/BoolOption.h"
static BoolOption UpgradeAlsoOption (false, 'g', "upgrade-also", "also upgrade installed packages");
static BoolOption CleanOrphansOption (false, 'o', "delete-orphans", "remove orphaned packages");
@@ -143,8 +145,9 @@ ChooserPage::createListview ()
chooser = new PickView (cat);
RECT r = getDefaultListViewSize();
if (!chooser->Create(this, WS_CHILD | WS_HSCROLL | WS_VSCROLL | WS_VISIBLE,&r))
- // TODO throw exception
- exit (11);
+ throw new Exception (TOSTRING(__LINE__) " " __FILE__,
+ "Unable to create chooser list window",
+ APPERR_WINDOW_ERROR);
chooser->init(PickView::views::Category);
chooser->Show(SW_SHOW);
chooser->setViewMode (!is_new_install || UpgradeAlsoOption || hasManualSelections ?
--
2.15.1