From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from barracuda.ebox.ca (barracuda.ebox.ca [96.127.255.19]) by sourceware.org (Postfix) with ESMTPS id 6EF013972027 for ; Wed, 14 Jul 2021 04:57:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6EF013972027 X-ASG-Debug-ID: 1626238641-0c856e6cd51c9e5f0001-fS2M51 Received: from smtp.ebox.ca (smtp.ebox.ca [96.127.255.82]) by barracuda.ebox.ca with ESMTP id LhO5CixhAJHoSsgQ (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 14 Jul 2021 00:57:22 -0400 (EDT) X-Barracuda-Envelope-From: simon.marchi@polymtl.ca X-Barracuda-RBL-Trusted-Forwarder: 96.127.255.82 Received: from simark.localdomain (192-222-157-6.qc.cable.ebox.net [192.222.157.6]) by smtp.ebox.ca (Postfix) with ESMTP id CFE8E441D66; Wed, 14 Jul 2021 00:57:21 -0400 (EDT) From: Simon Marchi X-Barracuda-RBL-IP: 192.222.157.6 X-Barracuda-Effective-Source-IP: 192-222-157-6.qc.cable.ebox.net[192.222.157.6] X-Barracuda-Apparent-Source-IP: 192.222.157.6 To: gdb-patches@sourceware.org Subject: [PATCH 11/16] gdb: make inferior::m_terminal an std::string Date: Wed, 14 Jul 2021 00:55:15 -0400 X-ASG-Orig-Subj: [PATCH 11/16] gdb: make inferior::m_terminal an std::string Message-Id: <20210714045520.1623120-12-simon.marchi@polymtl.ca> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210714045520.1623120-1-simon.marchi@polymtl.ca> References: <20210714045520.1623120-1-simon.marchi@polymtl.ca> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: smtp.ebox.ca[96.127.255.82] X-Barracuda-Start-Time: 1626238642 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://96.127.255.19:443/cgi-mod/mark.cgi X-Barracuda-BRTS-Status: 1 X-Virus-Scanned: by bsmtpd at ebox.ca X-Barracuda-Scan-Msg-Size: 10096 X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using global scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=8.0 tests=BSF_RULE_7582B X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.91193 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE_7582B Custom Rule 7582B X-Spam-Status: No, score=-16.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_QUARANTINE, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_SOFTFAIL, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Jul 2021 04:57:25 -0000 Same idea as the previous patch, but for m_terminal. Change-Id: If9367d5db8c976a4336680adca4ea5bc31ab64d2 --- gdb/infcmd.c | 6 ++---- gdb/inferior.c | 11 ++++------- gdb/inferior.h | 18 ++++++++++-------- gdb/inflow.c | 46 ++++++++++++++++++--------------------------- gdb/mi/mi-cmd-env.c | 9 ++++++--- gdb/terminal.h | 2 +- 6 files changed, 41 insertions(+), 51 deletions(-) diff --git a/gdb/infcmd.c b/gdb/infcmd.c index c02717631643..c183b60e81a8 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -115,13 +115,11 @@ show_inferior_tty_command (struct ui_file *file, int from_tty, { /* Note that we ignore the passed-in value in favor of computing it directly. */ - const char *inferior_tty = current_inferior ()->tty (); + const std::string &inferior_tty = current_inferior ()->tty (); - if (inferior_tty == nullptr) - inferior_tty = ""; fprintf_filtered (gdb_stdout, _("Terminal for future runs of program being debugged " - "is \"%s\".\n"), inferior_tty); + "is \"%s\".\n"), inferior_tty.c_str ()); } void diff --git a/gdb/inferior.c b/gdb/inferior.c index 74b1c65fa3da..40ab3e7e90b9 100644 --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -111,18 +111,15 @@ inferior::unpush_target (struct target_ops *t) } void -inferior::set_tty (const char *terminal_name) +inferior::set_tty (std::string terminal_name) { - if (terminal_name != nullptr && *terminal_name != '\0') - m_terminal = make_unique_xstrdup (terminal_name); - else - m_terminal = NULL; + m_terminal = std::move (terminal_name); } -const char * +const std::string & inferior::tty () { - return m_terminal.get (); + return m_terminal; } void diff --git a/gdb/inferior.h b/gdb/inferior.h index c52c38caa93e..2efe66ac009a 100644 --- a/gdb/inferior.h +++ b/gdb/inferior.h @@ -434,13 +434,15 @@ class inferior : public refcounted_object, void add_continuation (std::function &&cont); void do_all_continuations (); - /* Set/get file name for default use for standard in/out in the - inferior. On Unix systems, we try to make TERMINAL_NAME the - inferior's controlling terminal. If TERMINAL_NAME is nullptr or - the empty string, then the inferior inherits GDB's terminal (or - GDBserver's if spawning a remote process). */ - void set_tty (const char *terminal_name); - const char *tty (); + /* Set/get file name for default use for standard in/out in the inferior. + + On Unix systems, we try to make TERMINAL_NAME the inferior's controlling + terminal. + + If TERMINAL_NAME is the empty string, then the inferior inherits GDB's + terminal (or GDBserver's if spawning a remote process). */ + void set_tty (std::string terminal_name); + const std::string &tty (); /* Set the argument string to use when running this inferior. @@ -587,7 +589,7 @@ class inferior : public refcounted_object, target_stack m_target_stack; /* The name of terminal device to use for I/O. */ - gdb::unique_xmalloc_ptr m_terminal; + std::string m_terminal; /* The list of continuations. */ std::list> m_continuations; diff --git a/gdb/inflow.c b/gdb/inflow.c index 970450632159..74dda702a8a9 100644 --- a/gdb/inflow.c +++ b/gdb/inflow.c @@ -65,7 +65,7 @@ struct terminal_info /* The name of the tty (from the `tty' command) that we gave to the inferior when it was started. */ - char *run_terminal = nullptr; + std::string run_terminal; /* TTY state. We save it whenever the inferior stops, and restore it when it resumes in the foreground. */ @@ -123,7 +123,7 @@ static sighandler_t sigquit_ours; be) used as a transient global by new_tty_prefork, create_tty_session, new_tty and new_tty_postfork, all called from fork_inferior, while forking a new child. */ -static const char *inferior_thisrun_terminal; +static std::string inferior_thisrun_terminal; /* Track who owns GDB's terminal (is it GDB or some inferior?). While target_terminal::is_ours() etc. tracks the core's intention and is @@ -303,8 +303,8 @@ sharing_input_terminal (inferior *inf) output was redirected to our terminal), and with a false positive we just end up trying to save/restore terminal settings when we didn't need to or we actually can't. */ - if (tinfo->run_terminal != NULL) - res = is_gdb_terminal (tinfo->run_terminal); + if (!tinfo->run_terminal.empty ()) + res = is_gdb_terminal (tinfo->run_terminal.c_str ()); /* If we still can't determine, assume yes. */ if (res == TRIBOOL_UNKNOWN) @@ -603,7 +603,6 @@ static const struct inferior_key inflow_inferior_data; terminal_info::~terminal_info () { - xfree (run_terminal); xfree (ttystate); } @@ -643,15 +642,10 @@ copy_terminal_info (struct inferior *to, struct inferior *from) tinfo_to = get_inflow_inferior_data (to); tinfo_from = get_inflow_inferior_data (from); - xfree (tinfo_to->run_terminal); xfree (tinfo_to->ttystate); *tinfo_to = *tinfo_from; - if (tinfo_from->run_terminal) - tinfo_to->run_terminal - = xstrdup (tinfo_from->run_terminal); - if (tinfo_from->ttystate) tinfo_to->ttystate = serial_copy_tty_state (stdin_serial, tinfo_from->ttystate); @@ -765,19 +759,19 @@ child_terminal_info (struct target_ops *self, const char *args, int from_tty) /* NEW_TTY_PREFORK is called before forking a new child process, so we can record the state of ttys in the child to be formed. - TTYNAME is null if we are to share the terminal with gdb; - or points to a string containing the name of the desired tty. + TTYNAME is empty if we are to share the terminal with gdb; + otherwise it contains the name of the desired tty. NEW_TTY is called in new child processes under Unix, which will become debugger target processes. This actually switches to the terminal specified in the NEW_TTY_PREFORK call. */ void -new_tty_prefork (const char *ttyname) +new_tty_prefork (std::string ttyname) { /* Save the name for later, for determining whether we and the child are sharing a tty. */ - inferior_thisrun_terminal = ttyname; + inferior_thisrun_terminal = std::move (ttyname); } #if !defined(__GO32__) && !defined(_WIN32) @@ -798,7 +792,7 @@ check_syscall (const char *msg, int result) void new_tty (void) { - if (inferior_thisrun_terminal == 0) + if (inferior_thisrun_terminal.empty ()) return; #if !defined(__GO32__) && !defined(_WIN32) int tty; @@ -818,8 +812,8 @@ new_tty (void) #endif /* Now open the specified new terminal. */ - tty = open (inferior_thisrun_terminal, O_RDWR | O_NOCTTY); - check_syscall (inferior_thisrun_terminal, tty); + tty = open (inferior_thisrun_terminal.c_str (), O_RDWR | O_NOCTTY); + check_syscall (inferior_thisrun_terminal.c_str (), tty); /* Avoid use of dup2; doesn't exist on all systems. */ if (tty != 0) @@ -854,7 +848,7 @@ new_tty (void) /* NEW_TTY_POSTFORK is called after forking a new child process, and adding it to the inferior table, to store the TTYNAME being used by - the child, or null if it sharing the terminal with gdb. */ + the child, or empty if it sharing the terminal with gdb. */ void new_tty_postfork (void) @@ -862,15 +856,11 @@ new_tty_postfork (void) /* Save the name for later, for determining whether we and the child are sharing a tty. */ - if (inferior_thisrun_terminal) - { - struct inferior *inf = current_inferior (); - struct terminal_info *tinfo = get_inflow_inferior_data (inf); - - tinfo->run_terminal = xstrdup (inferior_thisrun_terminal); - } + struct inferior *inf = current_inferior (); + struct terminal_info *tinfo = get_inflow_inferior_data (inf); - inferior_thisrun_terminal = NULL; + tinfo->run_terminal = std::move (inferior_thisrun_terminal); + inferior_thisrun_terminal.clear (); } @@ -894,7 +884,7 @@ set_sigint_trap (void) struct inferior *inf = current_inferior (); struct terminal_info *tinfo = get_inflow_inferior_data (inf); - if (inf->attach_flag || tinfo->run_terminal) + if (inf->attach_flag || !tinfo->run_terminal.empty ()) { osig = signal (SIGINT, pass_signal); osig_set = 1; @@ -927,7 +917,7 @@ create_tty_session (void) #ifdef HAVE_SETSID pid_t ret; - if (!job_control || inferior_thisrun_terminal == 0) + if (!job_control || inferior_thisrun_terminal.empty ()) return 0; ret = setsid (); diff --git a/gdb/mi/mi-cmd-env.c b/gdb/mi/mi-cmd-env.c index f7ee1e166eba..703c63251fd3 100644 --- a/gdb/mi/mi-cmd-env.c +++ b/gdb/mi/mi-cmd-env.c @@ -244,7 +244,10 @@ mi_cmd_env_dir (const char *command, char **argv, int argc) void mi_cmd_inferior_tty_set (const char *command, char **argv, int argc) { - current_inferior ()->set_tty (argv[0]); + if (argc > 0) + current_inferior ()->set_tty (argv[0]); + else + current_inferior ()->set_tty (""); } /* Print the inferior terminal device name. */ @@ -255,8 +258,8 @@ mi_cmd_inferior_tty_show (const char *command, char **argv, int argc) if ( !mi_valid_noargs ("-inferior-tty-show", argc, argv)) error (_("-inferior-tty-show: Usage: No args")); - const char *inferior_tty = current_inferior ()->tty (); - if (inferior_tty != NULL) + const std::string &inferior_tty = current_inferior ()->tty (); + if (!inferior_tty.empty ()) current_uiout->field_string ("inferior_tty_terminal", inferior_tty); } diff --git a/gdb/terminal.h b/gdb/terminal.h index e1f642b84665..186295e18f78 100644 --- a/gdb/terminal.h +++ b/gdb/terminal.h @@ -21,7 +21,7 @@ struct inferior; -extern void new_tty_prefork (const char *); +extern void new_tty_prefork (std::string ttyname); extern void new_tty (void); -- 2.32.0