From 3a2024530dd736ece6f8b59db53bd8f67a755361 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Thu, 24 Apr 2008 14:56:40 +0000 Subject: Close socket on bind failure, fix callback user_data to be the last parameter and pass uuid refence. --- common/glib-helper.c | 26 ++++++++++++++++---------- common/glib-helper.h | 4 ++-- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/common/glib-helper.c b/common/glib-helper.c index 6eafa4f7..5e0d4cb3 100644 --- a/common/glib-helper.c +++ b/common/glib-helper.c @@ -108,7 +108,7 @@ static void search_completed_cb(uint8_t type, uint16_t status, done: if (ctxt->cb) - ctxt->cb(ctxt->user_data, recs, err); + ctxt->cb(recs, err, ctxt->user_data); search_context_cleanup(ctxt); } @@ -132,7 +132,7 @@ static gboolean search_process_cb(GIOChannel *chan, failed: if (err) { if (ctxt->cb) - ctxt->cb(ctxt->user_data, NULL, -err); + ctxt->cb(NULL, err, ctxt->user_data); search_context_cleanup(ctxt); } @@ -183,7 +183,7 @@ static gboolean connect_watch(GIOChannel *chan, GIOCondition cond, gpointer user failed: if (ctxt->cb) - ctxt->cb(ctxt->user_data, NULL, -err); + ctxt->cb(NULL, -err, ctxt->user_data); search_context_cleanup(ctxt); return FALSE; @@ -191,7 +191,7 @@ failed: static int create_search_context(struct search_context **ctxt, const bdaddr_t *src, const bdaddr_t *dst, - uuid_t uuid) + uuid_t *uuid) { sdp_session_t *s; GIOChannel *chan; @@ -212,7 +212,7 @@ static int create_search_context(struct search_context **ctxt, bacpy(&(*ctxt)->src, src); bacpy(&(*ctxt)->dst, dst); (*ctxt)->session = s; - (*ctxt)->uuid = uuid; + (*ctxt)->uuid = *uuid; chan = g_io_channel_unix_new(sdp_get_socket(s)); g_io_add_watch(chan, G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL, @@ -223,7 +223,7 @@ static int create_search_context(struct search_context **ctxt, } int bt_search_service(const bdaddr_t *src, const bdaddr_t *dst, - uuid_t uuid, bt_callback_t cb, void *user_data, + uuid_t *uuid, bt_callback_t cb, void *user_data, bt_destroy_t destroy) { struct search_context *ctxt; @@ -250,7 +250,7 @@ int bt_discover_services(const bdaddr_t *src, const bdaddr_t *dst, sdp_uuid16_create(&uuid, PUBLIC_BROWSE_GROUP); - return bt_search_service(src, dst, uuid, cb, user_data, destroy); + return bt_search_service(src, dst, &uuid, cb, user_data, destroy); } char *bt_uuid2string(uuid_t *uuid) @@ -419,8 +419,10 @@ static int sco_connect(struct io_context *io_ctxt, const bdaddr_t *src, bacpy(&addr.sco_bdaddr, src); err = bind(sk, (struct sockaddr *) &addr, sizeof(addr)); - if (err < 0) + if (err < 0) { + close(sk); return -errno; + } memset(&addr, 0, sizeof(addr)); addr.sco_family = AF_BLUETOOTH; @@ -451,8 +453,10 @@ static int l2cap_connect(struct io_context *io_ctxt, const bdaddr_t *src, bacpy(&l2a.l2_bdaddr, src); err = bind(sk, (struct sockaddr *) &l2a, sizeof(l2a)); - if (err < 0) + if (err < 0) { + close(sk); return -errno; + } memset(&l2a, 0, sizeof(l2a)); l2a.l2_family = AF_BLUETOOTH; @@ -484,8 +488,10 @@ static int rfcomm_connect(struct io_context *io_ctxt, const bdaddr_t *src, bacpy(&addr.rc_bdaddr, src); err = bind(sk, (struct sockaddr *) &addr, sizeof(addr)); - if (err < 0) + if (err < 0) { + close(sk); return -errno; + } memset(&addr, 0, sizeof(addr)); addr.rc_family = AF_BLUETOOTH; diff --git a/common/glib-helper.h b/common/glib-helper.h index b51122ad..6d191640 100644 --- a/common/glib-helper.h +++ b/common/glib-helper.h @@ -22,14 +22,14 @@ */ typedef void (*bt_io_callback_t) (GIOChannel *io, int err, gpointer user_data); -typedef void (*bt_callback_t) (gpointer user_data, sdp_list_t *recs, int err); +typedef void (*bt_callback_t) (sdp_list_t *recs, int err, gpointer user_data); typedef void (*bt_destroy_t) (gpointer user_data); int bt_discover_services(const bdaddr_t *src, const bdaddr_t *dst, bt_callback_t cb, void *user_data, bt_destroy_t destroy); int bt_search_service(const bdaddr_t *src, const bdaddr_t *dst, - uuid_t uuid, bt_callback_t cb, void *user_data, + uuid_t *uuid, bt_callback_t cb, void *user_data, bt_destroy_t destroy); gchar *bt_uuid2string(uuid_t *uuid); -- cgit