Check for driver methods before calling them and reset them on close.
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Fri, 3 Jul 2009 17:26:47 +0000 (14:26 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Fri, 3 Jul 2009 18:37:32 +0000 (15:37 -0300)
This may avoid some hickups when methods are improperly called.

hcconn.c

index aac7cc1..02f1572 100644 (file)
--- a/hcconn.c
+++ b/hcconn.c
@@ -173,7 +173,9 @@ hc_conn_set_callback (HCConn *conn, HCClientFunc func, gpointer data)
 ssize_t
 hc_conn_read (HCConn *conn, char *buffer, size_t len)
 {
-  return conn->read (conn->layer, buffer, len);
+  if (conn->read)
+    return conn->read (conn->layer, buffer, len);
+  return 0;
 }
 
 void
@@ -182,12 +184,18 @@ hc_conn_write (HCConn *conn, char *buffer, size_t len)
   /* TODO: Do buffering or something like that */
   /* Do we really need to? */
   /* In case of error, we should do something */
-  conn->write (conn->layer, buffer, len);
+  if (conn->write)
+    conn->write (conn->layer, buffer, len);
 }
 
 void
 hc_conn_close (HCConn *conn)
 {
-  conn->close (conn->layer);
+  if (conn->close)
+    conn->close (conn->layer);
+  conn->read = NULL;
+  conn->write = NULL;
+  conn->close = NULL;
+  conn->func = NULL;
   g_slice_free (HCConn, conn);
 }