From 914c1a452894b675d8ad1ed85787ac5c44567543 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Tue, 28 Jun 2005 15:30:44 +0000 Subject: [PATCH] You can't return a pointer to an array allocated on the stack. This fixes the uptime not being showed correctly. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13320 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/abouthaiku/AboutHaiku.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/apps/abouthaiku/AboutHaiku.cpp b/src/apps/abouthaiku/AboutHaiku.cpp index cfe01132b3..eb86e6b048 100644 --- a/src/apps/abouthaiku/AboutHaiku.cpp +++ b/src/apps/abouthaiku/AboutHaiku.cpp @@ -31,7 +31,7 @@ #define MOVE_INFO_VIEW 'mviv' -const char *UptimeToString(void); +static const char *UptimeToString(char string[], size_t size); class AboutApp : public BApplication { @@ -235,7 +235,9 @@ AboutView::AboutView(const BRect &r) fUptimeView = new BStringView(r, "uptimetext", ""); fInfoView->AddChild(fUptimeView); - fUptimeView->SetText(UptimeToString()); + + char uptimeString[255]; + fUptimeView->SetText(UptimeToString(uptimeString, 255)); // Begin construction of the credits view r = Bounds(); @@ -442,7 +444,8 @@ AboutView::Draw(BRect update) void AboutView::Pulse(void) { - fUptimeView->SetText(UptimeToString()); + char uptime[255]; + fUptimeView->SetText(UptimeToString(uptime, 255)); } @@ -463,10 +466,9 @@ AboutView::MessageReceived(BMessage *msg) // #pragma mark - -const char * -UptimeToString(void) +static const char * +UptimeToString(char string[], size_t size) { - char string[255]; int64 days, hours, minutes, seconds, remainder; int64 systime = system_time(); @@ -481,7 +483,7 @@ UptimeToString(void) remainder = remainder % 60000000; seconds = remainder / 1000000; - sprintf(string, "%lld days, %lld hours, %lld minutes, %lld seconds", + snprintf(string, size, "%lld days, %lld hours, %lld minutes, %lld seconds", days, hours, minutes, seconds); } else if (systime > 3600000000LL) { hours = systime / 3600000000LL; @@ -491,17 +493,17 @@ UptimeToString(void) remainder = remainder % 60000000; seconds = remainder / 1000000; - sprintf(string, "%lld hours, %lld minutes, %lld seconds", + snprintf(string, size, "%lld hours, %lld minutes, %lld seconds", hours, minutes, seconds); } else if (systime > 60000000) { minutes = systime / 60000000; remainder = systime % 60000000; seconds = remainder / 1000000; - sprintf(string, "%lld minutes, %lld seconds", minutes, seconds); + snprintf(string, size, "%lld minutes, %lld seconds", minutes, seconds); } else { seconds = systime / 1000000; - sprintf(string, "%lld seconds", seconds); + snprintf(string, size, "%lld seconds", seconds); } return string;