mirror of
https://git.yoctoproject.org/poky
synced 2026-05-09 05:29:32 +00:00
bluez: update 5.50 -> 5.52
Drop a big pile of backports. Disable zsh completions, as they're unlikely to be useful. (From OE-Core rev: dad8cd50bcc4203a65d153dc2445502c1e728975) Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
79223afc72
commit
03a44db381
@@ -46,20 +46,13 @@ PACKAGECONFIG[mesh] = "--enable-mesh,--disable-mesh, json-c ell"
|
|||||||
PACKAGECONFIG[btpclient] = "--enable-btpclient,--disable-btpclient, ell"
|
PACKAGECONFIG[btpclient] = "--enable-btpclient,--disable-btpclient, ell"
|
||||||
PACKAGECONFIG[udev] = "--enable-udev,--disable-udev,udev"
|
PACKAGECONFIG[udev] = "--enable-udev,--disable-udev,udev"
|
||||||
|
|
||||||
SRC_URI = "\
|
SRC_URI = "${KERNELORG_MIRROR}/linux/bluetooth/bluez-${PV}.tar.xz \
|
||||||
${KERNELORG_MIRROR}/linux/bluetooth/bluez-${PV}.tar.xz \
|
file://init \
|
||||||
file://out-of-tree.patch \
|
file://run-ptest \
|
||||||
file://init \
|
${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', 'file://0001-Allow-using-obexd-without-systemd-in-the-user-sessio.patch', d)} \
|
||||||
file://run-ptest \
|
file://0001-tests-add-a-target-for-building-tests-without-runnin.patch \
|
||||||
${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', 'file://0001-Allow-using-obexd-without-systemd-in-the-user-sessio.patch', d)} \
|
file://0001-test-gatt-Fix-hung-issue.patch \
|
||||||
file://0001-tests-add-a-target-for-building-tests-without-runnin.patch \
|
"
|
||||||
file://0001-test-gatt-Fix-hung-issue.patch \
|
|
||||||
file://0001-Makefile.am-Fix-a-race-issue-for-tools.patch \
|
|
||||||
file://CVE-2018-10910.patch \
|
|
||||||
file://gcc9-fixes.patch \
|
|
||||||
file://0001-tools-Fix-build-after-y2038-changes-in-glibc.patch \
|
|
||||||
file://0001-tools-btpclient.c-include-signal.h.patch \
|
|
||||||
"
|
|
||||||
S = "${WORKDIR}/bluez-${PV}"
|
S = "${WORKDIR}/bluez-${PV}"
|
||||||
|
|
||||||
CVE_PRODUCT = "bluez"
|
CVE_PRODUCT = "bluez"
|
||||||
@@ -70,6 +63,7 @@ EXTRA_OECONF = "\
|
|||||||
--enable-test \
|
--enable-test \
|
||||||
--enable-datafiles \
|
--enable-datafiles \
|
||||||
--enable-library \
|
--enable-library \
|
||||||
|
--without-zsh-completion-dir \
|
||||||
"
|
"
|
||||||
|
|
||||||
# bluez5 builds a large number of useful utilities but does not
|
# bluez5 builds a large number of useful utilities but does not
|
||||||
|
|||||||
+6
-6
@@ -1,4 +1,4 @@
|
|||||||
From 99ccdbe155028c4c789803a429072675b87d0c3a Mon Sep 17 00:00:00 2001
|
From f74eb97c9fb3c0ee2895742e773ac6a3c41c999c Mon Sep 17 00:00:00 2001
|
||||||
From: Giovanni Campagna <gcampagna-cNUdlRotFMnNLxjTenLetw@public.gmane.org>
|
From: Giovanni Campagna <gcampagna-cNUdlRotFMnNLxjTenLetw@public.gmane.org>
|
||||||
Date: Sat, 12 Oct 2013 17:45:25 +0200
|
Date: Sat, 12 Oct 2013 17:45:25 +0200
|
||||||
Subject: [PATCH] Allow using obexd without systemd in the user session
|
Subject: [PATCH] Allow using obexd without systemd in the user session
|
||||||
@@ -17,22 +17,22 @@ http://thread.gmane.org/gmane.linux.bluez.kernel/38725/focus=38843
|
|||||||
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
|
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
|
||||||
|
|
||||||
---
|
---
|
||||||
Makefile.obexd | 4 ++--
|
Makefile.obexd | 4 ++--
|
||||||
obexd/src/{org.bluez.obex.service => org.bluez.obex.service.in} | 2 +-
|
.../src/{org.bluez.obex.service => org.bluez.obex.service.in} | 2 +-
|
||||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||||
rename obexd/src/{org.bluez.obex.service => org.bluez.obex.service.in} (76%)
|
rename obexd/src/{org.bluez.obex.service => org.bluez.obex.service.in} (76%)
|
||||||
|
|
||||||
diff --git a/Makefile.obexd b/Makefile.obexd
|
diff --git a/Makefile.obexd b/Makefile.obexd
|
||||||
index c462692..0325f66 100644
|
index de59d29..73004a3 100644
|
||||||
--- a/Makefile.obexd
|
--- a/Makefile.obexd
|
||||||
+++ b/Makefile.obexd
|
+++ b/Makefile.obexd
|
||||||
@@ -1,12 +1,12 @@
|
@@ -1,12 +1,12 @@
|
||||||
if SYSTEMD
|
if SYSTEMD
|
||||||
systemduserunitdir = @SYSTEMD_USERUNITDIR@
|
systemduserunitdir = $(SYSTEMD_USERUNITDIR)
|
||||||
systemduserunit_DATA = obexd/src/obex.service
|
systemduserunit_DATA = obexd/src/obex.service
|
||||||
+endif
|
+endif
|
||||||
|
|
||||||
dbussessionbusdir = @DBUS_SESSIONBUSDIR@
|
dbussessionbusdir = $(DBUS_SESSIONBUSDIR)
|
||||||
dbussessionbus_DATA = obexd/src/org.bluez.obex.service
|
dbussessionbus_DATA = obexd/src/org.bluez.obex.service
|
||||||
-endif
|
-endif
|
||||||
|
|
||||||
|
|||||||
-30
@@ -1,30 +0,0 @@
|
|||||||
Upstream-Status: Backport
|
|
||||||
Signed-off-by: Ross Burton <ross.burton@intel.com>
|
|
||||||
|
|
||||||
From 117c41242c01e057295aed80ed973c6dc7e35fe2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ross Burton <ross.burton@intel.com>
|
|
||||||
Date: Tue, 8 Oct 2019 11:01:56 +0100
|
|
||||||
Subject: [PATCH BlueZ] Makefile.am: add missing mkdir in rules generation
|
|
||||||
|
|
||||||
In parallel out-of-tree builds it's possible that tools/*.rules are
|
|
||||||
generated before the target directory has been implicitly created. Solve this by
|
|
||||||
creating the directory before writing into it.
|
|
||||||
---
|
|
||||||
Makefile.am | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/Makefile.am b/Makefile.am
|
|
||||||
index 2ac28b23d..e7bcd2366 100644
|
|
||||||
--- a/Makefile.am
|
|
||||||
+++ b/Makefile.am
|
|
||||||
@@ -589,6 +589,7 @@ src/builtin.h: src/genbuiltin $(builtin_sources)
|
|
||||||
$(AM_V_GEN)$(srcdir)/src/genbuiltin $(builtin_modules) > $@
|
|
||||||
|
|
||||||
tools/%.rules:
|
|
||||||
+ $(AM_V_at)$(MKDIR_P) tools
|
|
||||||
$(AM_V_GEN)cp $(srcdir)/$(subst 97-,,$@) $@
|
|
||||||
|
|
||||||
$(lib_libbluetooth_la_OBJECTS): $(local_headers)
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
||||||
-68
@@ -1,68 +0,0 @@
|
|||||||
From f36f71f60b1e68c0f12e615b9b128d089ec3dd19 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Bastien Nocera <hadess@hadess.net>
|
|
||||||
Date: Fri, 7 Jun 2019 09:51:33 +0200
|
|
||||||
Subject: [PATCH] tools: Fix build after y2038 changes in glibc
|
|
||||||
|
|
||||||
The 32-bit SIOCGSTAMP has been deprecated. Use the deprecated name
|
|
||||||
to fix the build.
|
|
||||||
|
|
||||||
Upstream-Status: backport commit f36f71f60b1e68c0f12e615b9b128d089ec3dd19
|
|
||||||
|
|
||||||
Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
|
|
||||||
|
|
||||||
---
|
|
||||||
tools/l2test.c | 6 +++++-
|
|
||||||
tools/rctest.c | 6 +++++-
|
|
||||||
2 files changed, 10 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/tools/l2test.c b/tools/l2test.c
|
|
||||||
index e755ac881..e787c2ce2 100644
|
|
||||||
--- a/tools/l2test.c
|
|
||||||
+++ b/tools/l2test.c
|
|
||||||
@@ -55,6 +55,10 @@
|
|
||||||
#define BREDR_DEFAULT_PSM 0x1011
|
|
||||||
#define LE_DEFAULT_PSM 0x0080
|
|
||||||
|
|
||||||
+#ifndef SIOCGSTAMP_OLD
|
|
||||||
+#define SIOCGSTAMP_OLD SIOCGSTAMP
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/* Test modes */
|
|
||||||
enum {
|
|
||||||
SEND,
|
|
||||||
@@ -907,7 +911,7 @@ static void recv_mode(int sk)
|
|
||||||
if (timestamp) {
|
|
||||||
struct timeval tv;
|
|
||||||
|
|
||||||
- if (ioctl(sk, SIOCGSTAMP, &tv) < 0) {
|
|
||||||
+ if (ioctl(sk, SIOCGSTAMP_OLD, &tv) < 0) {
|
|
||||||
timestamp = 0;
|
|
||||||
memset(ts, 0, sizeof(ts));
|
|
||||||
} else {
|
|
||||||
diff --git a/tools/rctest.c b/tools/rctest.c
|
|
||||||
index 94490f462..bc8ed875d 100644
|
|
||||||
--- a/tools/rctest.c
|
|
||||||
+++ b/tools/rctest.c
|
|
||||||
@@ -50,6 +50,10 @@
|
|
||||||
|
|
||||||
#include "src/shared/util.h"
|
|
||||||
|
|
||||||
+#ifndef SIOCGSTAMP_OLD
|
|
||||||
+#define SIOCGSTAMP_OLD SIOCGSTAMP
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/* Test modes */
|
|
||||||
enum {
|
|
||||||
SEND,
|
|
||||||
@@ -505,7 +509,7 @@ static void recv_mode(int sk)
|
|
||||||
if (timestamp) {
|
|
||||||
struct timeval tv;
|
|
||||||
|
|
||||||
- if (ioctl(sk, SIOCGSTAMP, &tv) < 0) {
|
|
||||||
+ if (ioctl(sk, SIOCGSTAMP_OLD, &tv) < 0) {
|
|
||||||
timestamp = 0;
|
|
||||||
memset(ts, 0, sizeof(ts));
|
|
||||||
} else {
|
|
||||||
--
|
|
||||||
2.19.1
|
|
||||||
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
From 0b1766514f6847c7367fce07f19a750ec74c11a6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Robert Yang <liezhi.yang@windriver.com>
|
|
||||||
Date: Thu, 26 Sep 2019 16:19:34 +0800
|
|
||||||
Subject: [PATCH] tools/btpclient.c: include signal.h
|
|
||||||
|
|
||||||
Fix compile failure when configure --enable-btpclient:
|
|
||||||
btpclient.c:2834:7: error: 'SIGINT' undeclared (first use in this function)
|
|
||||||
|
|
||||||
Upstream-Status: Backport [A subset of the full fix that went upstream]
|
|
||||||
|
|
||||||
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
|
|
||||||
---
|
|
||||||
tools/btpclient.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/tools/btpclient.c b/tools/btpclient.c
|
|
||||||
index b217df5..aece7fe 100644
|
|
||||||
--- a/tools/btpclient.c
|
|
||||||
+++ b/tools/btpclient.c
|
|
||||||
@@ -29,6 +29,7 @@
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <getopt.h>
|
|
||||||
+#include <signal.h>
|
|
||||||
|
|
||||||
#include <ell/ell.h>
|
|
||||||
|
|
||||||
--
|
|
||||||
2.7.4
|
|
||||||
|
|
||||||
@@ -1,505 +0,0 @@
|
|||||||
From 977321f2c7f974ea68a3d90df296c66189a3f254 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lei Maohui <leimaohui@cn.fujitsu.com>
|
|
||||||
Date: Fri, 21 Jun 2019 17:57:35 +0900
|
|
||||||
Subject: [PATCH] CVE-2018-10910
|
|
||||||
|
|
||||||
A bug in Bluez may allow for the Bluetooth Discoverable state being set to on
|
|
||||||
when no Bluetooth agent is registered with the system. This situation could
|
|
||||||
lead to the unauthorized pairing of certain Bluetooth devices without any
|
|
||||||
form of authentication.
|
|
||||||
|
|
||||||
CVE: CVE-2018-10910
|
|
||||||
Upstream-Status: Backport
|
|
||||||
Signed-off-by: Ross Burton <ross.burton@intel.com>
|
|
||||||
|
|
||||||
Subject: [PATCH BlueZ 1/4] client: Add discoverable-timeout command
|
|
||||||
From: Luiz Augusto von Dentz <luiz.dentz () gmail ! com>
|
|
||||||
Date: 2018-07-25 10:20:32
|
|
||||||
Message-ID: 20180725102035.19439-1-luiz.dentz () gmail ! com
|
|
||||||
[Download RAW message or body]
|
|
||||||
|
|
||||||
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
|
|
||||||
|
|
||||||
This adds discoverable-timeout command which can be used to get/set
|
|
||||||
DiscoverableTimeout property:
|
|
||||||
|
|
||||||
[bluetooth]# discoverable-timeout 180
|
|
||||||
Changing discoverable-timeout 180 succeeded
|
|
||||||
---
|
|
||||||
client/main.c | 82 +++++++++++++++++++++++++++++++++-
|
|
||||||
doc/adapter-api.txt | 6 +++
|
|
||||||
src/adapter.c | 125 ++++++++++++++++++++++++++++++++++++++++++++++------
|
|
||||||
3 files changed, 198 insertions(+), 15 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/client/main.c b/client/main.c
|
|
||||||
index 87323d8..1a66a3a 100644
|
|
||||||
--- a/client/main.c
|
|
||||||
+++ b/client/main.c
|
|
||||||
@@ -877,6 +877,7 @@ static void cmd_show(int argc, char *argv[])
|
|
||||||
print_property(proxy, "Class");
|
|
||||||
print_property(proxy, "Powered");
|
|
||||||
print_property(proxy, "Discoverable");
|
|
||||||
+ print_property(proxy, "DiscoverableTimeout");
|
|
||||||
print_property(proxy, "Pairable");
|
|
||||||
print_uuids(proxy);
|
|
||||||
print_property(proxy, "Modalias");
|
|
||||||
@@ -1061,6 +1062,47 @@ static void cmd_discoverable(int argc, char *argv[])
|
|
||||||
return bt_shell_noninteractive_quit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void cmd_discoverable_timeout(int argc, char *argv[])
|
|
||||||
+{
|
|
||||||
+ uint32_t value;
|
|
||||||
+ char *endptr = NULL;
|
|
||||||
+ char *str;
|
|
||||||
+
|
|
||||||
+ if (argc < 2) {
|
|
||||||
+ DBusMessageIter iter;
|
|
||||||
+
|
|
||||||
+ if (!g_dbus_proxy_get_property(default_ctrl->proxy,
|
|
||||||
+ "DiscoverableTimeout", &iter)) {
|
|
||||||
+ bt_shell_printf("Unable to get DiscoverableTimeout\n");
|
|
||||||
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ dbus_message_iter_get_basic(&iter, &value);
|
|
||||||
+
|
|
||||||
+ bt_shell_printf("DiscoverableTimeout: %d seconds\n", value);
|
|
||||||
+
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ value = strtol(argv[1], &endptr, 0);
|
|
||||||
+ if (!endptr || *endptr != '\0' || value > UINT32_MAX) {
|
|
||||||
+ bt_shell_printf("Invalid argument\n");
|
|
||||||
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ str = g_strdup_printf("discoverable-timeout %d", value);
|
|
||||||
+
|
|
||||||
+ if (g_dbus_proxy_set_property_basic(default_ctrl->proxy,
|
|
||||||
+ "DiscoverableTimeout",
|
|
||||||
+ DBUS_TYPE_UINT32, &value,
|
|
||||||
+ generic_callback, str, g_free))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ g_free(str);
|
|
||||||
+
|
|
||||||
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void cmd_agent(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
dbus_bool_t enable;
|
|
||||||
@@ -1124,6 +1166,7 @@ static struct set_discovery_filter_args {
|
|
||||||
char **uuids;
|
|
||||||
size_t uuids_len;
|
|
||||||
dbus_bool_t duplicate;
|
|
||||||
+ dbus_bool_t discoverable;
|
|
||||||
bool set;
|
|
||||||
} filter = {
|
|
||||||
.rssi = DISTANCE_VAL_INVALID,
|
|
||||||
@@ -1163,6 +1206,11 @@ static void set_discovery_filter_setup(DBusMessageIter *iter, void *user_data)
|
|
||||||
DBUS_TYPE_BOOLEAN,
|
|
||||||
&args->duplicate);
|
|
||||||
|
|
||||||
+ if (args->discoverable)
|
|
||||||
+ g_dbus_dict_append_entry(&dict, "Discoverable",
|
|
||||||
+ DBUS_TYPE_BOOLEAN,
|
|
||||||
+ &args->discoverable);
|
|
||||||
+
|
|
||||||
dbus_message_iter_close_container(iter, &dict);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1320,6 +1368,26 @@ static void cmd_scan_filter_duplicate_data(int argc, char *argv[])
|
|
||||||
filter.set = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void cmd_scan_filter_discoverable(int argc, char *argv[])
|
|
||||||
+{
|
|
||||||
+ if (argc < 2 || !strlen(argv[1])) {
|
|
||||||
+ bt_shell_printf("Discoverable: %s\n",
|
|
||||||
+ filter.discoverable ? "on" : "off");
|
|
||||||
+ return bt_shell_noninteractive_quit(EXIT_SUCCESS);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!strcmp(argv[1], "on"))
|
|
||||||
+ filter.discoverable = true;
|
|
||||||
+ else if (!strcmp(argv[1], "off"))
|
|
||||||
+ filter.discoverable = false;
|
|
||||||
+ else {
|
|
||||||
+ bt_shell_printf("Invalid option: %s\n", argv[1]);
|
|
||||||
+ return bt_shell_noninteractive_quit(EXIT_FAILURE);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ filter.set = false;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void filter_clear_uuids(void)
|
|
||||||
{
|
|
||||||
g_strfreev(filter.uuids);
|
|
||||||
@@ -1348,6 +1416,11 @@ static void filter_clear_duplicate(void)
|
|
||||||
filter.duplicate = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void filter_clear_discoverable(void)
|
|
||||||
+{
|
|
||||||
+ filter.discoverable = false;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
struct clear_entry {
|
|
||||||
const char *name;
|
|
||||||
void (*clear) (void);
|
|
||||||
@@ -1359,6 +1432,7 @@ static const struct clear_entry filter_clear[] = {
|
|
||||||
{ "pathloss", filter_clear_pathloss },
|
|
||||||
{ "transport", filter_clear_transport },
|
|
||||||
{ "duplicate-data", filter_clear_duplicate },
|
|
||||||
+ { "discoverable", filter_clear_discoverable },
|
|
||||||
{}
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -2468,7 +2542,11 @@ static const struct bt_shell_menu scan_menu = {
|
|
||||||
{ "duplicate-data", "[on/off]", cmd_scan_filter_duplicate_data,
|
|
||||||
"Set/Get duplicate data filter",
|
|
||||||
NULL },
|
|
||||||
- { "clear", "[uuids/rssi/pathloss/transport/duplicate-data]",
|
|
||||||
+ { "discoverable", "[on/off]", cmd_scan_filter_discoverable,
|
|
||||||
+ "Set/Get discoverable filter",
|
|
||||||
+ NULL },
|
|
||||||
+ { "clear",
|
|
||||||
+ "[uuids/rssi/pathloss/transport/duplicate-data/discoverable]",
|
|
||||||
cmd_scan_filter_clear,
|
|
||||||
"Clears discovery filter.",
|
|
||||||
filter_clear_generator },
|
|
||||||
@@ -2549,6 +2627,8 @@ static const struct bt_shell_menu main_menu = {
|
|
||||||
{ "discoverable", "<on/off>", cmd_discoverable,
|
|
||||||
"Set controller discoverable mode",
|
|
||||||
NULL },
|
|
||||||
+ { "discoverable-timeout", "[value]", cmd_discoverable_timeout,
|
|
||||||
+ "Set discoverable timeout", NULL },
|
|
||||||
{ "agent", "<on/off/capability>", cmd_agent,
|
|
||||||
"Enable/disable agent with given capability",
|
|
||||||
capability_generator},
|
|
||||||
diff --git a/doc/adapter-api.txt b/doc/adapter-api.txt
|
|
||||||
index d14d0ca..4791af2 100644
|
|
||||||
--- a/doc/adapter-api.txt
|
|
||||||
+++ b/doc/adapter-api.txt
|
|
||||||
@@ -113,6 +113,12 @@ Methods void StartDiscovery()
|
|
||||||
generated for either ManufacturerData and
|
|
||||||
ServiceData everytime they are discovered.
|
|
||||||
|
|
||||||
+ bool Discoverable (Default: false)
|
|
||||||
+
|
|
||||||
+ Make adapter discoverable while discovering,
|
|
||||||
+ if the adapter is already discoverable this
|
|
||||||
+ setting this filter won't do anything.
|
|
||||||
+
|
|
||||||
When discovery filter is set, Device objects will be
|
|
||||||
created as new devices with matching criteria are
|
|
||||||
discovered regardless of they are connectable or
|
|
||||||
diff --git a/src/adapter.c b/src/adapter.c
|
|
||||||
index af340fd..822bd34 100644
|
|
||||||
--- a/src/adapter.c
|
|
||||||
+++ b/src/adapter.c
|
|
||||||
@@ -157,6 +157,7 @@ struct discovery_filter {
|
|
||||||
int16_t rssi;
|
|
||||||
GSList *uuids;
|
|
||||||
bool duplicate;
|
|
||||||
+ bool discoverable;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct watch_client {
|
|
||||||
@@ -196,6 +197,7 @@ struct btd_adapter {
|
|
||||||
char *name; /* controller device name */
|
|
||||||
char *short_name; /* controller short name */
|
|
||||||
uint32_t supported_settings; /* controller supported settings */
|
|
||||||
+ uint32_t pending_settings; /* pending controller settings */
|
|
||||||
uint32_t current_settings; /* current controller settings */
|
|
||||||
|
|
||||||
char *path; /* adapter object path */
|
|
||||||
@@ -213,6 +215,7 @@ struct btd_adapter {
|
|
||||||
|
|
||||||
bool discovering; /* discovering property state */
|
|
||||||
bool filtered_discovery; /* we are doing filtered discovery */
|
|
||||||
+ bool filtered_discoverable; /* we are doing filtered discovery */
|
|
||||||
bool no_scan_restart_delay; /* when this flag is set, restart scan
|
|
||||||
* without delay */
|
|
||||||
uint8_t discovery_type; /* current active discovery type */
|
|
||||||
@@ -509,8 +512,10 @@ static void settings_changed(struct btd_adapter *adapter, uint32_t settings)
|
|
||||||
changed_mask = adapter->current_settings ^ settings;
|
|
||||||
|
|
||||||
adapter->current_settings = settings;
|
|
||||||
+ adapter->pending_settings &= ~changed_mask;
|
|
||||||
|
|
||||||
DBG("Changed settings: 0x%08x", changed_mask);
|
|
||||||
+ DBG("Pending settings: 0x%08x", adapter->pending_settings);
|
|
||||||
|
|
||||||
if (changed_mask & MGMT_SETTING_POWERED) {
|
|
||||||
g_dbus_emit_property_changed(dbus_conn, adapter->path,
|
|
||||||
@@ -596,10 +601,31 @@ static bool set_mode(struct btd_adapter *adapter, uint16_t opcode,
|
|
||||||
uint8_t mode)
|
|
||||||
{
|
|
||||||
struct mgmt_mode cp;
|
|
||||||
+ uint32_t setting = 0;
|
|
||||||
|
|
||||||
memset(&cp, 0, sizeof(cp));
|
|
||||||
cp.val = mode;
|
|
||||||
|
|
||||||
+ switch (mode) {
|
|
||||||
+ case MGMT_OP_SET_POWERED:
|
|
||||||
+ setting = MGMT_SETTING_POWERED;
|
|
||||||
+ break;
|
|
||||||
+ case MGMT_OP_SET_CONNECTABLE:
|
|
||||||
+ setting = MGMT_SETTING_CONNECTABLE;
|
|
||||||
+ break;
|
|
||||||
+ case MGMT_OP_SET_FAST_CONNECTABLE:
|
|
||||||
+ setting = MGMT_SETTING_FAST_CONNECTABLE;
|
|
||||||
+ break;
|
|
||||||
+ case MGMT_OP_SET_DISCOVERABLE:
|
|
||||||
+ setting = MGMT_SETTING_DISCOVERABLE;
|
|
||||||
+ break;
|
|
||||||
+ case MGMT_OP_SET_BONDABLE:
|
|
||||||
+ setting = MGMT_SETTING_DISCOVERABLE;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ adapter->pending_settings |= setting;
|
|
||||||
+
|
|
||||||
DBG("sending set mode command for index %u", adapter->dev_id);
|
|
||||||
|
|
||||||
if (mgmt_send(adapter->mgmt, opcode,
|
|
||||||
@@ -1818,7 +1844,17 @@ static void discovery_free(void *user_data)
|
|
||||||
g_free(client);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void discovery_remove(struct watch_client *client)
|
|
||||||
+static bool set_filtered_discoverable(struct btd_adapter *adapter, bool enable)
|
|
||||||
+{
|
|
||||||
+ if (adapter->filtered_discoverable == enable)
|
|
||||||
+ return true;
|
|
||||||
+
|
|
||||||
+ adapter->filtered_discoverable = enable;
|
|
||||||
+
|
|
||||||
+ return set_discoverable(adapter, enable, 0);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void discovery_remove(struct watch_client *client, bool exit)
|
|
||||||
{
|
|
||||||
struct btd_adapter *adapter = client->adapter;
|
|
||||||
|
|
||||||
@@ -1830,7 +1866,27 @@ static void discovery_remove(struct watch_client *client)
|
|
||||||
adapter->discovery_list = g_slist_remove(adapter->discovery_list,
|
|
||||||
client);
|
|
||||||
|
|
||||||
- discovery_free(client);
|
|
||||||
+ if (adapter->filtered_discoverable &&
|
|
||||||
+ client->discovery_filter->discoverable) {
|
|
||||||
+ GSList *l;
|
|
||||||
+
|
|
||||||
+ for (l = adapter->discovery_list; l; l = g_slist_next(l)) {
|
|
||||||
+ struct watch_client *client = l->data;
|
|
||||||
+
|
|
||||||
+ if (client->discovery_filter->discoverable)
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Disable filtered discoverable if there are no clients */
|
|
||||||
+ if (!l)
|
|
||||||
+ set_filtered_discoverable(adapter, false);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!exit && client->discovery_filter)
|
|
||||||
+ adapter->set_filter_list = g_slist_prepend(
|
|
||||||
+ adapter->set_filter_list, client);
|
|
||||||
+ else
|
|
||||||
+ discovery_free(client);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If there are other client discoveries in progress, then leave
|
|
||||||
@@ -1859,8 +1915,11 @@ static void stop_discovery_complete(uint8_t status, uint16_t length,
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (client->msg)
|
|
||||||
+ if (client->msg) {
|
|
||||||
g_dbus_send_reply(dbus_conn, client->msg, DBUS_TYPE_INVALID);
|
|
||||||
+ dbus_message_unref(client->msg);
|
|
||||||
+ client->msg = NULL;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
adapter->discovery_type = 0x00;
|
|
||||||
adapter->discovery_enable = 0x00;
|
|
||||||
@@ -1873,7 +1932,7 @@ static void stop_discovery_complete(uint8_t status, uint16_t length,
|
|
||||||
trigger_passive_scanning(adapter);
|
|
||||||
|
|
||||||
done:
|
|
||||||
- discovery_remove(client);
|
|
||||||
+ discovery_remove(client, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int compare_sender(gconstpointer a, gconstpointer b)
|
|
||||||
@@ -2094,14 +2153,14 @@ static int update_discovery_filter(struct btd_adapter *adapter)
|
|
||||||
return -EINPROGRESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int discovery_stop(struct watch_client *client)
|
|
||||||
+static int discovery_stop(struct watch_client *client, bool exit)
|
|
||||||
{
|
|
||||||
struct btd_adapter *adapter = client->adapter;
|
|
||||||
struct mgmt_cp_stop_discovery cp;
|
|
||||||
|
|
||||||
/* Check if there are more client discovering */
|
|
||||||
if (g_slist_next(adapter->discovery_list)) {
|
|
||||||
- discovery_remove(client);
|
|
||||||
+ discovery_remove(client, exit);
|
|
||||||
update_discovery_filter(adapter);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -2111,7 +2170,7 @@ static int discovery_stop(struct watch_client *client)
|
|
||||||
* and so it is enough to send out the signal and just return.
|
|
||||||
*/
|
|
||||||
if (adapter->discovery_enable == 0x00) {
|
|
||||||
- discovery_remove(client);
|
|
||||||
+ discovery_remove(client, exit);
|
|
||||||
adapter->discovering = false;
|
|
||||||
g_dbus_emit_property_changed(dbus_conn, adapter->path,
|
|
||||||
ADAPTER_INTERFACE, "Discovering");
|
|
||||||
@@ -2136,7 +2195,7 @@ static void discovery_disconnect(DBusConnection *conn, void *user_data)
|
|
||||||
|
|
||||||
DBG("owner %s", client->owner);
|
|
||||||
|
|
||||||
- discovery_stop(client);
|
|
||||||
+ discovery_stop(client, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -2200,6 +2259,15 @@ static DBusMessage *start_discovery(DBusConnection *conn,
|
|
||||||
adapter->set_filter_list, client);
|
|
||||||
adapter->discovery_list = g_slist_prepend(
|
|
||||||
adapter->discovery_list, client);
|
|
||||||
+
|
|
||||||
+ /* Reset discoverable filter if already set */
|
|
||||||
+ if (adapter->current_settings & MGMT_OP_SET_DISCOVERABLE)
|
|
||||||
+ goto done;
|
|
||||||
+
|
|
||||||
+ /* Set discoverable if filter requires and it*/
|
|
||||||
+ if (client->discovery_filter->discoverable)
|
|
||||||
+ set_filtered_discoverable(adapter, true);
|
|
||||||
+
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -2324,6 +2392,17 @@ static bool parse_duplicate_data(DBusMessageIter *value,
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static bool parse_discoverable(DBusMessageIter *value,
|
|
||||||
+ struct discovery_filter *filter)
|
|
||||||
+{
|
|
||||||
+ if (dbus_message_iter_get_arg_type(value) != DBUS_TYPE_BOOLEAN)
|
|
||||||
+ return false;
|
|
||||||
+
|
|
||||||
+ dbus_message_iter_get_basic(value, &filter->discoverable);
|
|
||||||
+
|
|
||||||
+ return true;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
struct filter_parser {
|
|
||||||
const char *name;
|
|
||||||
bool (*func)(DBusMessageIter *iter, struct discovery_filter *filter);
|
|
||||||
@@ -2333,6 +2412,7 @@ struct filter_parser {
|
|
||||||
{ "Pathloss", parse_pathloss },
|
|
||||||
{ "Transport", parse_transport },
|
|
||||||
{ "DuplicateData", parse_duplicate_data },
|
|
||||||
+ { "Discoverable", parse_discoverable },
|
|
||||||
{ }
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -2372,6 +2452,7 @@ static bool parse_discovery_filter_dict(struct btd_adapter *adapter,
|
|
||||||
(*filter)->rssi = DISTANCE_VAL_INVALID;
|
|
||||||
(*filter)->type = get_scan_type(adapter);
|
|
||||||
(*filter)->duplicate = false;
|
|
||||||
+ (*filter)->discoverable = false;
|
|
||||||
|
|
||||||
dbus_message_iter_init(msg, &iter);
|
|
||||||
if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
|
|
||||||
@@ -2417,8 +2498,10 @@ static bool parse_discovery_filter_dict(struct btd_adapter *adapter,
|
|
||||||
goto invalid_args;
|
|
||||||
|
|
||||||
DBG("filtered discovery params: transport: %d rssi: %d pathloss: %d "
|
|
||||||
- " duplicate data: %s ", (*filter)->type, (*filter)->rssi,
|
|
||||||
- (*filter)->pathloss, (*filter)->duplicate ? "true" : "false");
|
|
||||||
+ " duplicate data: %s discoverable %s", (*filter)->type,
|
|
||||||
+ (*filter)->rssi, (*filter)->pathloss,
|
|
||||||
+ (*filter)->duplicate ? "true" : "false",
|
|
||||||
+ (*filter)->discoverable ? "true" : "false");
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
@@ -2510,7 +2593,7 @@ static DBusMessage *stop_discovery(DBusConnection *conn,
|
|
||||||
if (client->msg)
|
|
||||||
return btd_error_busy(msg);
|
|
||||||
|
|
||||||
- err = discovery_stop(client);
|
|
||||||
+ err = discovery_stop(client, false);
|
|
||||||
switch (err) {
|
|
||||||
case 0:
|
|
||||||
return dbus_message_new_method_return(msg);
|
|
||||||
@@ -2739,13 +2822,15 @@ static void property_set_mode(struct btd_adapter *adapter, uint32_t setting,
|
|
||||||
else
|
|
||||||
current_enable = FALSE;
|
|
||||||
|
|
||||||
- if (enable == current_enable) {
|
|
||||||
+ if (enable == current_enable || adapter->pending_settings & setting) {
|
|
||||||
g_dbus_pending_property_success(id);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
mode = (enable == TRUE) ? 0x01 : 0x00;
|
|
||||||
|
|
||||||
+ adapter->pending_settings |= setting;
|
|
||||||
+
|
|
||||||
switch (setting) {
|
|
||||||
case MGMT_SETTING_POWERED:
|
|
||||||
opcode = MGMT_OP_SET_POWERED;
|
|
||||||
@@ -2798,7 +2883,7 @@ static void property_set_mode(struct btd_adapter *adapter, uint32_t setting,
|
|
||||||
data->id = id;
|
|
||||||
|
|
||||||
if (mgmt_send(adapter->mgmt, opcode, adapter->dev_id, len, param,
|
|
||||||
- property_set_mode_complete, data, g_free) > 0)
|
|
||||||
+ property_set_mode_complete, data, g_free) > 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
g_free(data);
|
|
||||||
@@ -2875,6 +2960,7 @@ static void property_set_discoverable_timeout(
|
|
||||||
GDBusPendingPropertySet id, void *user_data)
|
|
||||||
{
|
|
||||||
struct btd_adapter *adapter = user_data;
|
|
||||||
+ bool enabled;
|
|
||||||
dbus_uint32_t value;
|
|
||||||
|
|
||||||
dbus_message_iter_get_basic(iter, &value);
|
|
||||||
@@ -2888,8 +2974,19 @@ static void property_set_discoverable_timeout(
|
|
||||||
g_dbus_emit_property_changed(dbus_conn, adapter->path,
|
|
||||||
ADAPTER_INTERFACE, "DiscoverableTimeout");
|
|
||||||
|
|
||||||
+ if (adapter->pending_settings & MGMT_SETTING_DISCOVERABLE) {
|
|
||||||
+ if (adapter->current_settings & MGMT_SETTING_DISCOVERABLE)
|
|
||||||
+ enabled = false;
|
|
||||||
+ else
|
|
||||||
+ enabled = true;
|
|
||||||
+ } else {
|
|
||||||
+ if (adapter->current_settings & MGMT_SETTING_DISCOVERABLE)
|
|
||||||
+ enabled = true;
|
|
||||||
+ else
|
|
||||||
+ enabled = false;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (adapter->current_settings & MGMT_SETTING_DISCOVERABLE)
|
|
||||||
+ if (enabled)
|
|
||||||
set_discoverable(adapter, 0x01, adapter->discoverable_timeout);
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.7.4
|
|
||||||
|
|
||||||
@@ -1,301 +0,0 @@
|
|||||||
Backported commit from upstream master branch (post 5.50 release), which
|
|
||||||
resolves assertion failures in several unit tests.
|
|
||||||
|
|
||||||
https://git.kernel.org/pub/scm/bluetooth/bluez.git/patch/?id=0be5246170
|
|
||||||
|
|
||||||
Upstream-Status: Backport
|
|
||||||
Signed-off-by: Ross Burton <ross.burton@intel.com>
|
|
||||||
|
|
||||||
diff --git a/unit/test-avctp.c b/unit/test-avctp.c
|
|
||||||
index 3bc3569..24de663 100644
|
|
||||||
--- a/unit/test-avctp.c
|
|
||||||
+++ b/unit/test-avctp.c
|
|
||||||
@@ -43,7 +43,7 @@
|
|
||||||
|
|
||||||
struct test_pdu {
|
|
||||||
bool valid;
|
|
||||||
- const uint8_t *data;
|
|
||||||
+ uint8_t *data;
|
|
||||||
size_t size;
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ struct context {
|
|
||||||
#define raw_pdu(args...) \
|
|
||||||
{ \
|
|
||||||
.valid = true, \
|
|
||||||
- .data = data(args), \
|
|
||||||
+ .data = g_memdup(data(args), sizeof(data(args))), \
|
|
||||||
.size = sizeof(data(args)), \
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -91,6 +91,11 @@ static void test_debug(const char *str, void *user_data)
|
|
||||||
static void test_free(gconstpointer user_data)
|
|
||||||
{
|
|
||||||
const struct test_data *data = user_data;
|
|
||||||
+ struct test_pdu *pdu;
|
|
||||||
+ int i;
|
|
||||||
+
|
|
||||||
+ for (i = 0; (pdu = &data->pdu_list[i]) && pdu->valid; i++)
|
|
||||||
+ g_free(pdu->data);
|
|
||||||
|
|
||||||
g_free(data->test_name);
|
|
||||||
g_free(data->pdu_list);
|
|
||||||
diff --git a/unit/test-avdtp.c b/unit/test-avdtp.c
|
|
||||||
index dd8aed7..e2c951a 100644
|
|
||||||
--- a/unit/test-avdtp.c
|
|
||||||
+++ b/unit/test-avdtp.c
|
|
||||||
@@ -47,7 +47,7 @@
|
|
||||||
struct test_pdu {
|
|
||||||
bool valid;
|
|
||||||
bool fragmented;
|
|
||||||
- const uint8_t *data;
|
|
||||||
+ uint8_t *data;
|
|
||||||
size_t size;
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -61,7 +61,7 @@ struct test_data {
|
|
||||||
#define raw_pdu(args...) \
|
|
||||||
{ \
|
|
||||||
.valid = true, \
|
|
||||||
- .data = data(args), \
|
|
||||||
+ .data = g_memdup(data(args), sizeof(data(args))), \
|
|
||||||
.size = sizeof(data(args)), \
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ struct test_data {
|
|
||||||
{ \
|
|
||||||
.valid = true, \
|
|
||||||
.fragmented = true, \
|
|
||||||
- .data = data(args), \
|
|
||||||
+ .data = g_memdup(data(args), sizeof(data(args))), \
|
|
||||||
.size = sizeof(data(args)), \
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ struct test_data {
|
|
||||||
static struct test_data data; \
|
|
||||||
data.test_name = g_strdup(name); \
|
|
||||||
data.pdu_list = g_memdup(pdus, sizeof(pdus)); \
|
|
||||||
- tester_add(name, &data, NULL, function, NULL); \
|
|
||||||
+ tester_add(name, &data, NULL, function, NULL); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
struct context {
|
|
||||||
@@ -109,6 +109,11 @@ static void test_debug(const char *str, void *user_data)
|
|
||||||
static void test_free(gconstpointer user_data)
|
|
||||||
{
|
|
||||||
const struct test_data *data = user_data;
|
|
||||||
+ struct test_pdu *pdu;
|
|
||||||
+ int i;
|
|
||||||
+
|
|
||||||
+ for (i = 0; (pdu = &data->pdu_list[i]) && pdu->valid; i++)
|
|
||||||
+ g_free(pdu->data);
|
|
||||||
|
|
||||||
g_free(data->test_name);
|
|
||||||
g_free(data->pdu_list);
|
|
||||||
diff --git a/unit/test-avrcp.c b/unit/test-avrcp.c
|
|
||||||
index 01307e6..f1aa353 100644
|
|
||||||
--- a/unit/test-avrcp.c
|
|
||||||
+++ b/unit/test-avrcp.c
|
|
||||||
@@ -49,7 +49,7 @@ struct test_pdu {
|
|
||||||
bool fragmented;
|
|
||||||
bool continuing;
|
|
||||||
bool browse;
|
|
||||||
- const uint8_t *data;
|
|
||||||
+ uint8_t *data;
|
|
||||||
size_t size;
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ struct context {
|
|
||||||
#define raw_pdu(args...) \
|
|
||||||
{ \
|
|
||||||
.valid = true, \
|
|
||||||
- .data = data(args), \
|
|
||||||
+ .data = g_memdup(data(args), sizeof(data(args))), \
|
|
||||||
.size = sizeof(data(args)), \
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -82,7 +82,7 @@ struct context {
|
|
||||||
{ \
|
|
||||||
.valid = true, \
|
|
||||||
.browse = true, \
|
|
||||||
- .data = data(args), \
|
|
||||||
+ .data = g_memdup(data(args), sizeof(data(args))), \
|
|
||||||
.size = sizeof(data(args)), \
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ struct context {
|
|
||||||
{ \
|
|
||||||
.valid = true, \
|
|
||||||
.fragmented = true, \
|
|
||||||
- .data = data(args), \
|
|
||||||
+ .data = g_memdup(data(args), sizeof(data(args))), \
|
|
||||||
.size = sizeof(data(args)), \
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ struct context {
|
|
||||||
{ \
|
|
||||||
.valid = true, \
|
|
||||||
.continuing = true, \
|
|
||||||
- .data = data(args), \
|
|
||||||
+ .data = g_memdup(data(args), sizeof(data(args))), \
|
|
||||||
.size = sizeof(data(args)), \
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -123,6 +123,11 @@ static void test_debug(const char *str, void *user_data)
|
|
||||||
static void test_free(gconstpointer user_data)
|
|
||||||
{
|
|
||||||
const struct test_data *data = user_data;
|
|
||||||
+ struct test_pdu *pdu;
|
|
||||||
+ int i;
|
|
||||||
+
|
|
||||||
+ for (i = 0; (pdu = &data->pdu_list[i]) && pdu->valid; i++)
|
|
||||||
+ g_free(pdu->data);
|
|
||||||
|
|
||||||
g_free(data->test_name);
|
|
||||||
g_free(data->pdu_list);
|
|
||||||
diff --git a/unit/test-gatt.c b/unit/test-gatt.c
|
|
||||||
index c7e28f8..d49f7a0 100644
|
|
||||||
--- a/unit/test-gatt.c
|
|
||||||
+++ b/unit/test-gatt.c
|
|
||||||
@@ -48,7 +48,7 @@
|
|
||||||
|
|
||||||
struct test_pdu {
|
|
||||||
bool valid;
|
|
||||||
- const uint8_t *data;
|
|
||||||
+ uint8_t *data;
|
|
||||||
size_t size;
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ struct context {
|
|
||||||
#define raw_pdu(args...) \
|
|
||||||
{ \
|
|
||||||
.valid = true, \
|
|
||||||
- .data = data(args), \
|
|
||||||
+ .data = g_memdup(data(args), sizeof(data(args))), \
|
|
||||||
.size = sizeof(data(args)), \
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -306,6 +306,11 @@ static bt_uuid_t uuid_char_128 = {
|
|
||||||
static void test_free(gconstpointer user_data)
|
|
||||||
{
|
|
||||||
const struct test_data *data = user_data;
|
|
||||||
+ struct test_pdu *pdu;
|
|
||||||
+ int i;
|
|
||||||
+
|
|
||||||
+ for (i = 0; (pdu = &data->pdu_list[i]) && pdu->valid; i++)
|
|
||||||
+ g_free(pdu->data);
|
|
||||||
|
|
||||||
g_free(data->test_name);
|
|
||||||
g_free(data->pdu_list);
|
|
||||||
@@ -1911,6 +1916,8 @@ static void test_server(gconstpointer data)
|
|
||||||
g_assert_cmpint(len, ==, pdu.size);
|
|
||||||
|
|
||||||
util_hexdump('<', pdu.data, len, test_debug, "GATT: ");
|
|
||||||
+
|
|
||||||
+ g_free(pdu.data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void test_search_primary(gconstpointer data)
|
|
||||||
diff --git a/unit/test-hfp.c b/unit/test-hfp.c
|
|
||||||
index f2b9622..890eee6 100644
|
|
||||||
--- a/unit/test-hfp.c
|
|
||||||
+++ b/unit/test-hfp.c
|
|
||||||
@@ -43,7 +43,7 @@ struct context {
|
|
||||||
|
|
||||||
struct test_pdu {
|
|
||||||
bool valid;
|
|
||||||
- const uint8_t *data;
|
|
||||||
+ uint8_t *data;
|
|
||||||
size_t size;
|
|
||||||
enum hfp_gw_cmd_type type;
|
|
||||||
bool fragmented;
|
|
||||||
@@ -63,7 +63,7 @@ struct test_data {
|
|
||||||
#define raw_pdu(args...) \
|
|
||||||
{ \
|
|
||||||
.valid = true, \
|
|
||||||
- .data = data(args), \
|
|
||||||
+ .data = g_memdup(data(args), sizeof(data(args))), \
|
|
||||||
.size = sizeof(data(args)), \
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ struct test_data {
|
|
||||||
#define type_pdu(cmd_type, args...) \
|
|
||||||
{ \
|
|
||||||
.valid = true, \
|
|
||||||
- .data = data(args), \
|
|
||||||
+ .data = g_memdup(data(args), sizeof(data(args))), \
|
|
||||||
.size = sizeof(data(args)), \
|
|
||||||
.type = cmd_type, \
|
|
||||||
}
|
|
||||||
@@ -83,7 +83,7 @@ struct test_data {
|
|
||||||
#define frg_pdu(args...) \
|
|
||||||
{ \
|
|
||||||
.valid = true, \
|
|
||||||
- .data = data(args), \
|
|
||||||
+ .data = g_memdup(data(args), sizeof(data(args))), \
|
|
||||||
.size = sizeof(data(args)), \
|
|
||||||
.fragmented = true, \
|
|
||||||
}
|
|
||||||
@@ -119,6 +119,11 @@ struct test_data {
|
|
||||||
static void test_free(gconstpointer user_data)
|
|
||||||
{
|
|
||||||
const struct test_data *data = user_data;
|
|
||||||
+ struct test_pdu *pdu;
|
|
||||||
+ int i;
|
|
||||||
+
|
|
||||||
+ for (i = 0; (pdu = &data->pdu_list[i]) && pdu->valid; i++)
|
|
||||||
+ g_free(pdu->data);
|
|
||||||
|
|
||||||
g_free(data->test_name);
|
|
||||||
g_free(data->pdu_list);
|
|
||||||
diff --git a/unit/test-hog.c b/unit/test-hog.c
|
|
||||||
index d117968..25bdb42 100644
|
|
||||||
--- a/unit/test-hog.c
|
|
||||||
+++ b/unit/test-hog.c
|
|
||||||
@@ -68,11 +68,11 @@ struct context {
|
|
||||||
|
|
||||||
#define data(args...) ((const unsigned char[]) { args })
|
|
||||||
|
|
||||||
-#define raw_pdu(args...) \
|
|
||||||
-{ \
|
|
||||||
- .valid = true, \
|
|
||||||
- .data = data(args), \
|
|
||||||
- .size = sizeof(data(args)),\
|
|
||||||
+#define raw_pdu(args...) \
|
|
||||||
+{ \
|
|
||||||
+ .valid = true, \
|
|
||||||
+ .data = g_memdup(data(args), sizeof(data(args))), \
|
|
||||||
+ .size = sizeof(data(args)), \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define false_pdu() \
|
|
||||||
diff --git a/unit/test-sdp.c b/unit/test-sdp.c
|
|
||||||
index ac921a9..c71ee1f 100644
|
|
||||||
--- a/unit/test-sdp.c
|
|
||||||
+++ b/unit/test-sdp.c
|
|
||||||
@@ -59,14 +59,14 @@ struct test_data {
|
|
||||||
#define raw_pdu(args...) \
|
|
||||||
{ \
|
|
||||||
.valid = true, \
|
|
||||||
- .raw_data = raw_data(args), \
|
|
||||||
+ .raw_data = g_memdup(raw_data(args), sizeof(raw_data(args))), \
|
|
||||||
.raw_size = sizeof(raw_data(args)), \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define raw_pdu_cont(cont, args...) \
|
|
||||||
{ \
|
|
||||||
.valid = true, \
|
|
||||||
- .raw_data = raw_data(args), \
|
|
||||||
+ .raw_data = g_memdup(raw_data(args), sizeof(raw_data(args))), \
|
|
||||||
.raw_size = sizeof(raw_data(args)), \
|
|
||||||
.cont_len = cont, \
|
|
||||||
}
|
|
||||||
@@ -103,7 +103,7 @@ struct test_data_de {
|
|
||||||
#define define_test_de_attr(name, input, exp) \
|
|
||||||
do { \
|
|
||||||
static struct test_data_de data; \
|
|
||||||
- data.input_data = input; \
|
|
||||||
+ data.input_data = g_memdup(input, sizeof(input)); \
|
|
||||||
data.input_size = sizeof(input); \
|
|
||||||
data.expected = exp; \
|
|
||||||
tester_add("/sdp/DE/ATTR/" name, &data, NULL, \
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
From ed55b49a226ca3909f52416be2ae5ce1c5ca2cb2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ross Burton <ross.burton@intel.com>
|
|
||||||
Date: Fri, 22 Apr 2016 15:40:37 +0100
|
|
||||||
Subject: [PATCH] Makefile.obexd: add missing mkdir in builtin.h generation
|
|
||||||
|
|
||||||
In parallel out-of-tree builds it's possible that obexd/src/builtin.h is
|
|
||||||
generated before the target directory has been implicitly created. Solve this by
|
|
||||||
creating the directory before writing into it.
|
|
||||||
|
|
||||||
Upstream-Status: Backport
|
|
||||||
Signed-off-by: Ross Burton <ross.burton@intel.com>
|
|
||||||
---
|
|
||||||
Makefile.obexd | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/Makefile.obexd b/Makefile.obexd
|
|
||||||
index 2e33cbc..c8286f0 100644
|
|
||||||
--- a/Makefile.obexd
|
|
||||||
+++ b/Makefile.obexd
|
|
||||||
@@ -105,2 +105,3 @@ obexd/src/plugin.$(OBJEXT): obexd/src/builtin.h
|
|
||||||
obexd/src/builtin.h: obexd/src/genbuiltin $(obexd_builtin_sources)
|
|
||||||
+ $(AM_V_at)$(MKDIR_P) $(dir $@)
|
|
||||||
$(AM_V_GEN)$(srcdir)/obexd/src/genbuiltin $(obexd_builtin_modules) > $@
|
|
||||||
--
|
|
||||||
2.8.0.rc3
|
|
||||||
|
|
||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
require bluez5.inc
|
require bluez5.inc
|
||||||
|
|
||||||
SRC_URI[md5sum] = "8e35c67c81a55d3ad4c9f22280dae178"
|
SRC_URI[md5sum] = "a33eb9aadf1dd4153420958709d3ce60"
|
||||||
SRC_URI[sha256sum] = "5ffcaae18bbb6155f1591be8c24898dc12f062075a40b538b745bfd477481911"
|
SRC_URI[sha256sum] = "f7144ce2039202cfac18ccb52426efea11c98e4f6e1bb8041bcb994b8378560a"
|
||||||
|
|
||||||
# noinst programs in Makefile.tools that are conditional on READLINE
|
# noinst programs in Makefile.tools that are conditional on READLINE
|
||||||
# support
|
# support
|
||||||
Reference in New Issue
Block a user