From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18844 invoked by alias); 4 Oct 2011 14:50:16 -0000 Received: (qmail 18822 invoked by uid 22791); 4 Oct 2011 14:50:14 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,MSGID_MULTIPLE_AT X-Spam-Check-By: sourceware.org Received: from mailhost.u-strasbg.fr (HELO mailhost.u-strasbg.fr) (130.79.200.151) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 04 Oct 2011 14:49:56 +0000 Received: from md1.u-strasbg.fr (md1.u-strasbg.fr [IPv6:2001:660:2402::186]) by mailhost.u-strasbg.fr (8.14.3/jtpda-5.5pre1) with ESMTP id p94EnrNY096873 for ; Tue, 4 Oct 2011 16:49:54 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from mailserver.u-strasbg.fr (ms6.u-strasbg.fr [130.79.204.15]) by md1.u-strasbg.fr (8.14.4/jtpda-5.5pre1) with ESMTP id p94EnrmZ014716 for ; Tue, 4 Oct 2011 16:49:53 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from E6510Muller (gw-ics.u-strasbg.fr [130.79.210.225]) (user=mullerp mech=LOGIN) by mailserver.u-strasbg.fr (8.14.4/jtpda-5.5pre1) with ESMTP id p94Enqr2064398 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NO) for ; Tue, 4 Oct 2011 16:49:53 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) From: "Pierre Muller" To: References: <006301cc8292$367539b0$a35fad10$@muller@ics-cnrs.unistra.fr> <20111004134506.GB24369@calimero.vinschen.de> In-Reply-To: <20111004134506.GB24369@calimero.vinschen.de> Subject: RE: [RFA] testsuite: Add a test for passing of environment variables to inferior Date: Tue, 04 Oct 2011 14:50:00 -0000 Message-ID: <000901cc82a4$dfba7cd0$9f2f7670$@muller@ics-cnrs.unistra.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-10/txt/msg00078.txt.bz2 > -----Message d'origine----- > De : gdb-patches-owner@sourceware.org [mailto:gdb-patches- > owner@sourceware.org] De la part de Corinna Vinschen > Envoy=C3=A9 : mardi 4 octobre 2011 15:45 > =C3=80 : gdb-patches@sourceware.org > Objet : Re: [RFA] testsuite: Add a test for passing of environment variab= les > to inferior >=20 > On Oct 4 14:36, Pierre Muller wrote: > > Following Eli's comment that it was not clear > > what I wanted to achieve, I wrote a new test. > > > > Manually checking CVS GDB for mingw, Eli's patch > > gives the correct output. > > But Stock Cygwin GDB currently passes none of these > > TEST_GDB_XXX variables to inferior. > > Even the patch that I sent earlier is not correct: > > it still fails for the last test, > > once TEST_GDB_VAR1 has been set into GDB environment list, > > it doesn't get removed on the last start of the inferior... > > > > Corinna, I think this is the reason why I wanted to restore > > the original environment layout (to avoid leaving unset > > variables around.) >=20 > Yes, that would be necessary. I'm wondering if we can't just utilze the > global environ variable for this and spare us all the hassle. Something > along these lines: >=20 > char **old_env =3D environ; > environ =3D in_env; > cygwin_internal (CW_SYNC_WINENV); > CreateProcessW (NULL environment pointer); > environ =3D old_env; I checked it out, but it still fails for the last test, the missing TEST_GDB_VAR1 variable doesn't get removed from GDB environment list apparently (This is probably related to the internals of cygwin_internal (CW_SYNC_WINENV), no? Manually resetting all variables should help... The patch below does not generate any failure on my test, but I am still not sure what happens if you try to remove an environment variable that was set when GDB started... Following Elis's comment, I also checked what happens if I only call cygwin_internal (CW_SYNC_WINENV) after resetting environ to the GDB value, but the TEST_GDB_VAR1 doesn't get removed and the last test fails. Pierre ChangeLog entry: 2011-10-04 Pierre Muller * windows-nat.c (windows_create_inferior): Handle in_env array for Cygwin GDB. Index: windows-nat.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/windows-nat.c,v retrieving revision 1.219 diff -u -p -r1.219 windows-nat.c --- windows-nat.c 28 Sep 2011 09:07:54 -0000 1.219 +++ windows-nat.c 4 Oct 2011 14:40:59 -0000 @@ -1980,8 +1980,9 @@ windows_create_inferior (struct target_o cygwin_buf_t *toexec; cygwin_buf_t *cygallargs; cygwin_buf_t *args; + char **old_env; size_t len; - int tty; + int tty, i; int ostdin, ostdout, ostderr; #else char real_path[__PMAX]; @@ -2066,6 +2067,8 @@ windows_create_inferior (struct target_o strcat (args, cygallargs); #endif + old_env =3D environ; + environ =3D in_env; /* Prepare the environment vars for CreateProcess. */ cygwin_internal (CW_SYNC_WINENV); @@ -2101,6 +2104,21 @@ windows_create_inferior (struct target_o NULL, /* current directory */ &si, &pi); + + /* Reset all environment variables to avoid leftover on next run. */ + for (i =3D 0; in_env[i] && *in_env[i]; i++) + { + char *equalpos =3D strchr (in_env[i], '=3D'); + if (equalpos) + *equalpos =3D '\0'; + SetEnvironmentVariableA (in_env[i], NULL); + if (equalpos) + *equalpos =3D '=3D'; + } + /* Restore normal GDB environment variables. */ + environ =3D old_env; + cygwin_internal (CW_SYNC_WINENV); + if (tty >=3D 0) { close (tty);