From patchwork Tue Sep 10 19:08:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 34471 Received: (qmail 25006 invoked by alias); 10 Sep 2019 19:09:04 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 24876 invoked by uid 89); 10 Sep 2019 19:09:03 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-17.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.1 spammy=management X-HELO: gateway30.websitewelcome.com Received: from gateway30.websitewelcome.com (HELO gateway30.websitewelcome.com) (192.185.197.25) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 10 Sep 2019 19:09:02 +0000 Received: from cm13.websitewelcome.com (cm13.websitewelcome.com [100.42.49.6]) by gateway30.websitewelcome.com (Postfix) with ESMTP id 110BC912D for ; Tue, 10 Sep 2019 14:09:01 -0500 (CDT) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id 7lVdi2No43Qi07lVdif6lZ; Tue, 10 Sep 2019 14:09:01 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Sender:Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=PFhMjBNFT9ocvvPrLo68FqCha5ystqDqjxqWGBwrm/c=; b=obODCzVsuIMwNdMQiMtouok3ju uJZmSB5hk9F0FaE3CEnW+TH7c8Hg6czH7VPwn/qzwwfU0+a8DlJ58LQmOFnFtovaZioSWuUu73Qb2 WBjTk7rbXkbl1NyiIkxMhTpjO; Received: from 71-218-73-27.hlrn.qwest.net ([71.218.73.27]:51786 helo=bapiya.Home) by box5379.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1i7lVc-000EYF-Qg; Tue, 10 Sep 2019 14:09:00 -0500 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 04/20] Change tui_make_status_line to return std::string Date: Tue, 10 Sep 2019 13:08:41 -0600 Message-Id: <20190910190857.6562-5-tom@tromey.com> In-Reply-To: <20190910190857.6562-1-tom@tromey.com> References: <20190910190857.6562-1-tom@tromey.com> This changes tui_make_status_line to return std::string. This cleans it up a bit, and removes some explicit memory management. gdb/ChangeLog 2019-09-10 Tom Tromey * tui/tui-stack.c (tui_make_status_line): Return std::string. (tui_locator_window::rerender): Update. --- gdb/ChangeLog | 5 ++++ gdb/tui/tui-stack.c | 69 ++++++++++++++++----------------------------- 2 files changed, 30 insertions(+), 44 deletions(-) diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c index 36208d0cac0..a2e4a161bb7 100644 --- a/gdb/tui/tui-stack.c +++ b/gdb/tui/tui-stack.c @@ -66,14 +66,12 @@ tui_locator_win_info_ptr (void) /* Create the status line to display as much information as we can on this single line: target name, process number, current function, current line, current PC, SingleKey mode. */ -static char * +static std::string tui_make_status_line (struct tui_locator_window *loc) { - char *string; char line_buf[50], *pname; - char *buf; int status_size; - int i, proc_width; + int proc_width; const char *pid_name; int target_width; int pid_width; @@ -97,8 +95,6 @@ tui_make_status_line (struct tui_locator_window *loc) pid_width = MAX_PID_WIDTH; status_size = tui_term_width (); - string = (char *) xmalloc (status_size + 1); - buf = (char*) alloca (status_size + 1); /* Translate line number and obtain its size. */ if (loc->line_no > 0) @@ -158,61 +154,47 @@ tui_make_status_line (struct tui_locator_window *loc) pname = loc->proc_name; /* Now create the locator line from the string version of the - elements. We could use sprintf() here but that wouldn't ensure - that we don't overrun the size of the allocated buffer. - strcat_to_buf() will. */ - *string = (char) 0; + elements. */ + string_file string; if (target_width > 0) - { - sprintf (buf, "%*.*s ", - -target_width, target_width, target_shortname); - strcat_to_buf (string, status_size, buf); - } + string.printf ("%*.*s ", -target_width, target_width, target_shortname); if (pid_width > 0) - { - sprintf (buf, "%*.*s ", - -pid_width, pid_width, pid_name); - strcat_to_buf (string, status_size, buf); - } - + string.printf ("%*.*s ", -pid_width, pid_width, pid_name); + /* Show whether we are in SingleKey mode. */ if (tui_current_key_mode == TUI_SINGLE_KEY_MODE) { - strcat_to_buf (string, status_size, SINGLE_KEY); - strcat_to_buf (string, status_size, " "); + string.puts (SINGLE_KEY); + string.puts (" "); } /* Procedure/class name. */ if (proc_width > 0) { if (strlen (pname) > proc_width) - sprintf (buf, "%s%*.*s* ", PROC_PREFIX, - 1 - proc_width, proc_width - 1, pname); + string.printf ("%s%*.*s* ", PROC_PREFIX, + 1 - proc_width, proc_width - 1, pname); else - sprintf (buf, "%s%*.*s ", PROC_PREFIX, - -proc_width, proc_width, pname); - strcat_to_buf (string, status_size, buf); + string.printf ("%s%*.*s ", PROC_PREFIX, + -proc_width, proc_width, pname); } if (line_width > 0) - { - sprintf (buf, "%s%*.*s ", LINE_PREFIX, - -line_width, line_width, line_buf); - strcat_to_buf (string, status_size, buf); - } + string.printf ("%s%*.*s ", LINE_PREFIX, + -line_width, line_width, line_buf); if (pc_width > 0) { - strcat_to_buf (string, status_size, PC_PREFIX); - strcat_to_buf (string, status_size, pc_buf); + string.puts (PC_PREFIX); + string.puts (pc_buf); } - - - for (i = strlen (string); i < status_size; i++) - string[i] = ' '; - string[status_size] = (char) 0; - return string; + if (string.size () < status_size) + string.puts (n_spaces (status_size - string.size ())); + else if (string.size () > status_size) + string.string ().erase (status_size, string.size ()); + + return std::move (string.string ()); } /* Get a printable name for the function at the address. The symbol @@ -252,7 +234,7 @@ tui_locator_window::rerender () { if (handle != NULL) { - char *string = tui_make_status_line (this); + std::string string = tui_make_status_line (this); wmove (handle, 0, 0); /* We ignore the return value from wstandout and wstandend, casting them to void in order to avoid a compiler warning. The warning @@ -260,12 +242,11 @@ tui_locator_window::rerender () changing these macro to expand to code that causes the compiler to generate an unused-value warning. */ (void) wstandout (handle); - waddstr (handle, string); + waddstr (handle, string.c_str ()); wclrtoeol (handle); (void) wstandend (handle); refresh_window (); wmove (handle, 0, 0); - xfree (string); } }