From patchwork Mon Oct 26 17:27:59 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 9384 Received: (qmail 63819 invoked by alias); 26 Oct 2015 17:28:33 -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 63806 invoked by uid 89); 26 Oct 2015 17:28:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS, T_FILL_THIS_FORM_SHORT autolearn=ham version=3.3.2 X-HELO: mail-qk0-f177.google.com Received: from mail-qk0-f177.google.com (HELO mail-qk0-f177.google.com) (209.85.220.177) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Mon, 26 Oct 2015 17:28:31 +0000 Received: by qkfq3 with SMTP id q3so16334430qkf.3 for ; Mon, 26 Oct 2015 10:28:29 -0700 (PDT) X-Received: by 10.55.198.29 with SMTP id b29mr43632571qkj.56.1445880508961; Mon, 26 Oct 2015 10:28:28 -0700 (PDT) MIME-Version: 1.0 Received: by 10.55.75.66 with HTTP; Mon, 26 Oct 2015 10:27:59 -0700 (PDT) In-Reply-To: <562E5050.6010909@redhat.com> References: <1445831204-16588-1-git-send-email-simon.marchi@polymtl.ca> <1445831204-16588-6-git-send-email-simon.marchi@polymtl.ca> <562E5050.6010909@redhat.com> From: Simon Marchi Date: Mon, 26 Oct 2015 13:27:59 -0400 Message-ID: Subject: Re: [PATCH c++ 06/12] Fix constness problem in ioscm_make_gdb_stdio_port To: Pedro Alves Cc: gdb-patches@sourceware.org On 26 October 2015 at 12:09, Pedro Alves wrote: > WDYT? Sounds good to me. I wanted to avoid passing a string literal to something that wasn't explicitely const (since if it tries to modify the string, the program just crashes). But if we are sure that scm_mode_bits does not do that, we can keep the simpler code. Here's a ready to push patch (not guaranteed to be well-formatted, because gmail). From ff3fa55ca1cf6bd23de87eb26687ad48fb2b3806 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Mon, 26 Oct 2015 13:26:51 -0400 Subject: [PATCH] guile: Simplify ioscm_make_gdb_stdio_port As pointed out by Pedro, it's clearer to do it this way. We can trust that scm_mode_bits won't try to modify our string, even though it takes a non-const char *. gdb/ChangeLog: * guile/scm-ports.c (ioscm_make_gdb_stdio_port): Do not pass a local char array to scm_mode_bits, use a cast instead. --- gdb/guile/scm-ports.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/gdb/guile/scm-ports.c b/gdb/guile/scm-ports.c index 5d529b3..ffaa3fd 100644 --- a/gdb/guile/scm-ports.c +++ b/gdb/guile/scm-ports.c @@ -357,36 +357,31 @@ ioscm_init_stdio_buffers (SCM port, long mode_bits) static SCM ioscm_make_gdb_stdio_port (int fd) { + int is_a_tty = isatty (fd); const char *name; + const char *mode_str; long mode_bits; SCM port; - char buf[3]; - - memset (buf, 0, sizeof (buf)); switch (fd) { case 0: name = input_port_name; - buf[0] = 'r'; + mode_str = is_a_tty ? "r0" : "r"; break; case 1: name = output_port_name; - buf[0] = 'w'; + mode_str = is_a_tty ? "w0" : "w"; break; case 2: name = error_port_name; - buf[0] = 'w'; + mode_str = is_a_tty ? "w0" : "w"; break; default: gdb_assert_not_reached ("bad stdio file descriptor"); } - if (isatty (fd)) - buf[1] = '0'; - - mode_bits = scm_mode_bits (buf); - + mode_bits = scm_mode_bits ((char *) mode_str); port = ioscm_open_port (stdio_port_desc, mode_bits); scm_set_port_filename_x (port, gdbscm_scm_from_c_string (name));