--- configure.in.DIST	2006-10-31 21:39:07.010473000 -0800
+++ configure.in	2006-10-31 21:43:05.630162000 -0800
@@ -1211,15 +1211,32 @@
 AC_HEADER_DIRENT
 
 AC_MSG_CHECKING(for setenv)
-AH_TEMPLATE([USESETENV], [If your system has setenv() and unsetenv() define USESETENV])
-AC_TRY_LINK(,[setenv((char *)0,(char *)0);unsetenv((char *)0);], AC_MSG_RESULT(yes);AC_DEFINE(USESETENV),
-AC_MSG_RESULT(no)
-AC_MSG_CHECKING(for putenv)
-AH_TEMPLATE([NEEDPUTENV],
-[If your system does not come with a setenv()/putenv()/getenv()
- functions, you may bring in our own code by defining NEEDPUTENV.])
-AC_TRY_LINK(,[putenv((char *)0);unsetenv((char *)0);], AC_MSG_RESULT(yes) ,  AC_MSG_RESULT(no);AC_DEFINE(NEEDPUTENV)
-))
+if test -z "$ac_setenv_args"; then
+    AC_TRY_LINK(
+    [#include <stdlib.h>],
+    [
+        setenv((char *) 0, (char *) 0, 0);
+    ], ac_setenv_args=3)
+fi
+if test -z "$ac_setenv_args"; then
+    AC_TRY_LINK(
+    [#include <stdlib.h>],
+    [
+        setenv((char *) 0, (char *) 0);
+    ], ac_setenv_args=2)
+fi
+if test -n "$ac_setenv_args"; then
+    AC_DEFINE(USESETENV)
+    if test "$ac_setenv_args" = 3; then
+        AC_DEFINE(HAVE_SETENV_3)
+    elif test "$ac_setenv_args" = 2; then
+        AC_DEFINE(HAVE_SETENV_2)
+    fi
+else
+    AC_MSG_RESULT(no)
+    AC_MSG_CHECKING(for putenv)
+    AC_TRY_LINK(,[putenv((char *)0);unsetenv((char *)0);], AC_MSG_RESULT(yes) ,  AC_MSG_RESULT(no);AC_DEFINE(NEEDPUTENV))
+fi
 AC_MSG_CHECKING([for nl_langinfo(CODESET)])
 AH_TEMPLATE([HAVE_NL_LANGINFO],
 [define HAVE_NL_LANGINFO if your system has the nl_langinfo() call
--- config.h.in.DIST	2006-10-31 21:43:23.233714000 -0800
+++ config.h.in	2006-10-31 21:44:27.346275000 -0800
@@ -548,6 +548,16 @@
 #undef USESETENV
 
 /*
+ * If setenv() takes 3 arguments define HAVE_SETENV_3
+ */
+#undef HAVE_SETENV_3
+
+/*
+ * If setenv() takes 2 arguments define HAVE_SETENV_2
+ */
+#undef HAVE_SETENV_2
+
+/*
  * If your system does not come with a setenv()/putenv()/getenv()
  * functions, you may bring in our own code by defining NEEDPUTENV.
  */
--- misc.c.DIST	2006-10-31 20:55:42.481760000 -0800
+++ misc.c	2006-10-31 21:53:24.143551000 -0800
@@ -613,11 +613,11 @@
    */
 # endif /* NEEDSETENV */
 #else /* USESETENV */
-# if defined(linux) || defined(__convex__) || (BSD >= 199103)
+# if HAVE_SETENV_3
   setenv(var, value, 1);
 # else
   setenv(var, value);
-# endif /* linux || convex || BSD >= 199103 */
+# endif /* HAVE_SETENV_3 */
 #endif /* USESETENV */
 }
 
