From patchwork Wed Aug 2 15:02:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 21860 Received: (qmail 35640 invoked by alias); 2 Aug 2017 15:03:32 -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 35564 invoked by uid 89); 2 Aug 2017 15:03:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy=4116, controlling X-HELO: gproxy5-pub.mail.unifiedlayer.com Received: from gproxy5-pub.mail.unifiedlayer.com (HELO gproxy5-pub.mail.unifiedlayer.com) (67.222.38.55) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 02 Aug 2017 15:03:29 +0000 Received: from CMOut01 (unknown [10.0.90.82]) by gproxy5.mail.unifiedlayer.com (Postfix) with ESMTP id 57A22140D37 for ; Wed, 2 Aug 2017 09:02:36 -0600 (MDT) Received: from box522.bluehost.com ([74.220.219.122]) by CMOut01 with id sF2Z1v00d2f2jeq01F2cfS; Wed, 02 Aug 2017 09:02:36 -0600 X-Authority-Analysis: v=2.2 cv=XMVAcUpE c=1 sm=1 tr=0 a=GsOEXm/OWkKvwdLVJsfwcA==:117 a=GsOEXm/OWkKvwdLVJsfwcA==:17 a=KeKAF7QvOSUA:10 a=zstS-IiYAAAA:8 a=fPeJJukvARRG469c_4IA:9 a=4G6NA9xxw8l3yy4pmD5M:22 Received: from 174-29-39-24.hlrn.qwest.net ([174.29.39.24]:54692 helo=bapiya.Home) by box522.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.87) (envelope-from ) id 1dcvAO-002dpC-Uk; Wed, 02 Aug 2017 09:02:33 -0600 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [RFA v3 06/23] Change open_terminal_stream to return a gdb_file_up Date: Wed, 2 Aug 2017 09:02:10 -0600 Message-Id: <20170802150227.24460-7-tom@tromey.com> In-Reply-To: <20170802150227.24460-1-tom@tromey.com> References: <20170802150227.24460-1-tom@tromey.com> X-BWhitelist: no X-Exim-ID: 1dcvAO-002dpC-Uk X-Source-Sender: 174-29-39-24.hlrn.qwest.net (bapiya.Home) [174.29.39.24]:54692 X-Source-Auth: tom+tromey.com X-Email-Count: 7 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTIyLmJsdWVob3N0LmNvbQ== X-Local-Domain: yes This changes open_terminal_stream to return a gdb_file_up, eliminating another use of make_cleanup_fclose. Arguably perhaps new_ui should take ownership of the files using a move, but there is at least one spot where this isn't appropriate (or at least not currently done), so I elected to use a more minimal approach. ChangeLog 2017-08-02 Tom Tromey * top.c (open_terminal_stream): Return gdb_file_up. (new_ui_command): Update. --- gdb/ChangeLog | 5 +++++ gdb/top.c | 24 ++++++++++++------------ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index dabb177..c1a4e7b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2017-08-02 Tom Tromey + * top.c (open_terminal_stream): Return gdb_file_up. + (new_ui_command): Update. + +2017-08-02 Tom Tromey + * source.c (print_source_lines_base, forward_search_command) (reverse_search_command): Use gdb_file_up. diff --git a/gdb/top.c b/gdb/top.c index 4c53efd..2504eb6 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -346,16 +346,16 @@ make_delete_ui_cleanup (struct ui *ui) /* Open file named NAME for read/write, making sure not to make it the controlling terminal. */ -static FILE * +static gdb_file_up open_terminal_stream (const char *name) { int fd; - fd = open (name, O_RDWR | O_NOCTTY); + fd = gdb_open_cloexec (name, O_RDWR | O_NOCTTY, 0); if (fd < 0) perror_with_name (_("opening terminal failed")); - return fdopen (fd, "w+"); + return gdb_file_up (fdopen (fd, "w+")); } /* Implementation of the "new-ui" command. */ @@ -365,7 +365,7 @@ new_ui_command (char *args, int from_tty) { struct ui *ui; struct interp *interp; - FILE *stream[3] = { NULL, NULL, NULL }; + gdb_file_up stream[3]; int i; int res; int argc; @@ -390,18 +390,13 @@ new_ui_command (char *args, int from_tty) { scoped_restore save_ui = make_scoped_restore (¤t_ui); - failure_chain = make_cleanup (null_cleanup, NULL); - /* Open specified terminal, once for each of stdin/stdout/stderr. */ for (i = 0; i < 3; i++) - { - stream[i] = open_terminal_stream (tty_name); - make_cleanup_fclose (stream[i]); - } + stream[i] = open_terminal_stream (tty_name); - ui = new_ui (stream[0], stream[1], stream[2]); - make_cleanup (delete_ui_cleanup, ui); + ui = new_ui (stream[0].get (), stream[1].get (), stream[2].get ()); + failure_chain = make_cleanup (delete_ui_cleanup, ui); ui->async = 1; @@ -411,6 +406,11 @@ new_ui_command (char *args, int from_tty) interp_pre_command_loop (top_level_interpreter ()); + /* Make sure the files are not closed. */ + stream[0].release (); + stream[1].release (); + stream[2].release (); + discard_cleanups (failure_chain); /* This restores the previous UI and frees argv. */