On Tue, Aug 10, 2010 at 02:03:27PM +0200, Daniel Veillard wrote:
On Tue, Aug 10, 2010 at 07:42:49PM +1000, Justin Clift wrote:
Hum ... I think that it's better to allow virSocketParseAddr() to
take a NULL Addr pointer it's very simple, I'm attaching the patch
and then virIsNumericIPAddr(foo) can be replaced by
virSocketParseAddr(foo, NULL, 0)
it also has the extensibility of being able to cope with IPv4 or
IPv6 only if one need, just by adjusting the hint.
Am I right ? I see you do more initializations on hints.ai_family
but the memset means the two functions are just the same for
ai_socktype and ai_protocol,
Yep, AI_NUMERICHOST is the only one that really matters here.
diff --git a/src/util/network.c b/src/util/network.c
index 6e24792..b17d419 100644
--- a/src/util/network.c
+++ b/src/util/network.c
@@ -56,7 +56,7 @@ static int getIPv6Addr(virSocketAddrPtr addr, virIPv6AddrPtr tab) {
/**
* virSocketParseAddr:
* @val: a numeric network address IPv4 or IPv6
- * @addr: where to store the return value.
+ * @addr: where to store the return value, optional.
* @hint: optional hint to pass down to getaddrinfo
*
* Mostly a wrapper for getaddrinfo() extracting the address storage
@@ -70,7 +70,7 @@ virSocketParseAddr(const char *val, virSocketAddrPtr addr, int hint) {
struct addrinfo hints;
struct addrinfo *res = NULL;
- if ((val == NULL) || (addr == NULL))
+ if (val == NULL)
return(-1);
memset(&hints, 0, sizeof(hints));
@@ -80,7 +80,8 @@ virSocketParseAddr(const char *val, virSocketAddrPtr addr, int hint) {
}
len = res->ai_addrlen;
- memcpy(&addr->stor, res->ai_addr, len);
+ if (addr != NULL)
+ memcpy(&addr->stor, res->ai_addr, len);
freeaddrinfo(res);
return(len);
ACK
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://deltacloud.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|