for (ai = res; ai; ai = ai->ai_next)
{
sockaddr = g_socket_address_new_from_native (ai->ai_addr, ai->ai_addrlen);
- if (!sockaddr || !G_IS_INET_SOCKET_ADDRESS (sockaddr))
+ if (!sockaddr)
continue;
+ if (!G_IS_INET_SOCKET_ADDRESS (sockaddr))
+ {
+ g_clear_object (&sockaddr);
+ continue;
+ }
addr = g_object_ref (g_inet_socket_address_get_address ((GInetSocketAddress *)sockaddr));
addresses = g_list_prepend (addresses, addr);
g_object_unref (sockaddr);
}
- addresses = g_list_reverse (addresses);
- g_task_return_pointer (task, addresses,
- (GDestroyNotify)g_resolver_free_addresses);
+ if (addresses != NULL)
+ {
+ addresses = g_list_reverse (addresses);
+ g_task_return_pointer (task, addresses,
+ (GDestroyNotify)g_resolver_free_addresses);
+ }
+ else
+ {
+ /* All addresses failed to be converted to GSocketAddresses. */
+ g_task_return_new_error (task,
+ G_RESOLVER_ERROR,
+ G_RESOLVER_ERROR_NOT_FOUND,
+ _("Error resolving '%s': %s"),
+ hostname,
+ _("No valid addresses were found"));
+ }
}
else
{
g_return_val_if_reached (-1);
}
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wformat-nonliteral"
-
static GList *
g_resolver_records_from_res_query (const gchar *rrname,
gint rrtype,
return records;
}
-#pragma GCC diagnostic pop
-
#elif defined(G_OS_WIN32)
static GVariant *
resolver_class->lookup_records_async = lookup_records_async;
resolver_class->lookup_records_finish = lookup_records_finish;
- /* Initialize _g_resolver_addrinfo_hints */
+ /* Initialize addrinfo_hints */
#ifdef AI_ADDRCONFIG
addrinfo_hints.ai_flags |= AI_ADDRCONFIG;
#endif