[haiku-commits] r38785 - in haiku/trunk/src/apps/debugger: . user_interface/gui/teams_window

  • From: philippe.houdoin@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 22 Sep 2010 12:50:08 +0200 (CEST)

Author: phoudoin
Date: 2010-09-22 12:50:08 +0200 (Wed, 22 Sep 2010)
New Revision: 38785
Changeset: http://dev.haiku-os.org/changeset/38785

Modified:
   haiku/trunk/src/apps/debugger/Debugger.cpp
   
haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsListView.cpp
   haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.cpp
   haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.h
Log:
Add missing allocation checks where needed.


Modified: haiku/trunk/src/apps/debugger/Debugger.cpp
===================================================================
--- haiku/trunk/src/apps/debugger/Debugger.cpp  2010-09-22 10:02:28 UTC (rev 
38784)
+++ haiku/trunk/src/apps/debugger/Debugger.cpp  2010-09-22 10:50:08 UTC (rev 
38785)
@@ -238,11 +238,18 @@
        switch (message->what) {
                case MSG_SHOW_TEAMS_WINDOW:
                {
-            if (fTeamsWindow)
+            if (fTeamsWindow) {
                        fTeamsWindow->Activate(true);
-            else {
-                   fTeamsWindow = new(std::nothrow) 
TeamsWindow(&fSettingsManager);
-                       fTeamsWindow->Show();
+                       break;
+            }
+
+               try {
+                               fTeamsWindow = 
TeamsWindow::Create(&fSettingsManager);
+                               if (fTeamsWindow != NULL)
+                                       fTeamsWindow->Show();
+               } catch(...) {
+                               // TODO: Notify the user!
+                               fprintf(stderr, "Error: Failed to create Teams 
window\n");
                }
                        break;
                }
@@ -343,8 +350,10 @@
        _StartTeamDebugger(team, thread, stopInMain);
 }
 
+
 // TeamDebugger::Listener
 
+
 void
 Debugger::TeamDebuggerStarted(TeamDebugger* debugger)
 {

Modified: 
haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsListView.cpp
===================================================================
--- 
haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsListView.cpp 
    2010-09-22 10:02:28 UTC (rev 38784)
+++ 
haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsListView.cpp 
    2010-09-22 10:50:08 UTC (rev 38785)
@@ -3,6 +3,7 @@
  * Distributed under the terms of the MIT License.
  */
 
+#include <new>
 
 #include <stdio.h>
 #include <string.h>
@@ -242,8 +243,11 @@
                        if (message->FindInt32("be:team", &team) != B_OK)
                                break;
 
-                       AddItem(new TeamListItem(team));
-                       SortItems(&TeamListItem::Compare);
+                       TeamListItem* item = new(std::nothrow) 
TeamListItem(team);
+                       if (item != NULL) {
+                               AddItem(new TeamListItem(team));
+                               SortItems(&TeamListItem::Compare);
+                       }
                        break;
                }
 
@@ -324,12 +328,14 @@
                }
 
                if (!item || tmi.team != item->TeamID()) {
-                       // Team not found in known teams list: insert an new 
item
-                       TeamListItem* newItem = new TeamListItem(tmi);
-                       if (!item)
-                               index++;        // No item with team id bigger 
found: insert at list end
+                       // Team not found in previously known teams list: 
insert a new item
+                       TeamListItem* newItem = new(std::nothrow) 
TeamListItem(tmi);
+                       if (newItem != NULL) {
+                               if (!item)
+                                       index++;        // No item found with 
bigger team id: insert at end
 
-                       AddItem(newItem, index);
+                               AddItem(newItem, index);
+                       }
                }
                index++;        // Move list sync head.
        }

Modified: 
haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.cpp
===================================================================
--- 
haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.cpp   
    2010-09-22 10:02:28 UTC (rev 38784)
+++ 
haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.cpp   
    2010-09-22 10:50:08 UTC (rev 38785)
@@ -26,43 +26,30 @@
        :
        BWindow(BRect(100, 100, 500, 250), "Teams", B_DOCUMENT_WINDOW,
                B_ASYNCHRONOUS_CONTROLS),
