diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2008-05-27 22:03:43 +0000 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2008-05-27 22:03:43 +0000 |
commit | 27b076bdd6b65521f9e37fc6e088ea9396105d3b (patch) | |
tree | 9e73e671dfe9d06104aa96a52a27d8e2c1fea4d3 /input/device.c | |
parent | 649448818704cd93136d55d33676ad80cb463224 (diff) |
Fix some handling of error cases
Diffstat (limited to 'input/device.c')
-rw-r--r-- | input/device.c | 47 |
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 */ |