Fix up cross platform stuff
authorSamuel CORMIER-IIJIMA <scormi3@lab2-15.cs.mcgill.ca>
Tue, 29 Jan 2008 02:56:12 +0000 (21:56 -0500)
committerSamuel CORMIER-IIJIMA <scormi3@lab2-15.cs.mcgill.ca>
Tue, 29 Jan 2008 02:56:12 +0000 (21:56 -0500)
gnio/gresolver.c
gnio/gsocket.h
test/Makefile.am
test/test-stuff.c

index c5ff2e7..ee9fd0b 100644 (file)
@@ -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;
 }
 
index 6b663d4..238b9e4 100644 (file)
@@ -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 */
index 81bd00f..637039b 100644 (file)
@@ -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 \
index 9ccfc3c..e741f96 100644 (file)
@@ -5,7 +5,9 @@
 #include <glib.h>
 #include <glib/gprintf.h>
 
-#include <winsock2.h>
+#ifdef G_OS_WIN32
+# include <winsock2.h>
+#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);