Hi,
Attached is an alternative and less intrusive patch by Alfred M. Szmidt
<[EMAIL PROTECTED]>. This is its arch archive location:
http://www.update.uu.se/~ams/{archives}/2005-update
[EMAIL PROTECTED]/hackerlab/hackerlab--gnu
Is that reasonable enough to go in? I verified it still builds fine on
GNU/Linux.
cheers,
Michael
--
Michael Banck
Debian Developer
[EMAIL PROTECTED]
http://www.advogato.org/person/mbanck/diary.html
--- tla-1.3.3/src/hackerlab/vu-network/url-socket.c 2005-12-28
02:10:35.000000000 +0100
+++ tla-1.3.3/src/hackerlab/vu-network/url-socket.c 2005-12-28
02:10:37.000000000 +0100
@@ -1403,7 +1403,7 @@
int fd;
struct url_socket_params params;
struct sockaddr_in addr;
- t_uchar myhost[MAXHOSTNAMELEN + 1];
+ t_uchar *myhost;
mem_set0 ((t_uchar *)&addr, sizeof (addr));
@@ -1414,10 +1414,20 @@
{
if (host_id_is)
{
- if (0 > gethostname (myhost, sizeof (myhost)))
+ size_t size = 64;
+ int err;
+ myhost = (t_uchar *) must_malloc (size + 1);
+ while (1)
{
- *errn = errno;
- return -1;
+ int i = size - 1;
+ myhost[i] = '\0';
+ err = gethostname (myhost, size);
+ if (err >= 0 && myhost[i] == '\0')
+ break;
+ else if (err < 0 && errno != ENAMETOOLONG && errno != 0)
+ must_free (myhost);
+ size *= 2;
+ myhost = must_realloc (myhost, size + 1);
}
*host_id_is = str_save (limits, myhost);
}
@@ -1479,17 +1489,25 @@
}
else
{
- char my_name[MAXHOSTNAMELEN + 1];
struct hostent * hostent;
-
- if (0 > gethostname (my_name, sizeof (my_name)))
+ size_t size = 64;
+ int err;
+ t_uchar *my_name;
+
+ my_name = (t_uchar *) must_malloc (size + 1);
+ while (1)
{
- int ign;
- *errn = errno;
- vu_close (&ign, fd);
- return -1;
+ int i = size - 1;
+ my_name[i] = '\0';
+ err = gethostname (my_name, size);
+ if (err >= 0 && my_name[i] == '\0')
+ break;
+ else if (err < 0 && errno != ENAMETOOLONG && errno != 0)
+ must_free (my_name);
+ size *= 2;
+ my_name = must_realloc (my_name, size + 1);
}
-
+
hostent = gethostbyname (my_name);
if (!hostent)
{