[ekg2-commit] r4203 - trunk/ekg: trunk/ekg/resolver.c
SVN commit
svn w toxygen.net
Czw, 7 Sie 2008, 10:19:54 CEST
Author: peres
Date: 2008-08-07 10:19:54 +0200 (Thu, 07 Aug 2008)
New Revision: 4203
Modified:
trunk/ekg/resolver.c
Log:
Cleanup and fix memleak.
Modified: trunk/ekg/resolver.c
===================================================================
--- trunk/ekg/resolver.c 2008-08-07 06:37:53 UTC (rev 4202)
+++ trunk/ekg/resolver.c 2008-08-07 08:19:54 UTC (rev 4203)
@@ -141,40 +141,46 @@
return watch_add(plugin, fd[0], WATCH_READ, async, data);
}
-static int irc_resolver2(char ***arr, char *hostname) {
+static int irc_resolver2(char ***arr, const char *hostname) {
#ifdef HAVE_GETADDRINFO
- struct addrinfo *ai, *aitmp, hint;
- void *tm = NULL;
+ struct addrinfo *ai, *aitmp, hint;
+ void *tm = NULL;
#else
-#warning "irc: You don't have getaddrinfo() resolver may not work! (ipv6 for sure)"
- struct hostent *he4;
-#endif
+#warning "resolver: You don't have getaddrinfo(), resolver may not work! (ipv6 for sure)"
+ struct hostent *he4;
+#endif
#ifdef HAVE_GETADDRINFO
memset(&hint, 0, sizeof(struct addrinfo));
- hint.ai_socktype=SOCK_STREAM;
+ hint.ai_socktype = SOCK_STREAM;
+
if (!getaddrinfo(hostname, NULL, &hint, &ai)) {
for (aitmp = ai; aitmp; aitmp = aitmp->ai_next) {
- char *ip = NULL, *buf;
+#ifdef HAVE_INET_NTOP
+#define RESOLVER_MAXLEN INET6_ADDRSTRLEN
+ static char ip[RESOLVER_MAXLEN];
+#else
+ const char *ip;
+#endif
if (aitmp->ai_family == AF_INET6)
tm = &(((struct sockaddr_in6 *) aitmp->ai_addr)->sin6_addr);
- if (aitmp->ai_family == AF_INET)
+ else if (aitmp->ai_family == AF_INET)
tm = &(((struct sockaddr_in *) aitmp->ai_addr)->sin_addr);
+ else
+ continue;
#ifdef HAVE_INET_NTOP
- ip = xmalloc(100);
- inet_ntop(aitmp->ai_family, tm, ip, 100);
+ inet_ntop(aitmp->ai_family, tm, ip, RESOLVER_MAXLEN);
#else
+#warning "resolver: You have getaddrinfo() but no inet_ntop(), IPv6 won't work!"
if (aitmp->ai_family == AF_INET6) {
/* G: this doesn't have a sense since we're in child */
/* print("generic_error", "You don't have inet_ntop() and family == AF_INET6. Please contact with developers if it happens."); */
- ip = xstrdup("::");
+ ip = "::";
} else
- ip = xstrdup(inet_ntoa(*(struct in_addr *)tm));
+ ip = inet_ntoa(*(struct in_addr *)tm);
#endif
- buf = saprintf("%s %s %d\n", hostname, ip, aitmp->ai_family);
- array_add(arr, buf);
- xfree(ip);
+ array_add(arr, saprintf("%s %s %d\n", hostname, ip, aitmp->ai_family));
}
freeaddrinfo(ai);
}
@@ -182,8 +188,7 @@
if ((he4 = gethostbyname(hostname))) {
/* copied from http://webcvs.ekg2.org/ekg2/plugins/irc/irc.c.diff?r1=1.79&r2=1.80 OLD RESOLVER VERSION...
* .. huh, it was 8 months ago..*/
- char *ip = xstrdup(inet_ntoa(*(struct in_addr *) he4->h_addr));
- array_add(arr, saprintf("%s %s %d\n", hostname, ip, AF_INET));
+ array_add(arr, saprintf("%s %s %d\n", hostname, inet_ntoa(*(struct in_addr *) he4->h_addr), AF_INET));
} else array_add(arr, saprintf("%s : no_host_get_addrinfo()\n", hostname));
#endif
Więcej informacji o liście dyskusyjnej ekg2-commit