diff options
Diffstat (limited to 'chat/irssi/patches/patch-ad')
-rw-r--r-- | chat/irssi/patches/patch-ad | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/chat/irssi/patches/patch-ad b/chat/irssi/patches/patch-ad new file mode 100644 index 00000000000..c09d84f4431 --- /dev/null +++ b/chat/irssi/patches/patch-ad @@ -0,0 +1,103 @@ +$NetBSD: patch-ad,v 1.3 2003/01/12 17:53:19 veego Exp $ + +Index: src/core/network.c +=================================================================== +RCS file: /home/cvs/irssi/src/core/network.c,v +retrieving revision 1.42 +retrieving revision 1.44 +diff -c -r1.42 -r1.44 +*** network.c 26 Aug 2002 19:05:14 -0000 1.42 +--- network.c 29 Nov 2002 13:38:21 -0000 1.44 +*************** +*** 201,210 **** + /* set our own address */ + if (my_ip != NULL) { + sin_set_ip(&so, my_ip); +! if (bind(handle, &so.sa, SIZEOF_SOCKADDR(so)) == -1) { + /* failed, set it back to INADDR_ANY */ +! sin_set_ip(&so, NULL); +! bind(handle, &so.sa, SIZEOF_SOCKADDR(so)); + } + } + +--- 201,213 ---- + /* set our own address */ + if (my_ip != NULL) { + sin_set_ip(&so, my_ip); +! if (bind(handle, &so.sa, SIZEOF_SOCKADDR(so)) < 0) { + /* failed, set it back to INADDR_ANY */ +! int old_errno = errno; +! +! close(handle); +! errno = old_errno; +! return NULL; + } + } + +*************** +*** 466,498 **** + int net_gethostbyaddr(IPADDR *ip, char **name) + { + #ifdef HAVE_IPV6 +! struct addrinfo req, *ai; + int host_error; + #else + struct hostent *hp; + #endif +- char ipname[MAX_IP_LEN]; + + g_return_val_if_fail(ip != NULL, -1); + g_return_val_if_fail(name != NULL, -1); + +- net_ip2host(ip, ipname); +- + *name = NULL; + #ifdef HAVE_IPV6 +! memset(&req, 0, sizeof(struct addrinfo)); +! req.ai_socktype = SOCK_STREAM; +! req.ai_flags = AI_CANONNAME; + + /* save error to host_error for later use */ +! host_error = getaddrinfo(ipname, NULL, &req, &ai); +! if (host_error != 0) +! return host_error; +! *name = g_strdup(ai->ai_canonname); + +! freeaddrinfo(ai); + #else +! hp = gethostbyaddr(ipname, strlen(ipname), AF_INET); + if (hp == NULL) return -1; + + *name = g_strdup(hp->h_name); +--- 469,499 ---- + int net_gethostbyaddr(IPADDR *ip, char **name) + { + #ifdef HAVE_IPV6 +! union sockaddr_union so; + int host_error; ++ char hostname[NI_MAXHOST]; + #else + struct hostent *hp; + #endif + + g_return_val_if_fail(ip != NULL, -1); + g_return_val_if_fail(name != NULL, -1); + + *name = NULL; + #ifdef HAVE_IPV6 +! memset(&so, 0, sizeof(so)); +! sin_set_ip(&so, ip); + + /* save error to host_error for later use */ +! host_error = getnameinfo((struct sockaddr *) &so, sizeof(so), +! hostname, sizeof(hostname), NULL, 0, 0); +! if (host_error != 0) +! return host_error; + +! *name = g_strdup(hostname); + #else +! if (ip->family != AF_INET) return -1; +! hp = gethostbyaddr(&ip->ip, 4, AF_INET); + if (hp == NULL) return -1; + + *name = g_strdup(hp->h_name); |