X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fgnio.git;a=blobdiff_plain;f=gnio%2Fgresolver.c;h=ee9fd0b269b0c0b47a9ff90a680b147192d1f262;hp=c5ff2e7d7f9d137590a991569ed6ecfde87763eb;hb=803423e26a2d4e39ff00b9b0475977db41cf7c0a;hpb=5e4f10ab70978804fed4afcb1a45ac5b6b2206cd diff --git a/gnio/gresolver.c b/gnio/gresolver.c index c5ff2e7..ee9fd0b 100644 --- a/gnio/gresolver.c +++ b/gnio/gresolver.c @@ -174,6 +174,36 @@ winsock_error_message (int number) } #endif +static void +g_set_error_from_last_error (GError **error) +{ + int code; + +#ifdef G_OS_WIN32 + int err = WSAGetLastError (); +#else + int err = h_errno; +#endif + + switch (err) + { + case HOST_NOT_FOUND: + code = G_IO_ERROR_RESOLVER_NOT_FOUND; + break; + case NO_DATA: + code = G_IO_ERROR_RESOLVER_NO_DATA; + break; + default: + g_warning ("unknown h_errno code encountered"); + } + +#ifdef G_OS_WIN32 + g_set_error (error, G_IO_ERROR, code, winsock_error_message (err)); +#else + g_set_error (error, G_IO_ERROR, code, hstrerror (err)); +#endif +} + #if !defined(HAVE_GETADDRINFO) static GList * hostent2list (const struct hostent *he) @@ -276,10 +306,7 @@ g_resolver_get_host_by_name (GResolver *resolver, const gchar *hostname, GError struct hostent *he = gethostbyname (hostname); if (!he) - { - if (error) - *error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, winsock_error_message (WSAGetLastError ())); - } + g_set_error_from_last_error (error); else list = hostent2list (he); } @@ -298,6 +325,8 @@ g_resolver_get_host_by_name (GResolver *resolver, const gchar *hostname, GError if (!rv) list = hostent2list (he); + else + g_set_error_from_last_error (error); g_free (buf); } @@ -318,6 +347,8 @@ g_resolver_get_host_by_name (GResolver *resolver, const gchar *hostname, GError if (he) list = hostent2list (&result); + else + g_set_error_from_last_error (error); g_free (buf); } @@ -331,6 +362,8 @@ g_resolver_get_host_by_name (GResolver *resolver, const gchar *hostname, GError if (!rv) list = hostent2list (&he); + else + g_set_error_from_last_error (error); } #else { @@ -341,7 +374,10 @@ g_resolver_get_host_by_name (GResolver *resolver, const gchar *hostname, GError #endif he = gethostbyname (hostname); - list = hostent2list (he); + if (he) + list = hostent2list (he); + else + g_set_error_from_last_error (error); #ifdef HAVE_GETHOSTBYNAME_R_GLIB_MUTEX G_UNLOCK (dnslock); @@ -352,9 +388,6 @@ g_resolver_get_host_by_name (GResolver *resolver, const gchar *hostname, GError if (list) list = g_list_reverse (list); - if (!list && error) - *error = g_error_new_literal (G_IO_ERROR, G_IO_ERROR_FAILED, winsock_error_message (WSAGetLastError ())); - return list; }