aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libjava/ChangeLog6
-rw-r--r--libjava/java/net/natInetAddress.cc7
2 files changed, 13 insertions, 0 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 3d5b9ad..beed923 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,9 @@
+1999-04-14 Tom Tromey <tromey@cygnus.com>
+
+ * java/net/natInetAddress.cc (lookup): On glibc2.0 systems, make
+ buffer larger to work around bug.
+ From Bryce McKinlay <bryce@albatross.co.nz>.
+
1999-04-14 Andrew Haley <aph@cygnus.com>
* java/lang/natDouble.java (doubleToLongBits): ensure that all
diff --git a/libjava/java/net/natInetAddress.cc b/libjava/java/net/natInetAddress.cc
index 9d5f93e..c591ea6 100644
--- a/libjava/java/net/natInetAddress.cc
+++ b/libjava/java/net/natInetAddress.cc
@@ -97,7 +97,14 @@ java::net::InetAddress::lookup (jstring host, java::net::InetAddress* iaddr,
struct hostent *hptr = NULL;
#if defined (HAVE_GETHOSTBYNAME_R) || defined (HAVE_GETHOSTBYADDR_R)
struct hostent hent_r;
+#if defined (__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ == 0
+ // glibc 2.0.7 has a bug where gethostbyname_r won't return an error
+ // if the buffer is too small. So in this case we size the buffer
+ // the same way that glibc does. This is fixed in glibc 2.1.
+ char fixed_buffer[1024];
+#else
char fixed_buffer[200];
+#endif
char *buffer_r = fixed_buffer;
int size_r = sizeof (fixed_buffer);
#endif