From: Samuel CORMIER-IIJIMA Date: Tue, 29 Jan 2008 02:56:12 +0000 (-0500) Subject: Fix up cross platform stuff X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fgnio.git;a=commitdiff_plain;h=803423e26a2d4e39ff00b9b0475977db41cf7c0a Fix up cross platform stuff --- 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; } diff --git a/gnio/gsocket.h b/gnio/gsocket.h index 6b663d4..238b9e4 100644 --- a/gnio/gsocket.h +++ b/gnio/gsocket.h @@ -53,6 +53,18 @@ struct _GSocketClass GType g_socket_get_type (void) G_GNUC_CONST; +GSocket * g_socket_new (); + +void g_socket_bind (GSocket *socket, GInetAddress *address); + +GSocket * g_socket_accept (GSocket *socket); + +void g_socket_accept_async (GSocket *socket); + +GSocket * g_socket_accept_finish (GSocket *socket); + +void g_socket_listen (GSocket *socket, int backlog); + G_END_DECLS #endif /* G_SOCKET_H */ diff --git a/test/Makefile.am b/test/Makefile.am index 81bd00f..637039b 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -7,7 +7,7 @@ AM_CFLAGS = \ -DG_DISABLE_DEPRECATED AM_LDFLAGS = \ - -lgnio $(GLIB_LIBS) ../gnio/libgnio.la + $(GLIB_LIBS) ../gnio/libgnio.la noinst_PROGRAMS = \ test-stuff \ diff --git a/test/test-stuff.c b/test/test-stuff.c index 9ccfc3c..e741f96 100644 --- a/test/test-stuff.c +++ b/test/test-stuff.c @@ -5,7 +5,9 @@ #include #include -#include +#ifdef G_OS_WIN32 +# include +#endif GMainLoop *loop; @@ -53,14 +55,18 @@ int main (int argc, char *argv[]) GInetAddress *address; GResolver *resolver; GError *error = NULL; +#ifdef G_OS_WIN32 WSADATA wsaData; +#endif g_thread_init (NULL); g_type_init (); +#ifdef G_OS_WIN32 if (WSAStartup (MAKEWORD (2, 2), &wsaData) != 0) return 0; +#endif loop = g_main_loop_new (NULL, FALSE);