[telepathy-salut/master] pass a GError to GibberUnixTransportRecvCredentialsCb

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Thu May 14 08:31:58 PDT 2009


---
 lib/gibber/gibber-unix-transport.c             |   19 +++++++++++++++----
 lib/gibber/gibber-unix-transport.h             |    2 ++
 lib/gibber/tests/check-gibber-unix-transport.c |    2 ++
 3 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/lib/gibber/gibber-unix-transport.c b/lib/gibber/gibber-unix-transport.c
index 8719714..244f468 100644
--- a/lib/gibber/gibber-unix-transport.c
+++ b/lib/gibber/gibber-unix-transport.c
@@ -286,10 +286,13 @@ gibber_unix_transport_read (GibberFdTransport *transport,
 
   if (bytes_read == -1)
     {
-      g_set_error_literal (error, G_IO_CHANNEL_ERROR,
+      GError *err = NULL;
+
+      g_set_error_literal (&err, G_IO_CHANNEL_ERROR,
           g_io_channel_error_from_errno (errno), "recvmsg failed");
 
-      priv->recv_creds_cb (self, NULL, NULL, priv->recv_creds_data);
+      priv->recv_creds_cb (self, NULL, NULL, err, priv->recv_creds_data);
+      g_propagate_error (error, err);
 
       priv->recv_creds_cb = NULL;
       priv->recv_creds_data = NULL;
@@ -307,9 +310,16 @@ gibber_unix_transport_read (GibberFdTransport *transport,
   ch = CMSG_FIRSTHDR (&msg);
   if (ch == NULL)
     {
+      GError *err = NULL;
+
       DEBUG ("Message doesn't contain credentials");
 
-      priv->recv_creds_cb (self, &buf, NULL, priv->recv_creds_data);
+      g_set_error_literal (&err, GIBBER_UNIX_TRANSPORT_ERROR,
+          GIBBER_UNIX_TRANSPORT_ERROR_NO_CREDENTIALS,
+          "no credentials received");
+
+      priv->recv_creds_cb (self, &buf, NULL, err, priv->recv_creds_data);
+      g_error_free (err);
     }
   else
     {
@@ -320,7 +330,8 @@ gibber_unix_transport_read (GibberFdTransport *transport,
       credentials.uid = cred->uid;
       credentials.gid = cred->gid;
 
-      priv->recv_creds_cb (self, &buf, &credentials, priv->recv_creds_data);
+      priv->recv_creds_cb (self, &buf, &credentials, NULL,
+          priv->recv_creds_data);
     }
 
   priv->recv_creds_cb = NULL;
diff --git a/lib/gibber/gibber-unix-transport.h b/lib/gibber/gibber-unix-transport.h
index cdd68b9..b89a0dd 100644
--- a/lib/gibber/gibber-unix-transport.h
+++ b/lib/gibber/gibber-unix-transport.h
@@ -45,6 +45,7 @@ typedef enum
 {
   GIBBER_UNIX_TRANSPORT_ERROR_CONNECT_FAILED,
   GIBBER_UNIX_TRANSPORT_ERROR_FAILED,
+  GIBBER_UNIX_TRANSPORT_ERROR_NO_CREDENTIALS,
 } GibberUnixTransportError;
 
 typedef struct _GibberUnixTransport GibberUnixTransport;
@@ -98,6 +99,7 @@ typedef void (*GibberUnixTransportRecvCredentialsCb) (
     GibberUnixTransport *transport,
     GibberBuffer *buffer,
     GibberCredentials *credentials,
+    GError *error,
     gpointer user_data);
 
 gboolean gibber_unix_transport_recv_credentials (GibberUnixTransport *transport,
diff --git a/lib/gibber/tests/check-gibber-unix-transport.c b/lib/gibber/tests/check-gibber-unix-transport.c
index 1530730..409b6e4 100644
--- a/lib/gibber/tests/check-gibber-unix-transport.c
+++ b/lib/gibber/tests/check-gibber-unix-transport.c
@@ -142,12 +142,14 @@ static void
 get_credentials_cb (GibberUnixTransport *transport,
                     GibberBuffer *buffer,
                     GibberCredentials *credentials,
+                    GError *error,
                     gpointer user_data)
 {
   GMainLoop *loop = (GMainLoop *) user_data;
 
   received_credentials = TRUE;
 
+  g_assert (error == NULL);
   g_assert (strcmp ((gchar *) buffer->data, DATA) == 0);
   g_assert (credentials->pid == getpid ());
   g_assert (credentials->uid == getuid ());
-- 
1.5.6.5



More information about the telepathy-commits mailing list