-AvahiAddress *avahi_address_parse(const char *s, guchar family, AvahiAddress *ret_addr) {
- g_assert(ret_addr);
- g_assert(s);
-
- if (inet_pton(family, s, ret_addr->data.data) < 0)
- return NULL;
-
- ret_addr->family = family;
+AvahiAddress *avahi_address_parse(const char *s, AvahiProtocol family, AvahiAddress *ret_addr) {
+ assert(ret_addr);
+ assert(s);
+
+ if (family == AVAHI_PROTO_UNSPEC) {
+ if (inet_pton(AF_INET, s, ret_addr->data.data) <= 0) {
+ if (inet_pton(AF_INET6, s, ret_addr->data.data) <= 0)
+ return NULL;
+ else
+ ret_addr->family = AVAHI_PROTO_INET6;
+ } else
+ ret_addr->family = AVAHI_PROTO_INET;
+ } else {
+ if (inet_pton(family, s, ret_addr->data.data) <= 0)
+ return NULL;
+
+ ret_addr->family = family;
+ }