From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id 775C33870856 for ; Thu, 7 May 2020 19:31:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 775C33870856 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=simark.ca Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=simark@simark.ca Received: from [10.0.0.193] (unknown [192.222.164.54]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id CFBF51E581; Thu, 7 May 2020 15:31:53 -0400 (EDT) Subject: Re: [PATCH 0/4] gdb: Move construct_inferior_arguments to gdbsupport To: Michael Weghorn , gdb-patches@sourceware.org References: <20200429111638.1327262-1-m.weghorn@posteo.de> <20200429111638.1327262-2-m.weghorn@posteo.de> From: Simon Marchi Message-ID: Date: Thu, 7 May 2020 15:31:53 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <20200429111638.1327262-2-m.weghorn@posteo.de> Content-Type: text/plain; charset=utf-8 Content-Language: tl Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-14.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Thu, 07 May 2020 19:31:56 -0000 On 2020-04-29 7:16 a.m., Michael Weghorn via Gdb-patches wrote: > This moves the function construct_inferior_arguments from > gdb/inferior.h and gdb/infcmd.c to gdbsupport/common-inferior.{h,cc}. > > The intention is to use it from gdbserver in a follow-up commit. > > gdb/ChangeLog: > > 2020-04-29 Michael Weghorn > > * infcmd.c, inferior.h: (construct_inferior_arguments): > Moved function from here to gdbsupport/common-inferior.{h,cc} > > gdbsupport/ChangeLog: > > 2020-04-29 Michael Weghorn > > * common-inferior.h, common-inferior.cc: (construct_inferior_arguments): > Move function here from gdb/infcmd.c, gdb/inferior.h > --- > gdb/infcmd.c | 124 ---------------------------------- > gdb/inferior.h | 2 - > gdbsupport/common-inferior.cc | 123 +++++++++++++++++++++++++++++++++ > gdbsupport/common-inferior.h | 2 + > 4 files changed, 125 insertions(+), 126 deletions(-) > > diff --git a/gdb/infcmd.c b/gdb/infcmd.c > index 9bbb413d4e..8f7482347c 100644 > --- a/gdb/infcmd.c > +++ b/gdb/infcmd.c > @@ -259,130 +259,6 @@ server's cwd if remote debugging.\n")); > "when starting the inferior is \"%s\".\n"), cwd); > } > > - > -/* Compute command-line string given argument vector. This does the > - same shell processing as fork_inferior. */ > - > -char * > -construct_inferior_arguments (int argc, char **argv) > -{ > - char *result; > - > - /* ARGC should always be at least 1, but we double check this > - here. This is also needed to silence -Werror-stringop > - warnings. */ > - gdb_assert (argc > 0); > - > - if (startup_with_shell) > - { > -#ifdef __MINGW32__ > - /* This holds all the characters considered special to the > - Windows shells. */ > - static const char special[] = "\"!&*|[]{}<>?`~^=;, \t\n"; > - static const char quote = '"'; > -#else > - /* This holds all the characters considered special to the > - typical Unix shells. We include `^' because the SunOS > - /bin/sh treats it as a synonym for `|'. */ > - static const char special[] = "\"!#$&*()\\|[]{}<>?'`~^; \t\n"; > - static const char quote = '\''; > -#endif > - int i; > - int length = 0; > - char *out, *cp; > - > - /* We over-compute the size. It shouldn't matter. */ > - for (i = 0; i < argc; ++i) > - length += 3 * strlen (argv[i]) + 1 + 2 * (argv[i][0] == '\0'); > - > - result = (char *) xmalloc (length); > - out = result; > - > - for (i = 0; i < argc; ++i) > - { > - if (i > 0) > - *out++ = ' '; > - > - /* Need to handle empty arguments specially. */ > - if (argv[i][0] == '\0') > - { > - *out++ = quote; > - *out++ = quote; > - } > - else > - { > -#ifdef __MINGW32__ > - int quoted = 0; > - > - if (strpbrk (argv[i], special)) > - { > - quoted = 1; > - *out++ = quote; > - } > -#endif > - for (cp = argv[i]; *cp; ++cp) > - { > - if (*cp == '\n') > - { > - /* A newline cannot be quoted with a backslash (it > - just disappears), only by putting it inside > - quotes. */ > - *out++ = quote; > - *out++ = '\n'; > - *out++ = quote; > - } > - else > - { > -#ifdef __MINGW32__ > - if (*cp == quote) > -#else > - if (strchr (special, *cp) != NULL) > -#endif > - *out++ = '\\'; > - *out++ = *cp; > - } > - } > -#ifdef __MINGW32__ > - if (quoted) > - *out++ = quote; > -#endif > - } > - } > - *out = '\0'; > - } > - else > - { > - /* In this case we can't handle arguments that contain spaces, > - tabs, or newlines -- see breakup_args(). */ > - int i; > - int length = 0; > - > - for (i = 0; i < argc; ++i) > - { > - char *cp = strchr (argv[i], ' '); > - if (cp == NULL) > - cp = strchr (argv[i], '\t'); > - if (cp == NULL) > - cp = strchr (argv[i], '\n'); > - if (cp != NULL) > - error (_("can't handle command-line " > - "argument containing whitespace")); > - length += strlen (argv[i]) + 1; > - } > - > - result = (char *) xmalloc (length); > - result[0] = '\0'; > - for (i = 0; i < argc; ++i) > - { > - if (i > 0) > - strcat (result, " "); > - strcat (result, argv[i]); > - } > - } > - > - return result; > -} > - > > /* This function strips the '&' character (indicating background > execution) that is added as *the last* of the arguments ARGS of a > diff --git a/gdb/inferior.h b/gdb/inferior.h > index 1ac51369df..95af474eed 100644 > --- a/gdb/inferior.h > +++ b/gdb/inferior.h > @@ -184,8 +184,6 @@ extern void child_interrupt (struct target_ops *self); > STARTUP_INFERIOR. */ > extern ptid_t gdb_startup_inferior (pid_t pid, int num_traps); > > -extern char *construct_inferior_arguments (int, char **); > - > /* From infcmd.c */ > > /* Initial inferior setup. Determines the exec file is not yet known, > diff --git a/gdbsupport/common-inferior.cc b/gdbsupport/common-inferior.cc > index ed16e89a52..71b9a11e02 100644 > --- a/gdbsupport/common-inferior.cc > +++ b/gdbsupport/common-inferior.cc > @@ -24,3 +24,126 @@ > /* See common-inferior.h. */ > > bool startup_with_shell = true; > + > +/* Compute command-line string given argument vector. This does the > + same shell processing as fork_inferior. */ Let's just do a bit of spring cleaning and align this code with our current standards while moving it. Move the function comment to the .h, and in the.cc file write: /* See common-inferior.h. */ Other than that, this patch LGTM. Simon