+       fTeamsListView(NULL),
        fSettingsManager(settingsManager)
 {
-       BMessage settings;
-       _LoadSettings(settings);
+}
 
-       BRect frame;
-       if (settings.FindRect("teams window frame", &frame) == B_OK) {
-               MoveTo(frame.LeftTop());
-               ResizeTo(frame.Width(), frame.Height());
-       }
 
-       // TODO: add button to start a team debugger
-       // TODO: add UI to setup arguments and environ, launch a program
-       //       and start his team debugger
+TeamsWindow::~TeamsWindow()
+{
+}
 
-       // Add a teams list view
-       frame = Bounds();
-       frame.right -= B_V_SCROLL_BAR_WIDTH;
 
-       fTeamsListView = new TeamsListView(frame, "TeamsList");
-       fTeamsListView->SetInvocationMessage(new BMessage(kMsgDebugThisTeam));
+/*static*/ TeamsWindow*
+TeamsWindow::Create(SettingsManager* settingsManager)
+{
+       TeamsWindow* self = new TeamsWindow(settingsManager);
 
-       BScrollView * teamsScroller = new BScrollView("TeamsListScroller",
-               fTeamsListView, B_FOLLOW_ALL_SIDES, 0, false, true, 
B_NO_BORDER);
-
-       AddChild(teamsScroller);
-
-       // small visual tweak
-       if (BScrollBar* scrollBar = teamsScroller->ScrollBar(B_VERTICAL)) {
-               scrollBar->MoveBy(0, -1);
-               scrollBar->ResizeBy(0, -(B_H_SCROLL_BAR_HEIGHT - 2));
+       try {
+               self->_Init();
+       } catch(...) {
+               delete self;
+               throw;
        }
-}
 
-
-TeamsWindow::~TeamsWindow()
-{
+       return self;
 }
 
 
@@ -103,6 +90,42 @@
 // #pragma mark --
 
 
+void
+TeamsWindow::_Init()
+{
+       BMessage settings;
+       _LoadSettings(settings);
+
+       BRect frame;
+       if (settings.FindRect("teams window frame", &frame) == B_OK) {
+               MoveTo(frame.LeftTop());
+               ResizeTo(frame.Width(), frame.Height());
+       }
+
+       // TODO: add button to start a team debugger
+       // TODO: add UI to setup arguments and environ, launch a program
+       //       and start his team debugger
+
+       // Add a teams list view
+       frame = Bounds();
+       frame.right -= B_V_SCROLL_BAR_WIDTH;
+
+       fTeamsListView = new TeamsListView(frame, "TeamsList");
+       fTeamsListView->SetInvocationMessage(new BMessage(kMsgDebugThisTeam));
+
+       BScrollView * teamsScroller = new BScrollView("TeamsListScroller",
+               fTeamsListView, B_FOLLOW_ALL_SIDES, 0, false, true, 
B_NO_BORDER);
+
+       AddChild(teamsScroller);
+
+       // small visual tweak
+       if (BScrollBar* scrollBar = teamsScroller->ScrollBar(B_VERTICAL)) {
+               scrollBar->MoveBy(0, -1);
+               scrollBar->ResizeBy(0, -(B_H_SCROLL_BAR_HEIGHT - 2));
+       }
+}
+
+
 status_t
 TeamsWindow::_OpenSettings(BFile& file, uint32 mode)
 {

Modified: 
haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.h
===================================================================
--- haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.h 
2010-09-22 10:02:28 UTC (rev 38784)
+++ haiku/trunk/src/apps/debugger/user_interface/gui/teams_window/TeamsWindow.h 
2010-09-22 10:50:08 UTC (rev 38785)
@@ -19,11 +19,14 @@
                                                                
TeamsWindow(SettingsManager* settingsManager);
        virtual                                         ~TeamsWindow();
 
+       static  TeamsWindow*            Create(SettingsManager* 
settingsManager);
+                                                                       // 
throws
+
        virtual void                            MessageReceived(BMessage* 
message);
        virtual bool                            QuitRequested();
 
 private:
-
+                       void                            _Init();
                        status_t                        _OpenSettings(BFile& 
file, uint32 mode);
                        status_t                        _LoadSettings(BMessage& 
settings);
                        status_t                        _SaveSettings();


Other related posts: