diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2011-11-24 12:53:38 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2011-11-24 12:53:38 (GMT) |
commit | 984890fcbbb2bb9d7168fd78a1383804593c3fd3 (patch) | |
tree | 6bfdaf51f6d170bca2fad95b42b2d1aabb0dfe25 | |
parent | 1518e8713d1e372284c653f254fb29cecc66d764 (diff) | |
download | cpython-984890fcbbb2bb9d7168fd78a1383804593c3fd3.zip cpython-984890fcbbb2bb9d7168fd78a1383804593c3fd3.tar.gz cpython-984890fcbbb2bb9d7168fd78a1383804593c3fd3.tar.bz2 |
Close #13415: Test in configure if unsetenv() has a return value or not.
Patch written by Charles-François Natali.
-rw-r--r-- | Modules/posixmodule.c | 7 | ||||
-rwxr-xr-x | configure | 28 | ||||
-rw-r--r-- | configure.in | 9 | ||||
-rw-r--r-- | pyconfig.h.in | 3 |
4 files changed, 46 insertions, 1 deletions
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e42db5b..8ba2975 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 @@ -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 <stdlib.h> + +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 532ec92..b41e750 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 <stdlib.h> +]], [[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 2d1fd48..efe732f 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 |