From 984890fcbbb2bb9d7168fd78a1383804593c3fd3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 24 Nov 2011 13:53:38 +0100 Subject: [PATCH] Close #13415: Test in configure if unsetenv() has a return value or not. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Patch written by Charles-François Natali. --- Modules/posixmodule.c | 7 ++++++- configure | 28 ++++++++++++++++++++++++++++ configure.in | 9 +++++++++ pyconfig.h.in | 3 +++ 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e42db5ba8d5..8ba2975a9da 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -7841,19 +7841,24 @@ static PyObject * posix_unsetenv(PyObject *self, PyObject *args) { PyObject *name; +#ifndef HAVE_BROKEN_UNSETENV int err; +#endif if (!PyArg_ParseTuple(args, "O&:unsetenv", PyUnicode_FSConverter, &name)) return NULL; - +#ifdef HAVE_BROKEN_UNSETENV + unsetenv(PyBytes_AS_STRING(name)); +#else err = unsetenv(PyBytes_AS_STRING(name)); if (err) { Py_DECREF(name); return posix_error(); } +#endif /* Remove the key from posix_putenv_garbage; * this will cause it to be collected. This has to diff --git a/configure b/configure index 596336ee96c..112c20aa6f2 100755 --- a/configure +++ b/configure @@ -9812,6 +9812,34 @@ $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken unsetenv" >&5 +$as_echo_n "checking for broken unsetenv... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include + +int +main () +{ +int res = unsetenv("DUMMY") + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +else + +$as_echo "#define HAVE_BROKEN_UNSETENV 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + for ac_prog in true do # Extract the first word of "$ac_prog", so it can be a program name with args. diff --git a/configure.in b/configure.in index 532ec921842..b41e7508350 100644 --- a/configure.in +++ b/configure.in @@ -2688,6 +2688,15 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ [AC_MSG_RESULT(no) ]) +AC_MSG_CHECKING(for broken unsetenv) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include +]], [[int res = unsetenv("DUMMY")]])], + [AC_MSG_RESULT(no)], + [AC_DEFINE(HAVE_BROKEN_UNSETENV, 1, Define if `unsetenv` does not return an int.) + AC_MSG_RESULT(yes) +]) + dnl check for true AC_CHECK_PROGS(TRUE, true, /bin/true) diff --git a/pyconfig.h.in b/pyconfig.h.in index 2d1fd48fe3c..efe732f1381 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -95,6 +95,9 @@ /* define to 1 if your sem_getvalue is broken. */ #undef HAVE_BROKEN_SEM_GETVALUE +/* Define if `unsetenv` does not return an int. */ +#undef HAVE_BROKEN_UNSETENV + /* Define this if you have the type _Bool. */ #undef HAVE_C99_BOOL