gio/tests/socket: fix minor memleak
[platform/upstream/glib.git] / gio / tests / unix-fd.c
index a84e03f..4d984df 100644 (file)
@@ -1,6 +1,7 @@
 #include <gio/gio.h>
+#include <gio/gnetworking.h>
 #include <gio/gunixfdmessage.h>
-#include <sys/socket.h>
+#include <gio/gunixsocketaddress.h>
 #include <string.h>
 #include <unistd.h>
 
@@ -40,10 +41,12 @@ create_fd_list (gint *fd_list)
 static void
 test_fds (void)
 {
+  GError *err = NULL;
   GUnixFDMessage *message;
   GUnixFDMessage **mv;
   GUnixFDList *list, *l2;
   GSocket *sockets[2];
+  GSocketAddress *addr;
   const gint *peek;
   char buffer[1024];
   gint fd_list[40];
@@ -54,6 +57,10 @@ test_fds (void)
   gint flags;
   gint nm;
   gint s;
+  gchar *path;
+  GByteArray *array;
+  gboolean abstract;
+  GUnixSocketAddressType type;
 
   create_fd_list (fd_list);
 
@@ -81,64 +88,102 @@ test_fds (void)
   g_assert_cmpint (stolen[2], ==, sv[2]);
   g_free (stolen);
 
-  g_unix_fd_message_append_fd (message, sv[0], NULL);
+  g_unix_fd_message_append_fd (message, sv[0], &err);
+  g_assert_no_error (err);
   s = close (sv[0]);
   g_assert_cmpint (s, ==, 0);
-  g_unix_fd_message_append_fd (message, sv[1], NULL);
+  g_unix_fd_message_append_fd (message, sv[1], &err);
+  g_assert_no_error (err);
   s = close (sv[1]);
   g_assert_cmpint (s, ==, 0);
 
-  s = close (g_unix_fd_list_get (list, 0, NULL));
+  s = close (g_unix_fd_list_get (list, 0, &err));
+  g_assert_no_error (err);
   g_assert_cmpint (s, ==, 0);
-  s = close (g_unix_fd_list_get (list, 1, NULL));
+  s = close (g_unix_fd_list_get (list, 1, &err));
+  g_assert_no_error (err);
   g_assert_cmpint (s, ==, 0);
-  s = close (g_unix_fd_list_get (list, 0, NULL));
+  s = close (g_unix_fd_list_get (list, 0, &err));
+  g_assert_no_error (err);
   g_assert_cmpint (s, ==, 0);
-  s = close (g_unix_fd_list_get (list, 1, NULL));
+  s = close (g_unix_fd_list_get (list, 1, &err));
+  g_assert_no_error (err);
   g_assert_cmpint (s, ==, 0);
-  s = close (g_unix_fd_list_get (list, 0, NULL));
+  s = close (g_unix_fd_list_get (list, 0, &err));
+  g_assert_no_error (err);
   g_assert_cmpint (s, ==, 0);
-  s = close (g_unix_fd_list_get (list, 1, NULL));
+  s = close (g_unix_fd_list_get (list, 1, &err));
+  g_assert_no_error (err);
   g_assert_cmpint (s, ==, 0);
 
   g_object_unref (message);
   g_object_unref (list);
 
-
-
   message = G_UNIX_FD_MESSAGE (g_unix_fd_message_new ());
   list = g_unix_fd_message_get_fd_list (message);
   s = pipe (sv);
   g_assert_cmpint (s, ==, 0);
 
-  s = g_unix_fd_list_append (list, sv[0], NULL);
+  s = g_unix_fd_list_append (list, sv[0], &err);
+  g_assert_no_error (err);
   g_assert_cmpint (s, >=, 0);
-  s = g_unix_fd_list_append (list, sv[1], NULL);
+  s = g_unix_fd_list_append (list, sv[1], &err);
+  g_assert_no_error (err);
   g_assert_cmpint (s, >=, 0);
 
   s = close (sv[0]);
   g_assert_cmpint (s, ==, 0);
   s = close (sv[1]);
   g_assert_cmpint (s, ==, 0);
-  s = close (g_unix_fd_list_get (list, 0, NULL));
+  s = close (g_unix_fd_list_get (list, 0, &err));
+  g_assert_no_error (err);
   g_assert_cmpint (s, ==, 0);
-  s = close (g_unix_fd_list_get (list, 1, NULL));
+  s = close (g_unix_fd_list_get (list, 1, &err));
+  g_assert_no_error (err);
   g_assert_cmpint (s, ==, 0);
 
   s = socketpair (PF_UNIX, SOCK_STREAM, 0, sv);
   g_assert_cmpint (s, ==, 0);
 
-  sockets[0] = g_socket_new_from_fd (sv[0], NULL);
+  sockets[0] = g_socket_new_from_fd (sv[0], &err);
+  g_assert_no_error (err);
   g_assert (G_IS_SOCKET (sockets[0]));
-  sockets[1] = g_socket_new_from_fd (sv[1], NULL);
+  sockets[1] = g_socket_new_from_fd (sv[1], &err);
+  g_assert_no_error (err);
   g_assert (G_IS_SOCKET (sockets[1]));
 
+  addr = g_socket_get_local_address (sockets[0], &err);
+  g_assert_no_error (err);
+  g_assert (G_IS_UNIX_SOCKET_ADDRESS (addr));
+  g_assert_cmpint (g_unix_socket_address_get_address_type (G_UNIX_SOCKET_ADDRESS (addr)), ==, G_UNIX_SOCKET_ADDRESS_ANONYMOUS);
+  g_assert_cmpint (g_unix_socket_address_get_path_len (G_UNIX_SOCKET_ADDRESS (addr)), ==, 0);
+
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+  g_assert (!g_unix_socket_address_get_is_abstract (G_UNIX_SOCKET_ADDRESS (addr)));
+G_GNUC_END_IGNORE_DEPRECATIONS
+
+  g_object_get (addr,
+                "path", &path,
+                "path-as-array", &array,
+                "abstract", &abstract,
+                "address-type", &type,
+                NULL);
+  g_assert_cmpstr (path, ==, "");
+  g_assert_cmpint (array->len, ==, 0);
+  g_assert (!abstract);
+  g_assert (type == G_UNIX_SOCKET_ADDRESS_ANONYMOUS);
+  g_free (path);
+  g_byte_array_free (array, TRUE);
+
+  g_object_unref (addr);
+
   buffer[0] = 0xff;
   ov.buffer = buffer;
   ov.size = 1;
   s = g_socket_send_message (sockets[0], NULL, &ov, 1,
                              (GSocketControlMessage **) &message,
-                             1, 0, NULL, NULL);
+                             1, 0, NULL, &err);
+  g_assert_no_error (err);
   g_assert_cmpint (s, ==, 1);
   g_object_unref (message);
 
@@ -149,7 +194,8 @@ test_fds (void)
   iv.size = 1;
   s = g_socket_receive_message (sockets[1], NULL, &iv, 1,
                                 (GSocketControlMessage ***) &mv,
-                                &nm, &flags, NULL, NULL);
+                                &nm, &flags, NULL, &err);
+  g_assert_no_error (err);
   g_assert_cmpint (s, ==, 1);
   g_object_unref (sockets[0]);
   g_object_unref (sockets[1]);
@@ -164,7 +210,8 @@ test_fds (void)
 
   peek = g_unix_fd_list_peek_fds (list, &s);
   g_assert_cmpint (s, ==, 2);
-  sv[0] = g_unix_fd_list_get (list, 1, NULL);
+  sv[0] = g_unix_fd_list_get (list, 1, &err);
+  g_assert_no_error (err);
 
   strcpy (buffer, "failure to say failure to say 'i love gnome-panel!'.");
   s = write (sv[0], buffer, strlen (buffer) + 1);
@@ -188,8 +235,6 @@ main (int argc, char **argv)
 {
   g_test_init (&argc, &argv, NULL);
 
-  g_type_init ();
-
   g_test_add_func ("/unix-streams/file-descriptors", test_fds);
 
   return g_test_run();