Add missing allocation checks where needed.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38785 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Philippe Houdoin
2010-09-22 10:50:08 +00:00
parent 57ce714e81
commit 190108e9c9
4 changed files with 83 additions and 42 deletions
+13 -4
View File
@@ -238,11 +238,18 @@ Debugger::MessageReceived(BMessage* message)
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 @@ Debugger::ArgvReceived(int32 argc, char** argv)
_StartTeamDebugger(team, thread, stopInMain);
}
// TeamDebugger::Listener
void
Debugger::TeamDebuggerStarted(TeamDebugger* debugger)
{
@@ -3,6 +3,7 @@
* Distributed under the terms of the MIT License.
*/
#include <new>
#include <stdio.h>
#include <string.h>
@@ -242,8 +243,11 @@ TeamsListView::MessageReceived(BMessage* message)
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 @@ TeamsListView::_UpdateList()
}
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.
}
@@ -26,38 +26,9 @@ TeamsWindow::TeamsWindow(SettingsManager* settingsManager)
:
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
// 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));
}
}
@@ -66,6 +37,22 @@ TeamsWindow::~TeamsWindow()
}
/*static*/ TeamsWindow*
TeamsWindow::Create(SettingsManager* settingsManager)
{
TeamsWindow* self = new TeamsWindow(settingsManager);
try {
self->_Init();
} catch(...) {
delete self;
throw;
}
return self;
}
void
TeamsWindow::MessageReceived(BMessage* message)
{
@@ -103,6 +90,42 @@ TeamsWindow::QuitRequested()
// #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)
{
@@ -19,11 +19,14 @@ public:
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();