diff options
author | Christian Thalinger <twisti@complang.tuwien.ac.at> | 2007-04-12 14:58:37 +0000 |
---|---|---|
committer | Christian Thalinger <twisti@complang.tuwien.ac.at> | 2007-04-12 14:58:37 +0000 |
commit | 221dec5a0e640709a1099ea9a615a4a70f7c90b0 (patch) | |
tree | c41073abdcb8bf0d78aabb6b498f7b89b1053bab | |
parent | 9905dbe1dcf61b7356b4384d806c5bfb9bacc0d6 (diff) | |
download | classpath-221dec5a0e640709a1099ea9a615a4a70f7c90b0.tar.gz |
2007-04-12 Christian Thalinger <twisti@complang.tuwien.ac.at>
* LICENSE: Added m4/ax_func_which_gethostbyname_r.m4 license.
* configure.ac: Added AX_FUNC_WHICH_GETHOSTBYNAME_R check.
* m4/ax_func_which_gethostbyname_r.m4: New file.
* native/jni/native-lib/cpnet.c (cpnet_getHostByName): Check for
different number of arguments of gethostbyname_r.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | LICENSE | 36 | ||||
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | m4/ax_func_which_gethostbyname_r.m4 | 165 | ||||
-rw-r--r-- | native/jni/native-lib/cpnet.c | 9 |
5 files changed, 219 insertions, 0 deletions
@@ -1,3 +1,11 @@ +2007-04-12 Christian Thalinger <twisti@complang.tuwien.ac.at> + + * LICENSE: Added m4/ax_func_which_gethostbyname_r.m4 license. + * configure.ac: Added AX_FUNC_WHICH_GETHOSTBYNAME_R check. + * m4/ax_func_which_gethostbyname_r.m4: New file. + * native/jni/native-lib/cpnet.c (cpnet_getHostByName): Check for + different number of arguments of gethostbyname_r. + 2007-04-12 Mark Wielaard <mark@klomp.org> * gnu/java/awt/peer/ClasspathFontPeer.java (LRUCache): New static @@ -358,3 +358,39 @@ the following notice: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +* m4/ax_func_which_gethostbyname_r.m4 + + Copyright © 2005 Caolan McNamara <caolan@skynet.ie> + Copyright © 2005 Daniel Richard G. <skunk@iskunk.org> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. + + As a special exception, the respective Autoconf Macro's copyright + owner gives unlimited permission to copy, distribute and modify the + configure scripts that are the output of Autoconf when processing the + Macro. You need not follow the terms of the GNU General Public License + when using or distributing such scripts, even though portions of the + text of the Macro appear in them. The GNU General Public License + (GPL) does govern all other use of the material that constitutes the + Autoconf Macro. + + This special exception to the GPL applies to versions of the + Autoconf Macro released by the Autoconf Macro Archive. When you make + and distribute a modified version of the Autoconf Macro, you may + extend this special exception to the GPL to apply to your modified + version as well. diff --git a/configure.ac b/configure.ac index 80c3415d4..3ba0bde81 100644 --- a/configure.ac +++ b/configure.ac @@ -421,6 +421,7 @@ if test "x${COMPILE_JNI}" = xyes; then AC_C_CONST AC_C_INLINE AC_C_ATTRIBUTE + AX_FUNC_WHICH_GETHOSTBYNAME_R dnl See if we HAVE_ICONV, how ICONV_CONST is set and LTLIBICONV AM_ICONV diff --git a/m4/ax_func_which_gethostbyname_r.m4 b/m4/ax_func_which_gethostbyname_r.m4 new file mode 100644 index 000000000..d1811efe3 --- /dev/null +++ b/m4/ax_func_which_gethostbyname_r.m4 @@ -0,0 +1,165 @@ +# m4/ax_func_which_gethostbyname_r.m4 + +# Copyright © 2005 Caolan McNamara <caolan@skynet.ie> +# Copyright © 2005 Daniel Richard G. <skunk@iskunk.org> + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception, the respective Autoconf Macro's copyright +# owner gives unlimited permission to copy, distribute and modify the +# configure scripts that are the output of Autoconf when processing +# the Macro. You need not follow the terms of the GNU General Public +# License when using or distributing such scripts, even though +# portions of the text of the Macro appear in them. The GNU General +# Public License (GPL) does govern all other use of the material that +# constitutes the Autoconf Macro. + +# This special exception to the GPL applies to versions of the +# Autoconf Macro released by the Autoconf Macro Archive. When you make +# and distribute a modified version of the Autoconf Macro, you may +# extend this special exception to the GPL to apply to your modified +# version as well. + + +AC_DEFUN([AX_FUNC_WHICH_GETHOSTBYNAME_R], [ + + AC_LANG_PUSH(C) + AC_MSG_CHECKING([how many arguments gethostbyname_r() takes]) + + AC_CACHE_VAL(ac_cv_func_which_gethostbyname_r, [ + +################################################################ + +ac_cv_func_which_gethostbyname_r=unknown + +# +# ONE ARGUMENT (sanity check) +# + +# This should fail, as there is no variant of gethostbyname_r() that takes +# a single argument. If it actually compiles, then we can assume that +# netdb.h is not declaring the function, and the compiler is thereby +# assuming an implicit prototype. In which case, we're out of luck. +# +AC_COMPILE_IFELSE( + AC_LANG_PROGRAM( + [[#include <netdb.h>]], + [[ + char *name = "www.gnu.org"; + (void)gethostbyname_r(name) /* ; */ + ]]), + ac_cv_func_which_gethostbyname_r=no) + +# +# SIX ARGUMENTS +# (e.g. Linux) +# + +if test "$ac_cv_func_which_gethostbyname_r" = "unknown"; then + +AC_COMPILE_IFELSE( + AC_LANG_PROGRAM( + [[#include <netdb.h>]], + [[ + char *name = "www.gnu.org"; + struct hostent ret, *retp; + char buf@<:@1024@:>@; + int buflen = 1024; + int my_h_errno; + (void)gethostbyname_r(name, &ret, buf, buflen, &retp, &my_h_errno) /* ; */ + ]]), + ac_cv_func_which_gethostbyname_r=six) + +fi + +# +# FIVE ARGUMENTS +# (e.g. Solaris) +# + +if test "$ac_cv_func_which_gethostbyname_r" = "unknown"; then + +AC_COMPILE_IFELSE( + AC_LANG_PROGRAM( + [[#include <netdb.h>]], + [[ + char *name = "www.gnu.org"; + struct hostent ret; + char buf@<:@1024@:>@; + int buflen = 1024; + int my_h_errno; + (void)gethostbyname_r(name, &ret, buf, buflen, &my_h_errno) /* ; */ + ]]), + ac_cv_func_which_gethostbyname_r=five) + +fi + +# +# THREE ARGUMENTS +# (e.g. AIX, HP-UX, Tru64) +# + +if test "$ac_cv_func_which_gethostbyname_r" = "unknown"; then + +AC_COMPILE_IFELSE( + AC_LANG_PROGRAM( + [[#include <netdb.h>]], + [[ + char *name = "www.gnu.org"; + struct hostent ret; + struct hostent_data data; + (void)gethostbyname_r(name, &ret, &data) /* ; */ + ]]), + ac_cv_func_which_gethostbyname_r=three) + +fi + +################################################################ + +]) dnl end AC_CACHE_VAL + +case "$ac_cv_func_which_gethostbyname_r" in + three) + AC_MSG_RESULT([three]) + AC_DEFINE([HAVE_FUNC_GETHOSTBYNAME_R_3], 1, [three-argument gethostbyname_r]) + ;; + + five) + AC_MSG_RESULT([five]) + AC_DEFINE([HAVE_FUNC_GETHOSTBYNAME_R_5], 1, [five-argument gethostbyname_r]) + ;; + + six) + AC_MSG_RESULT([six]) + AC_DEFINE([HAVE_FUNC_GETHOSTBYNAME_R_6], 1, [six-argument gethostbyname_r]) + ;; + + no) + AC_MSG_RESULT([cannot find function declaration in netdb.h]) + ;; + + unknown) + AC_MSG_RESULT([can't tell]) + ;; + + *) + AC_MSG_ERROR([internal error]) + ;; +esac + +AC_LANG_POP(C) + +]) dnl end AC_DEFUN diff --git a/native/jni/native-lib/cpnet.c b/native/jni/native-lib/cpnet.c index 1dddc0adf..f4ff0f15a 100644 --- a/native/jni/native-lib/cpnet.c +++ b/native/jni/native-lib/cpnet.c @@ -635,8 +635,17 @@ jint cpnet_getHostByName (JNIEnv *env, const char *hostname, cpnet_address ***ad do { buf = (char *)JCL_malloc(env, buflen); + #ifdef HAVE_GETHOSTBYNAME_R +# if defined(HAVE_FUNC_GETHOSTBYNAME_R_6) ret = gethostbyname_r (hostname, &hret, buf, buflen, &result, &herr); +# elif defined(HAVE_FUNC_GETHOSTBYNAME_R_5) + result = gethostbyname_r(hostname, &hret, buf, buflen, &herr); +# elif defined(HAVE_FUNC_GETHOSTBYNAME_R_3) +# error IMPLEMENT ME! +# else +# error unknown number of arguments for gethostbyname_r +# endif #else hret.h_addr_list = NULL; hret.h_addrtype = 0; |