summaryrefslogtreecommitdiffstats
path: root/input
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-05-27 22:03:43 +0000
committerMarcel Holtmann <marcel@holtmann.org>2008-05-27 22:03:43 +0000
commit27b076bdd6b65521f9e37fc6e088ea9396105d3b (patch)
tree9e73e671dfe9d06104aa96a52a27d8e2c1fea4d3 /input
parent649448818704cd93136d55d33676ad80cb463224 (diff)
Fix some handling of error cases
Diffstat (limited to 'input')
-rw-r--r--input/device.c47
1 files changed, 25 insertions, 22 deletions
diff --git a/input/device.c b/input/device.c
index b85f9cdb..261c1a58 100644
--- a/input/device.c
+++ b/input/device.c
@@ -371,6 +371,24 @@ failed:
return FALSE;
}
+static inline DBusMessage *in_progress(DBusMessage *msg)
+{
+ return g_dbus_create_error(msg, ERROR_INTERFACE ".InProgress",
+ "Device connection already in progress");
+}
+
+static inline DBusMessage *already_connected(DBusMessage *msg)
+{
+ return g_dbus_create_error(msg, ERROR_INTERFACE ".AlreadyConnected",
+ "Already connected to a device");
+}
+
+static inline DBusMessage *connection_attempt_failed(DBusMessage *msg, int err)
+{
+ return g_dbus_create_error(msg, ERROR_INTERFACE ".ConnectionAttemptFailed",
+ err ? strerror(err) : "Connection attempt failed");
+}
+
static void rfcomm_connect_cb(GIOChannel *chan, int err, const bdaddr_t *src,
const bdaddr_t *dst, gpointer user_data)
{
@@ -416,8 +434,9 @@ static void rfcomm_connect_cb(GIOChannel *chan, int err, const bdaddr_t *src,
return;
failed:
- error_connection_attempt_failed(idev->conn,
- idev->pending_connect, err);
+ reply = connection_attempt_failed(idev->pending_connect, err);
+ g_dbus_send_message(idev->conn, reply);
+
dbus_message_unref(idev->pending_connect);
idev->pending_connect = NULL;
}
@@ -559,6 +578,7 @@ static void interrupt_connect_cb(GIOChannel *chan, int err, const bdaddr_t *src,
const bdaddr_t *dst, gpointer user_data)
{
struct device *idev = user_data;
+ DBusMessage *reply;
if (err < 0) {
error("connect(): %s (%d)", strerror(-err), -err);
@@ -586,8 +606,9 @@ static void interrupt_connect_cb(GIOChannel *chan, int err, const bdaddr_t *src,
goto cleanup;
failed:
- error_connection_attempt_failed(idev->conn,
- idev->pending_connect, -err);
+ reply = connection_attempt_failed(idev->pending_connect, -err);
+ g_dbus_send_message(idev->conn, reply);
+
idev->intr_sk = -1;
idev->ctrl_sk = -1;
@@ -737,24 +758,6 @@ static int is_connected(struct device *idev)
return 1;
}
-static inline DBusMessage *in_progress(DBusMessage *msg)
-{
- return g_dbus_create_error(msg, ERROR_INTERFACE ".InProgress",
- "Device connection already in progress");
-}
-
-static inline DBusMessage *already_connected(DBusMessage *msg)
-{
- return g_dbus_create_error(msg, ERROR_INTERFACE ".AlreadyConnected",
- "Already connected to a device");
-}
-
-static inline DBusMessage *connection_attempt_failed(DBusMessage *msg, int err)
-{
- return g_dbus_create_error(msg, ERROR_INTERFACE ".ConnectionAttemptFailed",
- err ? strerror(err) : "Connection attempt failed");
-}
-
/*
* Input Device methods
*/