Fix build breakage on MinGW due to missing setenv
Commit Message
Patch [1] broke a build on MinGW hosts, because MinGW doesn't provide POSIX
functions setenv () and unsetenv (), instead there is a putenv () wrapper
around WinAPI function, although with a different signature.
[1] https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=9a6c7d9c0
gdb/ChangeLog
yyyy-mm-dd Anton Kolesov <Anton.Kolesov@synopsys.com>
* unittests/environ-selftests.c (run_tests): Use putenv on MinGW.
---
gdb/unittests/environ-selftests.c | 10 ++++++++++
1 file changed, 10 insertions(+)
Comments
On Mon, Jul 3, 2017 at 11:02 AM, Anton Kolesov
<Anton.Kolesov@synopsys.com> wrote:
> Patch [1] broke a build on MinGW hosts, because MinGW doesn't provide POSIX
> functions setenv () and unsetenv (), instead there is a putenv () wrapper
> around WinAPI function, although with a different signature.
>
> [1] https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=9a6c7d9c0
The better fix, IMO, is to use setenv and unsetenv
module in gnulib. However, I didn't check gnulib
manual about portability problems not fixed by gnulib.
On Monday, July 03 2017, Yao Qi wrote:
> On Mon, Jul 3, 2017 at 11:02 AM, Anton Kolesov
> <Anton.Kolesov@synopsys.com> wrote:
>> Patch [1] broke a build on MinGW hosts, because MinGW doesn't provide POSIX
>> functions setenv () and unsetenv (), instead there is a putenv () wrapper
>> around WinAPI function, although with a different signature.
>>
>> [1] https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=9a6c7d9c0
>
> The better fix, IMO, is to use setenv and unsetenv
> module in gnulib. However, I didn't check gnulib
> manual about portability problems not fixed by gnulib.
According to:
<https://www.gnu.org/software/gnulib/manual/html_node/setenv.html#setenv>
There is only one portability problem not fixed by gnulib, and I don't
think it affects us:
Older versions of POSIX required that setenv(NULL,"",0) gracefully
fail with EINVAL, but not all implementations guarantee this, and the
requirement was removed.
So it should be possible to import setenv from gnulib without problems,
I think.
Cheers,
@@ -30,7 +30,11 @@ run_tests ()
{
/* Set a test environment variable. This will be unset at the end
of this function. */
+#ifndef USE_WIN32API
if (setenv ("GDB_SELFTEST_ENVIRON", "1", 1) != 0)
+#else
+ if (putenv ("GDB_SELFTEST_ENVIRON=1") != 0)
+#endif
error (_("Could not set environment variable for testing."));
gdb_environ env;
@@ -90,7 +94,13 @@ run_tests ()
SELF_CHECK (num_found == 1);
/* Get rid of our test variable. */
+#ifndef USE_WIN32API
unsetenv ("GDB_SELFTEST_ENVIRON");
+#else
+ /* putenv ("var=") has the same meaning as unsetenv ("var"), unlike the
+ setenv ("var="), which would assign an empty value. */
+ putenv ("GDB_SELFTEST_ENVIRON=");
+#endif
/* Test the case when we set a variable A, then set a variable B,
then unset A, and make sure that we cannot find A in the environ