diff --git a/bluez-4.5-browse-fixes.patch b/bluez-4.5-browse-fixes.patch new file mode 100644 index 0000000..cfcf8b6 --- /dev/null +++ b/bluez-4.5-browse-fixes.patch @@ -0,0 +1,70 @@ +--- bluez-4.5/src/device.c.orig 2008-09-11 23:59:02.000000000 -0700 ++++ bluez-4.5/src/device.c 2008-09-12 21:04:40.000000000 -0700 +@@ -977,8 +977,9 @@ static void browse_cb(sdp_list_t *recs, + bdaddr_t src, dst; + uuid_t uuid; + +- /* Public browsing successful or Single record requested */ +- if (err < 0 || (!req->search_uuid && recs)) ++ /* If we have a valid response and req->search_uuid == 1, then ++ public browsing was successful -- we don't need any more */ ++ if (err < 0 || (req->search_uuid == 1 && recs)) + goto done; + + update_services(req, recs); +@@ -987,8 +988,8 @@ static void browse_cb(sdp_list_t *recs, + str2ba(device->address, &dst); + + /* Search for mandatory uuids */ +- if (uuid_list[++req->search_uuid]) { +- sdp_uuid16_create(&uuid, uuid_list[req->search_uuid]); ++ if (uuid_list[req->search_uuid]) { ++ sdp_uuid16_create(&uuid, uuid_list[req->search_uuid++]); + bt_search_service(&src, &dst, &uuid, browse_cb, user_data, NULL); + return; + } +@@ -1025,10 +1026,25 @@ static void init_browse(struct browse_re + + for (i = 0; driver->uuids[i]; i++) { + char *uuid; ++ int j; + ++ /* Eliminate duplicates of UUIDs in uuid_list[]... */ ++ if (strlen(driver->uuids[i]) == 36 && ++ !strncmp(driver->uuids[i], "0000", 4) && ++ !strcasecmp(driver->uuids[i] + 8, ++ "-0000-1000-8000-00805F9B34FB")) { ++ uint16_t uuid16 = strtol(driver->uuids[i], ++ NULL, 16); ++ for (j = 0; uuid_list[j]; j++) { ++ if (uuid16 == uuid_list[j]) ++ continue; ++ } ++ ++ } ++ /* ... and of UUIDs another driver already asked for */ + if (g_slist_find_custom(req->uuids, driver->uuids[i], + (GCompareFunc) strcasecmp)) +- return; ++ continue; + + uuid = g_strdup(driver->uuids[i]); + req->uuids = g_slist_append(req->uuids, uuid); +@@ -1062,7 +1078,7 @@ int device_browse(struct btd_device *dev + memcpy(&uuid, search, sizeof(uuid_t)); + cb = search_cb; + } else { +- sdp_uuid16_create(&uuid, uuid_list[req->search_uuid]); ++ sdp_uuid16_create(&uuid, uuid_list[req->search_uuid++]); + init_browse(req); + cb = browse_cb; + } +@@ -1076,7 +1092,7 @@ int device_browse(struct btd_device *dev + discover_services_req_exit, + device, NULL); + +- return bt_search_service(&src, &dst, &uuid, browse_cb, req, NULL); ++ return bt_search_service(&src, &dst, &uuid, cb, req, NULL); + } + + struct btd_adapter *device_get_adapter(struct btd_device *device) diff --git a/bluez.spec b/bluez.spec index f00f6ae..c17c436 100644 --- a/bluez.spec +++ b/bluez.spec @@ -1,13 +1,14 @@ Summary: Bluetooth utilities Name: bluez Version: 4.5 -Release: 3%{?dist} +Release: 4%{?dist} License: GPLv2+ Group: Applications/System Source: http://www.kernel.org/pub/linux/bluetooth/%{name}-%{version}.tar.gz Source1: bluetooth.init Source2: bluetooth.conf Patch1: bluez-utils-oui-usage.patch +Patch2: bluez-4.5-browse-fixes.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root URL: http://www.bluez.org/ @@ -96,6 +97,7 @@ use in Bluetooth applications. %setup -q %patch1 -p0 -b .oui +%patch2 -p1 %build %configure --enable-cups --enable-hid2hci --enable-dfutool --enable-tools --enable-bccmd --enable-gstreamer --enable-hidd --enable-pand --enable-dund @@ -181,6 +183,9 @@ fi %{_libdir}/alsa-lib/*.so %changelog +* Fri Sep 12 2008 - David Woodhouse - 4.5-4 +- SDP browse fixes + * Fri Sep 12 2008 - David Woodhouse - 4.5-3 - Bluez-alsa needs to provide/obsolete bluez-utils-alsa - Use versioned Obsoletes: