From 051d07f0fc584c371837ac8026dcc5574351f262 Mon Sep 17 00:00:00 2001 From: Marcus Overhagen Date: Tue, 1 Nov 2005 01:11:26 +0000 Subject: [PATCH] no longer free() a title pointer that wasn't malloced, but instead came from the outside (right from the middle of some port link stuff) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14605 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/ServerWindow.cpp | 26 +++++++------------------- src/servers/app/ServerWindow.h | 2 +- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp index 617431a5dc..0f8864181e 100644 --- a/src/servers/app/ServerWindow.cpp +++ b/src/servers/app/ServerWindow.cpp @@ -131,7 +131,7 @@ struct dw_sync_data { ServerWindow::ServerWindow(const char *title, ServerApp *app, port_id clientPort, port_id looperPort, int32 handlerID) : MessageLooper(title && *title ? title : "Unnamed Window"), - fTitle(title), + fTitle(strdup(title && *title ? title : "Unnamed Window")), fDesktop(app->GetDesktop()), fServerApp(app), fWinBorder(NULL), @@ -160,7 +160,7 @@ ServerWindow::~ServerWindow() delete fWinBorder; - free(const_cast(fTitle)); + free(fTitle); delete_port(fMessagePort); BPrivate::gDefaultTokens.RemoveToken(fServerToken); @@ -173,11 +173,6 @@ ServerWindow::~ServerWindow() status_t ServerWindow::Init(BRect frame, uint32 look, uint32 feel, uint32 flags, uint32 workspace) { - if (fTitle == NULL) - fTitle = strdup("Unnamed Window"); - if (fTitle == NULL) - return B_NO_MEMORY; - // fMessagePort is the port to which the app sends messages for the server fMessagePort = create_port(100, fTitle); if (fMessagePort < B_OK) @@ -304,19 +299,12 @@ ServerWindow::Hide() void ServerWindow::SetTitle(const char* newTitle) { - const char* oldTitle = fTitle; - - if (newTitle == NULL || !newTitle[0]) - fTitle = strdup("Unnamed Window"); - else - fTitle = strdup(newTitle); - - if (fTitle == NULL) { - fTitle = oldTitle; + char *title = strdup(newTitle && *newTitle ? newTitle : "Unnamed Window"); + if (!title) return; - } - - free(const_cast(oldTitle)); + + free(fTitle); + fTitle = title; if (Thread() >= B_OK) { char name[B_OS_NAME_LENGTH]; diff --git a/src/servers/app/ServerWindow.h b/src/servers/app/ServerWindow.h index a0b41485f7..f6409f75d0 100644 --- a/src/servers/app/ServerWindow.h +++ b/src/servers/app/ServerWindow.h @@ -128,7 +128,7 @@ private: BPoint where); private: - const char* fTitle; + char * fTitle; Desktop* fDesktop; ServerApp* fServerApp;