From patchwork Sun Aug 18 17:27:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 34167 Received: (qmail 77798 invoked by alias); 18 Aug 2019 17:27:50 -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 77391 invoked by uid 89); 18 Aug 2019 17:27:44 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-19.6 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=video, ncurses, col, printable X-HELO: gateway23.websitewelcome.com Received: from gateway23.websitewelcome.com (HELO gateway23.websitewelcome.com) (192.185.47.80) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 18 Aug 2019 17:27:40 +0000 Received: from cm12.websitewelcome.com (cm12.websitewelcome.com [100.42.49.8]) by gateway23.websitewelcome.com (Postfix) with ESMTP id 42C5A81FA for ; Sun, 18 Aug 2019 12:27:39 -0500 (CDT) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id zOxvhly7ZiQerzOxvh7JEm; Sun, 18 Aug 2019 12:27:39 -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=3WFumnzcbffUPSVRjummXCYqK0x6Bu2wM+dcWZAH0JM=; b=ByQGRhrVM4SsgzRyBYoaUmcmSg hiwMAo76b6HbGWuFiPmsINjobDDnyOqAahmNPAWxmfJPdQAqQVKa63nx5sKkIAeXkOdkvDS0OnqRD x0pIvBq/cxWtFt/oDSpgfV75y; Received: from 97-122-178-82.hlrn.qwest.net ([97.122.178.82]:44512 helo=bapiya.Home) by box5379.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1hzOxv-002aYY-1R; Sun, 18 Aug 2019 12:27:39 -0500 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 05/14] Change tui_data_item_window::content to be a unique_xmalloc_ptr Date: Sun, 18 Aug 2019 11:27:26 -0600 Message-Id: <20190818172735.17477-6-tom@tromey.com> In-Reply-To: <20190818172735.17477-1-tom@tromey.com> References: <20190818172735.17477-1-tom@tromey.com> This changes tui_data_item_window::content to be a unique_xmalloc_ptr and fixes up the fallout. It also removes a parameter from tui_expand_tabs, as it was only ever given one value. gdb/ChangeLog 2019-08-18 Tom Tromey * tui/tui-regs.h (struct tui_data_item_window) <~tui_data_item_window>: Remove. : Now a unique_xmalloc_ptr. * tui/tui-regs.c (tui_register_format): Return a unique_xmalloc_ptr. (tui_get_register): Update. (~tui_data_item_window): Remove. (tui_data_window::display_registers_from, tui_display_register): Update. * tui/tui-io.h (tui_expand_tabs): Update. * tui/tui-io.c (tui_expand_tabs): Return a unique_xmalloc_ptr. Remove "col" parameter. --- gdb/ChangeLog | 15 +++++++++++++++ gdb/tui/tui-io.c | 14 ++++++-------- gdb/tui/tui-io.h | 2 +- gdb/tui/tui-regs.c | 34 ++++++++++------------------------ gdb/tui/tui-regs.h | 4 +--- 5 files changed, 33 insertions(+), 36 deletions(-) diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c index 7bdba3f64ff..ac7f0982755 100644 --- a/gdb/tui/tui-io.c +++ b/gdb/tui/tui-io.c @@ -1050,19 +1050,17 @@ tui_getc (FILE *fp) return ch; } -/* Utility function to expand TABs in a STRING into spaces. STRING - will be displayed starting at column COL, and is assumed to include - no newlines. The returned expanded string is malloc'ed. */ +/* See tui-io.h. */ -char * -tui_expand_tabs (const char *string, int col) +gdb::unique_xmalloc_ptr +tui_expand_tabs (const char *string) { int n_adjust, ncol; const char *s; char *ret, *q; /* 1. How many additional characters do we need? */ - for (ncol = col, n_adjust = 0, s = string; s; ) + for (ncol = 0, n_adjust = 0, s = string; s; ) { s = strpbrk (s, "\t"); if (s) @@ -1079,7 +1077,7 @@ tui_expand_tabs (const char *string, int col) ret = q = (char *) xmalloc (strlen (string) + n_adjust + 1); /* 2. Copy the original string while replacing TABs with spaces. */ - for (ncol = col, s = string; s; ) + for (ncol = 0, s = string; s; ) { const char *s1 = strpbrk (s, "\t"); if (s1) @@ -1101,5 +1099,5 @@ tui_expand_tabs (const char *string, int col) s = s1; } - return ret; + return gdb::unique_xmalloc_ptr (ret); } diff --git a/gdb/tui/tui-io.h b/gdb/tui/tui-io.h index 34a24da2923..ec2378759a2 100644 --- a/gdb/tui/tui-io.h +++ b/gdb/tui/tui-io.h @@ -46,7 +46,7 @@ extern void tui_initialize_io (void); extern void tui_redisplay_readline (void); /* Expand TABs into spaces. */ -extern char *tui_expand_tabs (const char *, int); +extern gdb::unique_xmalloc_ptr tui_expand_tabs (const char *); /* Enter/leave reverse video mode. */ extern void tui_set_reverse_mode (WINDOW *w, bool reverse); diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c index aebea49effa..a899b1df694 100644 --- a/gdb/tui/tui-regs.c +++ b/gdb/tui/tui-regs.c @@ -52,7 +52,7 @@ static void tui_show_register_group (tui_data_window *win_info, /* Get the register from the frame and return a printable representation of it. */ -static char * +static gdb::unique_xmalloc_ptr tui_register_format (struct frame_info *frame, int regnum) { struct gdbarch *gdbarch = get_frame_arch (frame); @@ -72,7 +72,7 @@ tui_register_format (struct frame_info *frame, int regnum) str.resize (str.size () - 1); /* Expand tabs into spaces, since ncurses on MS-Windows doesn't. */ - return tui_expand_tabs (str.c_str (), 0); + return tui_expand_tabs (str.c_str ()); } /* Get the register value from the given frame and format it for the @@ -87,27 +87,19 @@ tui_get_register (struct frame_info *frame, *changedp = false; if (target_has_registers) { - char *prev_content = data->content; - - data->content = tui_register_format (frame, regnum); + gdb::unique_xmalloc_ptr new_content + = tui_register_format (frame, regnum); if (changedp != NULL - && strcmp (prev_content, data->content) != 0) + && strcmp (data->content.get (), new_content.get ()) != 0) *changedp = true; - xfree (prev_content); + data->content = std::move (new_content); } } /* See tui-regs.h. */ -tui_data_item_window::~tui_data_item_window () -{ - xfree (content); -} - -/* See tui-regs.h. */ - int tui_data_window::last_regs_line_no () const { @@ -309,19 +301,13 @@ tui_data_window::display_registers_from (int start_element_no) int max_len = 0; for (auto &&data_item_win : regs_content) { - char *p; + const char *p; int len; len = 0; - p = data_item_win->content; + p = data_item_win->content.get (); if (p != 0) - while (*p) - { - if (*p++ == '\t') - len = 8 * ((len / 8) + 1); - else - len++; - } + len = strlen (p); if (len > max_len) max_len = len; @@ -641,7 +627,7 @@ tui_display_register (struct tui_data_item_window *data) waddch (data->handle, ' '); wmove (data->handle, 0, 0); if (data->content) - waddstr (data->handle, data->content); + waddstr (data->handle, data->content.get ()); if (data->highlight) /* We ignore the return value, casting it to void in order to avoid diff --git a/gdb/tui/tui-regs.h b/gdb/tui/tui-regs.h index d54b556148e..b70d8df3620 100644 --- a/gdb/tui/tui-regs.h +++ b/gdb/tui/tui-regs.h @@ -33,13 +33,11 @@ struct tui_data_item_window : public tui_gen_win_info { } - ~tui_data_item_window () override; - const char *name = nullptr; /* The register number, or data display number. */ int item_no = -1; bool highlight = false; - char *content = nullptr; + gdb::unique_xmalloc_ptr content; }; /* The TUI registers window. */