2024-05-20 15:47:16

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ v1 1/3] device: Add btd_device_get_icon

From: Luiz Augusto von Dentz <[email protected]>

This adds btd_device_get_icon which can be used to retriev the icon
string of a device object.
---
src/device.c | 12 +++++-------
src/device.h | 1 +
2 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/device.c b/src/device.c
index 79d8bb7ebc9b..620bbd55ebad 100644
--- a/src/device.c
+++ b/src/device.c
@@ -1052,16 +1052,14 @@ static gboolean dev_property_get_appearance(const GDBusPropertyTable *property,
return TRUE;
}

-static const char *get_icon(const GDBusPropertyTable *property, void *data)
+const char *btd_device_get_icon(struct btd_device *device)
{
- struct btd_device *device = data;
const char *icon = NULL;
- uint16_t appearance;

if (device->class != 0)
icon = class_to_icon(device->class);
- else if (get_appearance(property, data, &appearance))
- icon = gap_appearance_to_icon(appearance);
+ else if (device->appearance != 0)
+ icon = gap_appearance_to_icon(device->appearance);

return icon;
}
@@ -1069,7 +1067,7 @@ static const char *get_icon(const GDBusPropertyTable *property, void *data)
static gboolean dev_property_exists_icon(
const GDBusPropertyTable *property, void *data)
{
- return get_icon(property, data) != NULL;
+ return btd_device_get_icon(data) != NULL;
}

static gboolean dev_property_get_icon(const GDBusPropertyTable *property,
@@ -1077,7 +1075,7 @@ static gboolean dev_property_get_icon(const GDBusPropertyTable *property,
{
const char *icon;

- icon = get_icon(property, data);
+ icon = btd_device_get_icon(data);
if (icon == NULL)
return FALSE;

diff --git a/src/device.h b/src/device.h
index 1a9f7e72a00f..a2b7bb15d200 100644
--- a/src/device.h
+++ b/src/device.h
@@ -41,6 +41,7 @@ uint16_t btd_device_get_vendor(struct btd_device *device);
uint16_t btd_device_get_vendor_src(struct btd_device *device);
uint16_t btd_device_get_product(struct btd_device *device);
uint16_t btd_device_get_version(struct btd_device *device);
+const char *btd_device_get_icon(struct btd_device *device);
void device_remove_bonding(struct btd_device *device, uint8_t bdaddr_type);
void device_remove(struct btd_device *device, gboolean remove_stored);
int device_address_cmp(gconstpointer a, gconstpointer b);
--
2.45.1



2024-05-20 15:47:21

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ v1 3/3] shared/uhid: Add special handling for non-keyboards

From: Luiz Augusto von Dentz <[email protected]>

This adds special handling for non-keyboards so they are destroyed when
disconnected rather than keeping their device node around.

Fixes: https://github.com/bluez/bluez/issues/848
---
profiles/input/device.c | 20 +++++++++++--------
profiles/input/hog-lib.c | 43 +++++++++++++++++++++++-----------------
profiles/input/hog-lib.h | 4 ++--
profiles/input/hog.c | 6 ++++--
src/shared/uhid.c | 17 ++++++++++++----
src/shared/uhid.h | 31 ++++++++++++++++++++++++++---
6 files changed, 84 insertions(+), 37 deletions(-)

diff --git a/profiles/input/device.c b/profiles/input/device.c
index 2145c2da20f0..b162c0bc7572 100644
--- a/profiles/input/device.c
+++ b/profiles/input/device.c
@@ -84,6 +84,7 @@ struct input_device {
unsigned int report_req_timer;
uint32_t report_rsp_id;
bool virtual_cable_unplug;
+ uint8_t type;
unsigned int idle_timer;
};

@@ -174,18 +175,19 @@ static int uhid_disconnect(struct input_device *idev, bool force)
if (!bt_uhid_created(idev->uhid))
return 0;

- /* Only destroy the node if virtual cable unplug flag has been set */
- if (!idev->virtual_cable_unplug && !force)
- return 0;
+ /* Force destroy the node if virtual cable unplug flag has been set */
+ if (idev->virtual_cable_unplug && !force)
+ force = true;

- bt_uhid_unregister_all(idev->uhid);
-
- err = bt_uhid_destroy(idev->uhid);
+ err = bt_uhid_destroy(idev->uhid, force);
if (err < 0) {
error("bt_uhid_destroy: %s", strerror(-err));
return err;
}

+ if (!bt_uhid_created(idev->uhid))
+ bt_uhid_unregister_all(idev->uhid);
+
return err;
}

@@ -989,7 +991,8 @@ static int uhid_connadd(struct input_device *idev, struct hidp_connadd_req *req)

err = bt_uhid_create(idev->uhid, req->name, &idev->src, &idev->dst,
req->vendor, req->product, req->version,
- req->country, req->rd_data, req->rd_size);
+ req->country, idev->type,
+ req->rd_data, req->rd_size);
if (err < 0) {
error("bt_uhid_create: %s", strerror(-err));
return err;
@@ -1078,7 +1081,7 @@ static int hidp_add_connection(struct input_device *idev)
/* Some platforms may choose to require encryption for all devices */
/* Note that this only matters for pre 2.1 devices as otherwise the */
/* device is encrypted by default by the lower layers */
- if (classic_bonded_only || req->subclass & 0x40) {
+ if (classic_bonded_only || idev->type == BT_UHID_KEYBOARD) {
if (!bt_io_set(idev->intr_io, &gerr,
BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
BT_IO_OPT_INVALID)) {
@@ -1468,6 +1471,7 @@ static struct input_device *input_device_new(struct btd_service *service)
idev->service = btd_service_ref(service);
idev->device = btd_device_ref(device);
idev->path = g_strdup(path);
+ idev->type = bt_uhid_icon_to_type(btd_device_get_icon(device));

input_device_update_rec(idev);

diff --git a/profiles/input/hog-lib.c b/profiles/input/hog-lib.c
index 964acc716041..67a0e832dc98 100644
--- a/profiles/input/hog-lib.c
+++ b/profiles/input/hog-lib.c
@@ -73,6 +73,7 @@ struct bt_hog {
uint16_t vendor;
uint16_t product;
uint16_t version;
+ uint8_t type;
struct gatt_db_attribute *attr;
struct gatt_primary *primary;
GAttrib *attrib;
@@ -825,17 +826,18 @@ static void set_report_cb(guint8 status, const guint8 *pdu,
error("bt_uhid_set_report_reply: %s", strerror(-err));
}

-static void uhid_destroy(struct bt_hog *hog)
+static void uhid_destroy(struct bt_hog *hog, bool force)
{
int err;

- bt_uhid_unregister_all(hog->uhid);
-
- err = bt_uhid_destroy(hog->uhid);
+ err = bt_uhid_destroy(hog->uhid, force);
if (err < 0) {
error("bt_uhid_destroy: %s", strerror(-err));
return;
}
+
+ if (bt_uhid_created(hog->uhid))
+ bt_uhid_unregister_all(hog->uhid);
}

static void set_report(struct uhid_event *ev, void *user_data)
@@ -850,7 +852,7 @@ static void set_report(struct uhid_event *ev, void *user_data)
* while disconnected.
*/
if (hog->attrib == NULL) {
- uhid_destroy(hog);
+ uhid_destroy(hog, true);
return;
}

@@ -948,7 +950,7 @@ static void get_report(struct uhid_event *ev, void *user_data)
* while disconnected.
*/
if (hog->attrib == NULL) {
- uhid_destroy(hog);
+ uhid_destroy(hog, true);
return;
}

@@ -1003,7 +1005,7 @@ static void uhid_create(struct bt_hog *hog, uint8_t *report_map,

err = bt_uhid_create(hog->uhid, hog->name, &src, &dst,
hog->vendor, hog->product, hog->version,
- hog->bcountrycode, value, vlen);
+ hog->bcountrycode, hog->type, value, vlen);
if (err < 0) {
error("bt_uhid_create: %s", strerror(-err));
return;
@@ -1233,7 +1235,7 @@ static void hog_free(void *data)
struct bt_hog *hog = data;

bt_hog_detach(hog, true);
- uhid_destroy(hog);
+ uhid_destroy(hog, true);

queue_destroy(hog->bas, (void *) bt_bas_unref);
g_slist_free_full(hog->instances, hog_free);
@@ -1252,9 +1254,9 @@ static void hog_free(void *data)

struct bt_hog *bt_hog_new_default(const char *name, uint16_t vendor,
uint16_t product, uint16_t version,
- struct gatt_db *db)
+ uint8_t type, struct gatt_db *db)
{
- return bt_hog_new(-1, name, vendor, product, version, db);
+ return bt_hog_new(-1, name, vendor, product, version, type, db);
}

static void foreach_hog_report(struct gatt_db_attribute *attr, void *user_data)
@@ -1414,6 +1416,7 @@ static void foreach_hog_chrc(struct gatt_db_attribute *attr, void *user_data)

static struct bt_hog *hog_new(int fd, const char *name, uint16_t vendor,
uint16_t product, uint16_t version,
+ uint8_t type,
struct gatt_db_attribute *attr)
{
struct bt_hog *hog;
@@ -1441,6 +1444,7 @@ static struct bt_hog *hog_new(int fd, const char *name, uint16_t vendor,
hog->vendor = vendor;
hog->product = product;
hog->version = version;
+ hog->type = type;
hog->attr = attr;

return hog;
@@ -1456,8 +1460,8 @@ static void hog_attach_instance(struct bt_hog *hog,
return;
}

- instance = hog_new(hog->uhid_fd, hog->name, hog->vendor,
- hog->product, hog->version, attr);
+ instance = hog_new(hog->uhid_fd, hog->name, hog->vendor, hog->product,
+ hog->version, hog->type, attr);
if (!instance)
return;

@@ -1493,11 +1497,11 @@ static void dis_notify(uint8_t source, uint16_t vendor, uint16_t product,

struct bt_hog *bt_hog_new(int fd, const char *name, uint16_t vendor,
uint16_t product, uint16_t version,
- struct gatt_db *db)
+ uint8_t type, struct gatt_db *db)
{
struct bt_hog *hog;

- hog = hog_new(fd, name, vendor, product, version, NULL);
+ hog = hog_new(fd, name, vendor, product, version, type, NULL);
if (!hog)
return NULL;

@@ -1620,7 +1624,7 @@ static void hog_attach_hog(struct bt_hog *hog, struct gatt_primary *primary)

instance = bt_hog_new(hog->uhid_fd, hog->name, hog->vendor,
hog->product, hog->version,
- hog->gatt_db);
+ hog->type, hog->gatt_db);
if (!instance)
return;

@@ -1751,9 +1755,12 @@ void bt_hog_detach(struct bt_hog *hog, bool force)
{
GSList *l;

- if (!hog->attrib)
+ if (!hog)
return;

+ if (!hog->attrib)
+ goto done;
+
queue_foreach(hog->bas, (void *) bt_bas_detach, NULL);

for (l = hog->instances; l; l = l->next) {
@@ -1781,8 +1788,8 @@ void bt_hog_detach(struct bt_hog *hog, bool force)
g_attrib_unref(hog->attrib);
hog->attrib = NULL;

- if (force)
- uhid_destroy(hog);
+done:
+ uhid_destroy(hog, force);
}

int bt_hog_set_control_point(struct bt_hog *hog, bool suspend)
diff --git a/profiles/input/hog-lib.h b/profiles/input/hog-lib.h
index abca829bee92..41e454642705 100644
--- a/profiles/input/hog-lib.h
+++ b/profiles/input/hog-lib.h
@@ -12,11 +12,11 @@ struct bt_hog;

struct bt_hog *bt_hog_new_default(const char *name, uint16_t vendor,
uint16_t product, uint16_t version,
- struct gatt_db *db);
+ uint8_t type, struct gatt_db *db);

struct bt_hog *bt_hog_new(int fd, const char *name, uint16_t vendor,
uint16_t product, uint16_t version,
- struct gatt_db *db);
+ uint8_t type, struct gatt_db *db);

struct bt_hog *bt_hog_ref(struct bt_hog *hog);
void bt_hog_unref(struct bt_hog *hog);
diff --git a/profiles/input/hog.c b/profiles/input/hog.c
index 2db52d1a2fcb..bc1b89e57fbd 100644
--- a/profiles/input/hog.c
+++ b/profiles/input/hog.c
@@ -50,6 +50,7 @@
struct hog_device {
struct btd_device *device;
struct bt_hog *hog;
+ uint8_t type;
};

static gboolean suspend_supported = FALSE;
@@ -64,7 +65,7 @@ void input_set_auto_sec(bool state)
static void hog_device_accept(struct hog_device *dev, struct gatt_db *db)
{
char name[248];
- uint16_t vendor, product, version;
+ uint16_t vendor, product, version, type;

if (dev->hog)
return;
@@ -77,11 +78,12 @@ static void hog_device_accept(struct hog_device *dev, struct gatt_db *db)
vendor = btd_device_get_vendor(dev->device);
product = btd_device_get_product(dev->device);
version = btd_device_get_version(dev->device);
+ type = bt_uhid_icon_to_type(btd_device_get_icon(dev->device));

DBG("name=%s vendor=0x%X, product=0x%X, version=0x%X", name, vendor,
product, version);

- dev->hog = bt_hog_new_default(name, vendor, product, version, db);
+ dev->hog = bt_hog_new_default(name, vendor, product, version, type, db);
}

static struct hog_device *hog_device_new(struct btd_device *device)
diff --git a/src/shared/uhid.c b/src/shared/uhid.c
index 1f071b958974..1eddc6122990 100644
--- a/src/shared/uhid.c
+++ b/src/shared/uhid.c
@@ -44,6 +44,7 @@ struct bt_uhid {
unsigned int notify_id;
struct queue *notify_list;
struct queue *input;
+ uint8_t type;
bool created;
bool started;
struct uhid_replay *replay;
@@ -338,8 +339,8 @@ static void uhid_start(struct uhid_event *ev, void *user_data)

int bt_uhid_create(struct bt_uhid *uhid, const char *name, bdaddr_t *src,
bdaddr_t *dst, uint32_t vendor, uint32_t product,
- uint32_t version, uint32_t country, void *rd_data,
- size_t rd_size)
+ uint32_t version, uint32_t country, uint8_t type,
+ void *rd_data, size_t rd_size)
{
struct uhid_event ev;
int err;
@@ -381,6 +382,7 @@ int bt_uhid_create(struct bt_uhid *uhid, const char *name, bdaddr_t *src,

uhid->created = true;
uhid->started = false;
+ uhid->type = type;

return 0;
}
@@ -487,7 +489,7 @@ done:
return bt_uhid_send(uhid, &ev);
}

-int bt_uhid_destroy(struct bt_uhid *uhid)
+int bt_uhid_destroy(struct bt_uhid *uhid, bool force)
{
struct uhid_event ev;
int err;
@@ -495,7 +497,14 @@ int bt_uhid_destroy(struct bt_uhid *uhid)
if (!uhid)
return -EINVAL;

- if (!uhid->created)
+ /* Force destroy for non-keyboard devices - keyboards are not destroyed
+ * on disconnect since they can glitch on reconnection losing
+ * keypresses.
+ */
+ if (!force && uhid->type != BT_UHID_KEYBOARD)
+ force = true;
+
+ if (!uhid->created || !force)
return 0;

memset(&ev, 0, sizeof(ev));
diff --git a/src/shared/uhid.h b/src/shared/uhid.h
index 4e288cb192aa..e76a6e22bd8e 100644
--- a/src/shared/uhid.h
+++ b/src/shared/uhid.h
@@ -15,6 +15,31 @@

struct bt_uhid;

+enum {
+ BT_UHID_NONE = 0,
+ BT_UHID_KEYBOARD,
+ BT_UHID_MOUSE,
+ BT_UHID_GAMING,
+ BT_UHID_TABLET
+};
+
+static inline uint8_t bt_uhid_icon_to_type(const char *icon)
+{
+ if (!icon)
+ return BT_UHID_NONE;
+
+ if (!strcmp(icon, "input-keyboard"))
+ return BT_UHID_KEYBOARD;
+ else if (!strcmp(icon, "input-mouse"))
+ return BT_UHID_MOUSE;
+ else if (!strcmp(icon, "input-gaming"))
+ return BT_UHID_GAMING;
+ else if (!strcmp(icon, "input-tablet"))
+ return BT_UHID_TABLET;
+ else
+ return BT_UHID_NONE;
+}
+
struct bt_uhid *bt_uhid_new_default(void);
struct bt_uhid *bt_uhid_new(int fd);

@@ -32,8 +57,8 @@ bool bt_uhid_unregister_all(struct bt_uhid *uhid);
int bt_uhid_send(struct bt_uhid *uhid, const struct uhid_event *ev);
int bt_uhid_create(struct bt_uhid *uhid, const char *name, bdaddr_t *src,
bdaddr_t *dst, uint32_t vendor, uint32_t product,
- uint32_t version, uint32_t country, void *rd_data,
- size_t rd_size);
+ uint32_t version, uint32_t country, uint8_t type,
+ void *rd_data, size_t rd_size);
bool bt_uhid_created(struct bt_uhid *uhid);
bool bt_uhid_started(struct bt_uhid *uhid);
int bt_uhid_input(struct bt_uhid *uhid, uint8_t number, const void *data,
@@ -41,5 +66,5 @@ int bt_uhid_input(struct bt_uhid *uhid, uint8_t number, const void *data,
int bt_uhid_set_report_reply(struct bt_uhid *uhid, uint8_t id, uint8_t status);
int bt_uhid_get_report_reply(struct bt_uhid *uhid, uint8_t id, uint8_t number,
uint8_t status, const void *data, size_t size);
-int bt_uhid_destroy(struct bt_uhid *uhid);
+int bt_uhid_destroy(struct bt_uhid *uhid, bool force);
int bt_uhid_replay(struct bt_uhid *uhid);
--
2.45.1


2024-05-20 15:47:29

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ v1 2/3] hog-lib: Add force parameter to bt_hog_detach

From: Luiz Augusto von Dentz <[email protected]>

This adds force parameter to bt_hog_detach which indicates if the
bt_uhid_destroy shall be called.
---
profiles/input/hog-lib.c | 9 ++++++---
profiles/input/hog-lib.h | 2 +-
profiles/input/hog.c | 2 +-
3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/profiles/input/hog-lib.c b/profiles/input/hog-lib.c
index 2d8d0f359e57..964acc716041 100644
--- a/profiles/input/hog-lib.c
+++ b/profiles/input/hog-lib.c
@@ -1232,7 +1232,7 @@ static void hog_free(void *data)
{
struct bt_hog *hog = data;

- bt_hog_detach(hog);
+ bt_hog_detach(hog, true);
uhid_destroy(hog);

queue_destroy(hog->bas, (void *) bt_bas_unref);
@@ -1747,7 +1747,7 @@ bool bt_hog_attach(struct bt_hog *hog, void *gatt)
return true;
}

-void bt_hog_detach(struct bt_hog *hog)
+void bt_hog_detach(struct bt_hog *hog, bool force)
{
GSList *l;

@@ -1759,7 +1759,7 @@ void bt_hog_detach(struct bt_hog *hog)
for (l = hog->instances; l; l = l->next) {
struct bt_hog *instance = l->data;

- bt_hog_detach(instance);
+ bt_hog_detach(instance, force);
}

for (l = hog->reports; l; l = l->next) {
@@ -1780,6 +1780,9 @@ void bt_hog_detach(struct bt_hog *hog)
queue_remove_all(hog->gatt_op, cancel_gatt_req, hog, destroy_gatt_req);
g_attrib_unref(hog->attrib);
hog->attrib = NULL;
+
+ if (force)
+ uhid_destroy(hog);
}

int bt_hog_set_control_point(struct bt_hog *hog, bool suspend)
diff --git a/profiles/input/hog-lib.h b/profiles/input/hog-lib.h
index a79648976e79..abca829bee92 100644
--- a/profiles/input/hog-lib.h
+++ b/profiles/input/hog-lib.h
@@ -22,7 +22,7 @@ struct bt_hog *bt_hog_ref(struct bt_hog *hog);
void bt_hog_unref(struct bt_hog *hog);

bool bt_hog_attach(struct bt_hog *hog, void *gatt);
-void bt_hog_detach(struct bt_hog *hog);
+void bt_hog_detach(struct bt_hog *hog, bool force);

int bt_hog_set_control_point(struct bt_hog *hog, bool suspend);
int bt_hog_send_report(struct bt_hog *hog, void *data, size_t size, int type);
diff --git a/profiles/input/hog.c b/profiles/input/hog.c
index d50b823213b5..2db52d1a2fcb 100644
--- a/profiles/input/hog.c
+++ b/profiles/input/hog.c
@@ -206,7 +206,7 @@ static int hog_disconnect(struct btd_service *service)
{
struct hog_device *dev = btd_service_get_user_data(service);

- bt_hog_detach(dev->hog);
+ bt_hog_detach(dev->hog, false);

btd_service_disconnecting_complete(service, 0);

--
2.45.1


2024-05-20 17:31:12

by bluez.test.bot

[permalink] [raw]
Subject: RE: [BlueZ,v1,1/3] device: Add btd_device_get_icon

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=854443

---Test result---

Test Summary:
CheckPatch PASS 1.56 seconds
GitLint PASS 0.98 seconds
BuildEll PASS 24.59 seconds
BluezMake FAIL 57.25 seconds
MakeCheck FAIL 167.12 seconds
MakeDistcheck FAIL 47.64 seconds
CheckValgrind FAIL 45.44 seconds
CheckSmatch FAIL 96.61 seconds
bluezmakeextell FAIL 29.10 seconds
IncrementalBuild FAIL 3048.92 seconds
ScanBuild FAIL 636.72 seconds

Details
##############################
Test: BluezMake - FAIL
Desc: Build BlueZ
Output:

tools/mgmt-tester.c: In function ‘main’:
tools/mgmt-tester.c:12725:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without
12725 | int main(int argc, char *argv[])
| ^~~~
android/hidhost.c: In function ‘hog_conn_cb’:
android/hidhost.c:799:4: error: too few arguments to function ‘bt_hog_detach’
799 | bt_hog_detach(dev->hog);
| ^~~~~~~~~~~~~
In file included from android/hidhost.c:38:
./profiles/input/hog-lib.h:25:6: note: declared here
25 | void bt_hog_detach(struct bt_hog *hog, bool force);
| ^~~~~~~~~~~~~
android/hidhost.c:811:34: error: passing argument 5 of ‘bt_hog_new_default’ makes integer from pointer without a cast [-Werror=int-conversion]
811 | dev->product, dev->version, NULL);
| ^~~~
| |
| void *
In file included from android/hidhost.c:38:
./profiles/input/hog-lib.h:13:16: note: expected ‘uint8_t’ {aka ‘unsigned char’} but argument is of type ‘void *’
13 | struct bt_hog *bt_hog_new_default(const char *name, uint16_t vendor,
| ^~~~~~~~~~~~~~~~~~
android/hidhost.c:810:14: error: too few arguments to function ‘bt_hog_new_default’
810 | dev->hog = bt_hog_new_default("bluez-input-device", dev->vendor,
| ^~~~~~~~~~~~~~~~~~
In file included from android/hidhost.c:38:
./profiles/input/hog-lib.h:13:16: note: declared here
13 | struct bt_hog *bt_hog_new_default(const char *name, uint16_t vendor,
| ^~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7809: android/hidhost.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:4651: all] Error 2
##############################
Test: MakeCheck - FAIL
Desc: Run Bluez Make Check
Output:

android/hidhost.c: In function ‘hog_conn_cb’:
android/hidhost.c:799:4: error: too few arguments to function ‘bt_hog_detach’
799 | bt_hog_detach(dev->hog);
| ^~~~~~~~~~~~~
In file included from android/hidhost.c:38:
./profiles/input/hog-lib.h:25:6: note: declared here
25 | void bt_hog_detach(struct bt_hog *hog, bool force);
| ^~~~~~~~~~~~~
android/hidhost.c:811:34: error: passing argument 5 of ‘bt_hog_new_default’ makes integer from pointer without a cast [-Werror=int-conversion]
811 | dev->product, dev->version, NULL);
| ^~~~
| |
| void *
In file included from android/hidhost.c:38:
./profiles/input/hog-lib.h:13:16: note: expected ‘uint8_t’ {aka ‘unsigned char’} but argument is of type ‘void *’
13 | struct bt_hog *bt_hog_new_default(const char *name, uint16_t vendor,
| ^~~~~~~~~~~~~~~~~~
android/hidhost.c:810:14: error: too few arguments to function ‘bt_hog_new_default’
810 | dev->hog = bt_hog_new_default("bluez-input-device", dev->vendor,
| ^~~~~~~~~~~~~~~~~~
In file included from android/hidhost.c:38:
./profiles/input/hog-lib.h:13:16: note: declared here
13 | struct bt_hog *bt_hog_new_default(const char *name, uint16_t vendor,
| ^~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7809: android/hidhost.o] Error 1
make: *** [Makefile:12186: check] Error 2
##############################
Test: MakeDistcheck - FAIL
Desc: Run Bluez Make Distcheck
Output:

Package cups was not found in the pkg-config search path.
Perhaps you should add the directory containing `cups.pc'
to the PKG_CONFIG_PATH environment variable
No package 'cups' found
../../android/hidhost.c: In function ‘hog_conn_cb’:
../../android/hidhost.c:799:4: error: too few arguments to function ‘bt_hog_detach’
799 | bt_hog_detach(dev->hog);
| ^~~~~~~~~~~~~
In file included from ../../android/hidhost.c:38:
../../profiles/input/hog-lib.h:25:6: note: declared here
25 | void bt_hog_detach(struct bt_hog *hog, bool force);
| ^~~~~~~~~~~~~
../../android/hidhost.c:811:34: warning: passing argument 5 of ‘bt_hog_new_default’ makes integer from pointer without a cast [-Wint-conversion]
811 | dev->product, dev->version, NULL);
| ^~~~
| |
| void *
In file included from ../../android/hidhost.c:38:
../../profiles/input/hog-lib.h:13:16: note: expected ‘uint8_t’ {aka ‘unsigned char’} but argument is of type ‘void *’
13 | struct bt_hog *bt_hog_new_default(const char *name, uint16_t vendor,
| ^~~~~~~~~~~~~~~~~~
../../android/hidhost.c:810:14: error: too few arguments to function ‘bt_hog_new_default’
810 | dev->hog = bt_hog_new_default("bluez-input-device", dev->vendor,
| ^~~~~~~~~~~~~~~~~~
In file included from ../../android/hidhost.c:38:
../../profiles/input/hog-lib.h:13:16: note: declared here
13 | struct bt_hog *bt_hog_new_default(const char *name, uint16_t vendor,
| ^~~~~~~~~~~~~~~~~~
make[2]: *** [Makefile:7809: android/hidhost.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [Makefile:4651: all] Error 2
make: *** [Makefile:12107: distcheck] Error 1
##############################
Test: CheckValgrind - FAIL
Desc: Run Bluez Make Check with Valgrind
Output:

tools/mgmt-tester.c: In function ‘main’:
tools/mgmt-tester.c:12725:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without
12725 | int main(int argc, char *argv[])
| ^~~~
android/hidhost.c: In function ‘hog_conn_cb’:
android/hidhost.c:799:4: error: too few arguments to function ‘bt_hog_detach’
799 | bt_hog_detach(dev->hog);
| ^~~~~~~~~~~~~
In file included from android/hidhost.c:38:
./profiles/input/hog-lib.h:25:6: note: declared here
25 | void bt_hog_detach(struct bt_hog *hog, bool force);
| ^~~~~~~~~~~~~
android/hidhost.c:811:34: error: passing argument 5 of ‘bt_hog_new_default’ makes integer from pointer without a cast [-Werror=int-conversion]
811 | dev->product, dev->version, NULL);
| ^~~~
| |
| void *
In file included from android/hidhost.c:38:
./profiles/input/hog-lib.h:13:16: note: expected ‘uint8_t’ {aka ‘unsigned char’} but argument is of type ‘void *’
13 | struct bt_hog *bt_hog_new_default(const char *name, uint16_t vendor,
| ^~~~~~~~~~~~~~~~~~
android/hidhost.c:810:14: error: too few arguments to function ‘bt_hog_new_default’
810 | dev->hog = bt_hog_new_default("bluez-input-device", dev->vendor,
| ^~~~~~~~~~~~~~~~~~
In file included from android/hidhost.c:38:
./profiles/input/hog-lib.h:13:16: note: declared here
13 | struct bt_hog *bt_hog_new_default(const char *name, uint16_t vendor,
| ^~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7809: android/hidhost.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:12186: check] Error 2
##############################
Test: CheckSmatch - FAIL
Desc: Run smatch tool with source
Output:

src/shared/crypto.c:271:21: warning: Variable length array is used.
src/shared/crypto.c:272:23: warning: Variable length array is used.
src/shared/gatt-helpers.c:768:31: warning: Variable length array is used.
src/shared/gatt-helpers.c:830:31: warning: Variable length array is used.
src/shared/gatt-helpers.c:1323:31: warning: Variable length array is used.
src/shared/gatt-helpers.c:1354:23: warning: Variable length array is used.
src/shared/gatt-server.c:278:25: warning: Variable length array is used.
src/shared/gatt-server.c:621:25: warning: Variable length array is used.
src/shared/gatt-server.c:720:25: warning: Variable length array is used.
src/shared/bap.c:286:25: warning: array of flexible structures
src/shared/bap.c: note: in included file:
./src/shared/ascs.h:88:25: warning: array of flexible structures
src/shared/shell.c: note: in included file (through /usr/include/readline/readline.h):
/usr/include/readline/rltypedefs.h:35:23: warning: non-ANSI function declaration of function 'Function'
/usr/include/readline/rltypedefs.h:36:25: warning: non-ANSI function declaration of function 'VFunction'
/usr/include/readline/rltypedefs.h:37:27: warning: non-ANSI function declaration of function 'CPFunction'
/usr/include/readline/rltypedefs.h:38:29: warning: non-ANSI function declaration of function 'CPPFunction'
src/shared/crypto.c:271:21: warning: Variable length array is used.
src/shared/crypto.c:272:23: warning: Variable length array is used.
src/shared/gatt-helpers.c:768:31: warning: Variable length array is used.
src/shared/gatt-helpers.c:830:31: warning: Variable length array is used.
src/shared/gatt-helpers.c:1323:31: warning: Variable length array is used.
src/shared/gatt-helpers.c:1354:23: warning: Variable length array is used.
src/shared/gatt-server.c:278:25: warning: Variable length array is used.
src/shared/gatt-server.c:621:25: warning: Variable length array is used.
src/shared/gatt-server.c:720:25: warning: Variable length array is used.
src/shared/bap.c:286:25: warning: array of flexible structures
src/shared/bap.c: note: in included file:
./src/shared/ascs.h:88:25: warning: array of flexible structures
src/shared/shell.c: note: in included file (through /usr/include/readline/readline.h):
/usr/include/readline/rltypedefs.h:35:23: warning: non-ANSI function declaration of function 'Function'
/usr/include/readline/rltypedefs.h:36:25: warning: non-ANSI function declaration of function 'VFunction'
/usr/include/readline/rltypedefs.h:37:27: warning: non-ANSI function declaration of function 'CPFunction'
/usr/include/readline/rltypedefs.h:38:29: warning: non-ANSI function declaration of function 'CPPFunction'
tools/mesh-cfgtest.c:1453:17: warning: unknown escape sequence: '\%'
tools/sco-tester.c: note: in included file:
./lib/bluetooth.h:219:15: warning: array of flexible structures
./lib/bluetooth.h:224:31: warning: array of flexible structures
tools/bneptest.c:634:39: warning: unknown escape sequence: '\%'
tools/seq2bseq.c:57:26: warning: Variable length array is used.
tools/obex-client-tool.c: note: in included file (through /usr/include/readline/readline.h):
/usr/include/readline/rltypedefs.h:35:23: warning: non-ANSI function declaration of function 'Function'
/usr/include/readline/rltypedefs.h:36:25: warning: non-ANSI function declaration of function 'VFunction'
/usr/include/readline/rltypedefs.h:37:27: warning: non-ANSI function declaration of function 'CPFunction'
/usr/include/readline/rltypedefs.h:38:29: warning: non-ANSI function declaration of function 'CPPFunction'
unit/test-uhid.c: In function ‘test_client’:
unit/test-uhid.c:234:66: error: passing argument 9 of ‘bt_uhid_create’ makes integer from pointer without a cast [-Werror=int-conversion]
234 | err = bt_uhid_create(context->uhid, "", NULL, NULL, 0, 0, 0, 0, NULL,
| ^~~~
| |
| void *
In file included from unit/test-uhid.c:25:
./src/shared/uhid.h:60:48: note: expected ‘uint8_t’ {aka ‘unsigned char’} but argument is of type ‘void *’
60 | uint32_t version, uint32_t country, uint8_t type,
| ~~~~~~~~^~~~
unit/test-uhid.c:234:8: error: too few arguments to function ‘bt_uhid_create’
234 | err = bt_uhid_create(context->uhid, "", NULL, NULL, 0, 0, 0, 0, NULL,
| ^~~~~~~~~~~~~~
In file included from unit/test-uhid.c:25:
./src/shared/uhid.h:58:5: note: declared here
58 | int bt_uhid_create(struct bt_uhid *uhid, const char *name, bdaddr_t *src,
| ^~~~~~~~~~~~~~
unit/test-uhid.c:240:9: error: too few arguments to function ‘bt_uhid_destroy’
240 | err = bt_uhid_destroy(context->uhid);
| ^~~~~~~~~~~~~~~
In file included from unit/test-uhid.c:25:
./src/shared/uhid.h:69:5: note: declared here
69 | int bt_uhid_destroy(struct bt_uhid *uhid, bool force);
| ^~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7809: unit/test-uhid.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:4651: all] Error 2
##############################
Test: bluezmakeextell - FAIL
Desc: Build Bluez with External ELL
Output:

unit/test-uhid.c: In function ‘test_client’:
unit/test-uhid.c:234:66: error: passing argument 9 of ‘bt_uhid_create’ makes integer from pointer without a cast [-Werror=int-conversion]
234 | err = bt_uhid_create(context->uhid, "", NULL, NULL, 0, 0, 0, 0, NULL,
| ^~~~
| |
| void *
In file included from unit/test-uhid.c:25:
./src/shared/uhid.h:60:48: note: expected ‘uint8_t’ {aka ‘unsigned char’} but argument is of type ‘void *’
60 | uint32_t version, uint32_t country, uint8_t type,
| ~~~~~~~~^~~~
unit/test-uhid.c:234:8: error: too few arguments to function ‘bt_uhid_create’
234 | err = bt_uhid_create(context->uhid, "", NULL, NULL, 0, 0, 0, 0, NULL,
| ^~~~~~~~~~~~~~
In file included from unit/test-uhid.c:25:
./src/shared/uhid.h:58:5: note: declared here
58 | int bt_uhid_create(struct bt_uhid *uhid, const char *name, bdaddr_t *src,
| ^~~~~~~~~~~~~~
unit/test-uhid.c:240:9: error: too few arguments to function ‘bt_uhid_destroy’
240 | err = bt_uhid_destroy(context->uhid);
| ^~~~~~~~~~~~~~~
In file included from unit/test-uhid.c:25:
./src/shared/uhid.h:69:5: note: declared here
69 | int bt_uhid_destroy(struct bt_uhid *uhid, bool force);
| ^~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7809: unit/test-uhid.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:4651: all] Error 2
##############################
Test: IncrementalBuild - FAIL
Desc: Incremental build with the patches in the series
Output:
[BlueZ,v1,3/3] shared/uhid: Add special handling for non-keyboards

tools/mgmt-tester.c: In function ‘main’:
tools/mgmt-tester.c:12725:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without
12725 | int main(int argc, char *argv[])
| ^~~~
unit/test-uhid.c: In function ‘test_client’:
unit/test-uhid.c:234:66: error: passing argument 9 of ‘bt_uhid_create’ makes integer from pointer without a cast [-Werror=int-conversion]
234 | err = bt_uhid_create(context->uhid, "", NULL, NULL, 0, 0, 0, 0, NULL,
| ^~~~
| |
| void *
In file included from unit/test-uhid.c:25:
./src/shared/uhid.h:60:48: note: expected ‘uint8_t’ {aka ‘unsigned char’} but argument is of type ‘void *’
60 | uint32_t version, uint32_t country, uint8_t type,
| ~~~~~~~~^~~~
unit/test-uhid.c:234:8: error: too few arguments to function ‘bt_uhid_create’
234 | err = bt_uhid_create(context->uhid, "", NULL, NULL, 0, 0, 0, 0, NULL,
| ^~~~~~~~~~~~~~
In file included from unit/test-uhid.c:25:
./src/shared/uhid.h:58:5: note: declared here
58 | int bt_uhid_create(struct bt_uhid *uhid, const char *name, bdaddr_t *src,
| ^~~~~~~~~~~~~~
unit/test-uhid.c:240:9: error: too few arguments to function ‘bt_uhid_destroy’
240 | err = bt_uhid_destroy(context->uhid);
| ^~~~~~~~~~~~~~~
In file included from unit/test-uhid.c:25:
./src/shared/uhid.h:69:5: note: declared here
69 | int bt_uhid_destroy(struct bt_uhid *uhid, bool force);
| ^~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7809: unit/test-uhid.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:4651: all] Error 2
##############################
Test: ScanBuild - FAIL
Desc: Run Scan Build
Output:

src/shared/gatt-client.c:451:21: warning: Use of memory after it is freed
gatt_db_unregister(op->client->db, op->db_id);
^~~~~~~~~~
src/shared/gatt-client.c:696:2: warning: Use of memory after it is freed
discovery_op_complete(op, false, att_ecode);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/shared/gatt-client.c:996:2: warning: Use of memory after it is freed
discovery_op_complete(op, success, att_ecode);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/shared/gatt-client.c:1102:2: warning: Use of memory after it is freed
discovery_op_complete(op, success, att_ecode);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/shared/gatt-client.c:1294:2: warning: Use of memory after it is freed
discovery_op_complete(op, success, att_ecode);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/shared/gatt-client.c:1359:2: warning: Use of memory after it is freed
discovery_op_complete(op, success, att_ecode);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/shared/gatt-client.c:1634:6: warning: Use of memory after it is freed
if (read_db_hash(op)) {
^~~~~~~~~~~~~~~~
src/shared/gatt-client.c:1639:2: warning: Use of memory after it is freed
discover_all(op);
^~~~~~~~~~~~~~~~
src/shared/gatt-client.c:2143:6: warning: Use of memory after it is freed
if (read_db_hash(op)) {
^~~~~~~~~~~~~~~~
src/shared/gatt-client.c:2151:8: warning: Use of memory after it is freed
discovery_op_ref(op),
^~~~~~~~~~~~~~~~~~~~
src/shared/gatt-client.c:3240:2: warning: Use of memory after it is freed
complete_write_long_op(req, success, 0, false);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/shared/gatt-client.c:3262:2: warning: Use of memory after it is freed
request_unref(req);
^~~~~~~~~~~~~~~~~~
12 warnings generated.
src/shared/shell.c:1331:13: warning: Access to field 'options' results in a dereference of a null pointer (loaded from variable 'opt')
if (c != opt->options[index - offset].val) {
^~~~~~~~~~~~
1 warning generated.
src/shared/gatt-client.c:451:21: warning: Use of memory after it is freed
gatt_db_unregister(op->client->db, op->db_id);
^~~~~~~~~~
src/shared/gatt-client.c:696:2: warning: Use of memory after it is freed
discovery_op_complete(op, false, att_ecode);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/shared/gatt-client.c:996:2: warning: Use of memory after it is freed
discovery_op_complete(op, success, att_ecode);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/shared/gatt-client.c:1102:2: warning: Use of memory after it is freed
discovery_op_complete(op, success, att_ecode);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/shared/gatt-client.c:1294:2: warning: Use of memory after it is freed
discovery_op_complete(op, success, att_ecode);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/shared/gatt-client.c:1359:2: warning: Use of memory after it is freed
discovery_op_complete(op, success, att_ecode);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/shared/gatt-client.c:1634:6: warning: Use of memory after it is freed
if (read_db_hash(op)) {
^~~~~~~~~~~~~~~~
src/shared/gatt-client.c:1639:2: warning: Use of memory after it is freed
discover_all(op);
^~~~~~~~~~~~~~~~
src/shared/gatt-client.c:2143:6: warning: Use of memory after it is freed
if (read_db_hash(op)) {
^~~~~~~~~~~~~~~~
src/shared/gatt-client.c:2151:8: warning: Use of memory after it is freed
discovery_op_ref(op),
^~~~~~~~~~~~~~~~~~~~
src/shared/gatt-client.c:3240:2: warning: Use of memory after it is freed
complete_write_long_op(req, success, 0, false);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/shared/gatt-client.c:3262:2: warning: Use of memory after it is freed
request_unref(req);
^~~~~~~~~~~~~~~~~~
12 warnings generated.
src/shared/shell.c:1331:13: warning: Access to field 'options' results in a dereference of a null pointer (loaded from variable 'opt')
if (c != opt->options[index - offset].val) {
^~~~~~~~~~~~
1 warning generated.
tools/hciattach.c:816:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n'
if ((n = read_hci_event(fd, resp, 10)) < 0) {
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/hciattach.c:864:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n'
if ((n = read_hci_event(fd, resp, 4)) < 0) {
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/hciattach.c:886:8: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n'
if ((n = read_hci_event(fd, resp, 10)) < 0) {
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/hciattach.c:908:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n'
if ((n = read_hci_event(fd, resp, 4)) < 0) {
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/hciattach.c:929:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n'
if ((n = read_hci_event(fd, resp, 4)) < 0) {
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/hciattach.c:973:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n'
if ((n = read_hci_event(fd, resp, 6)) < 0) {
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
6 warnings generated.
src/oui.c:50:2: warning: Value stored to 'hwdb' is never read
hwdb = udev_hwdb_unref(hwdb);
^ ~~~~~~~~~~~~~~~~~~~~~
src/oui.c:53:2: warning: Value stored to 'udev' is never read
udev = udev_unref(udev);
^ ~~~~~~~~~~~~~~~~
2 warnings generated.
tools/hcidump.c:180:9: warning: Potential leak of memory pointed to by 'dp'
if (fds[i].fd == sock)
^~~
tools/hcidump.c:248:17: warning: Assigned value is garbage or undefined
dh->ts_sec = htobl(frm.ts.tv_sec);
^ ~~~~~~~~~~~~~~~~~~~~
tools/hcidump.c:326:9: warning: 1st function call argument is an uninitialized value
if (be32toh(dp.flags) & 0x02) {
^~~~~~~~~~~~~~~~~
/usr/include/endian.h:46:22: note: expanded from macro 'be32toh'
# define be32toh(x) __bswap_32 (x)
^~~~~~~~~~~~~~
tools/hcidump.c:341:20: warning: 1st function call argument is an uninitialized value
frm.data_len = be32toh(dp.len);
^~~~~~~~~~~~~~~
/usr/include/endian.h:46:22: note: expanded from macro 'be32toh'
# define be32toh(x) __bswap_32 (x)
^~~~~~~~~~~~~~
tools/hcidump.c:346:14: warning: 1st function call argument is an uninitialized value
opcode = be32toh(dp.flags) & 0xffff;
^~~~~~~~~~~~~~~~~
/usr/include/endian.h:46:22: note: expanded from macro 'be32toh'
# define be32toh(x) __bswap_32 (x)
^~~~~~~~~~~~~~
tools/hcidump.c:384:17: warning: Assigned value is garbage or undefined
frm.data_len = btohs(dh.len);
^ ~~~~~~~~~~~~~
tools/hcidump.c:394:11: warning: Assigned value is garbage or undefined
frm.len = frm.data_len;
^ ~~~~~~~~~~~~
tools/hcidump.c:398:9: warning: 1st function call argument is an uninitialized value
ts = be64toh(ph.ts);
^~~~~~~~~~~~~~
/usr/include/endian.h:51:22: note: expanded from macro 'be64toh'
# define be64toh(x) __bswap_64 (x)
^~~~~~~~~~~~~~
tools/hcidump.c:403:13: warning: 1st function call argument is an uninitialized value
frm.in = be32toh(dp.flags) & 0x01;
^~~~~~~~~~~~~~~~~
/usr/include/endian.h:46:22: note: expanded from macro 'be32toh'
# define be32toh(x) __bswap_32 (x)
^~~~~~~~~~~~~~
tools/hcidump.c:408:11: warning: Assigned value is garbage or undefined
frm.in = dh.in;
^ ~~~~~
tools/hcidump.c:437:7: warning: Null pointer passed to 1st parameter expecting 'nonnull'
fd = open(file, open_flags, 0644);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
11 warnings generated.
tools/rfcomm.c:234:3: warning: Value stored to 'i' is never read
i = execvp(cmdargv[0], cmdargv);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/rfcomm.c:234:7: warning: Null pointer passed to 1st parameter expecting 'nonnull'
i = execvp(cmdargv[0], cmdargv);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/rfcomm.c:354:8: warning: Although the value stored to 'fd' is used in the enclosing expression, the value is never actually read from 'fd'
if ((fd = open(devname, O_RDONLY | O_NOCTTY)) < 0) {
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/rfcomm.c:497:14: warning: Assigned value is garbage or undefined
req.channel = raddr.rc_channel;
^ ~~~~~~~~~~~~~~~~
tools/rfcomm.c:515:8: warning: Although the value stored to 'fd' is used in the enclosing expression, the value is never actually read from 'fd'
if ((fd = open(devname, O_RDONLY | O_NOCTTY)) < 0) {
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 warnings generated.
src/sdp-xml.c:126:10: warning: Assigned value is garbage or undefined
buf[1] = data[i + 1];
^ ~~~~~~~~~~~
src/sdp-xml.c:300:11: warning: Assigned value is garbage or undefined
buf[1] = data[i + 1];
^ ~~~~~~~~~~~
src/sdp-xml.c:338:11: warning: Assigned value is garbage or undefined
buf[1] = data[i + 1];
^ ~~~~~~~~~~~
3 warnings generated.
tools/ciptool.c:350:7: warning: 5th function call argument is an uninitialized value
sk = do_connect(ctl, dev_id, &src, &dst, psm, (1 << CMTP_LOOPBACK));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
tools/sdptool.c:941:26: warning: Result of 'malloc' is converted to a pointer of type 'uint32_t', which is incompatible with sizeof operand type 'int'
uint32_t *value_int = malloc(sizeof(int));
~~~~~~~~~~ ^~~~~~ ~~~~~~~~~~~
tools/sdptool.c:980:4: warning: 1st function call argument is an uninitialized value
free(allocArray[i]);
^~~~~~~~~~~~~~~~~~~
tools/sdptool.c:3777:2: warning: Potential leak of memory pointed to by 'si.name'
return add_service(0, &si);
^~~~~~~~~~~~~~~~~~~~~~~~~~
tools/sdptool.c:4112:4: warning: Potential leak of memory pointed to by 'context.svc'
return -1;
^~~~~~~~~
4 warnings generated.
tools/avtest.c:225:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 3);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:235:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 4);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:244:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 3);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:258:5: warning: Value stored to 'len' is never read
len = write(sk, buf,
^ ~~~~~~~~~~~~~~
tools/avtest.c:265:5: warning: Value stored to 'len' is never read
len = write(sk, buf,
^ ~~~~~~~~~~~~~~
tools/avtest.c:272:5: warning: Value stored to 'len' is never read
len = write(sk, buf,
^ ~~~~~~~~~~~~~~
tools/avtest.c:279:5: warning: Value stored to 'len' is never read
len = write(sk, buf,
^ ~~~~~~~~~~~~~~
tools/avtest.c:291:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 4);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:295:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 2);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:304:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 3);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:308:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 2);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:317:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 3);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:324:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 2);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:346:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 4);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:350:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 2);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:359:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 3);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:363:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 2);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:376:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 4);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:380:5: warning: Value stored to 'len' is never read
len = write(sk, buf, 2);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:387:4: warning: Value stored to 'len' is never read
len = write(sk, buf, 2);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:397:4: warning: Value stored to 'len' is never read
len = write(sk, buf, 2);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:562:3: warning: Value stored to 'len' is never read
len = write(sk, buf, 2);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:570:3: warning: Value stored to 'len' is never read
len = write(sk, buf, invalid ? 2 : 3);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/avtest.c:584:3: warning: Value stored to 'len' is never read
len = write(sk, buf, 4 + sizeof(media_transport));
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/avtest.c:597:3: warning: Value stored to 'len' is never read
len = write(sk, buf, 3);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:607:3: warning: Value stored to 'len' is never read
len = write(sk, buf, 3);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:619:3: warning: Value stored to 'len' is never read
len = write(sk, buf, 3);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:634:3: warning: Value stored to 'len' is never read
len = write(sk, buf, 3);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:646:3: warning: Value stored to 'len' is never read
len = write(sk, buf, 3);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:655:3: warning: Value stored to 'len' is never read
len = write(sk, buf, 3);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:662:3: warning: Value stored to 'len' is never read
len = write(sk, buf, 2);
^ ~~~~~~~~~~~~~~~~~
tools/avtest.c:698:2: warning: Value stored to 'len' is never read
len = write(sk, buf, AVCTP_HEADER_LENGTH + sizeof(play_pressed));
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
32 warnings generated.
tools/btproxy.c:836:15: warning: Null pointer passed to 1st parameter expecting 'nonnull'
tcp_port = atoi(optarg);
^~~~~~~~~~~~
tools/btproxy.c:839:8: warning: Null pointer passed to 1st parameter expecting 'nonnull'
if (strlen(optarg) > 3 && !strncmp(optarg, "hci", 3))
^~~~~~~~~~~~~~
2 warnings generated.
tools/create-image.c:76:3: warning: Value stored to 'fd' is never read
fd = -1;
^ ~~
tools/create-image.c:84:3: warning: Value stored to 'fd' is never read
fd = -1;
^ ~~
tools/create-image.c:92:3: warning: Value stored to 'fd' is never read
fd = -1;
^ ~~
tools/create-image.c:105:2: warning: Value stored to 'fd' is never read
fd = -1;
^ ~~
4 warnings generated.
tools/btgatt-client.c:1824:2: warning: Value stored to 'argv' is never read
argv += optind;
^ ~~~~~~
1 warning generated.
tools/btgatt-server.c:1212:2: warning: Value stored to 'argv' is never read
argv -= optind;
^ ~~~~~~
1 warning generated.
tools/check-selftest.c:42:3: warning: Value stored to 'ptr' is never read
ptr = fgets(result, sizeof(result), fp);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
tools/gatt-service.c:294:2: warning: 2nd function call argument is an uninitialized value
chr_write(chr, value, len);
^~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
tools/obex-server-tool.c:133:13: warning: Null pointer passed to 1st parameter expecting 'nonnull'
data->fd = open(name, O_WRONLY | O_CREAT | O_NOCTTY, 0600);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/obex-server-tool.c:192:13: warning: Null pointer passed to 1st parameter expecting 'nonnull'
data->fd = open(name, O_RDONLY | O_NOCTTY, 0);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 warnings generated.
tools/btpclientctl.c:402:3: warning: Value stored to 'bit' is never read
bit = 0;
^ ~
tools/btpclientctl.c:1655:2: warning: Null pointer passed to 2nd parameter expecting 'nonnull'
memcpy(cp->data, ad_data, ad_len);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 warnings generated.
unit/test-uhid.c: In function ‘test_client’:
unit/test-uhid.c:234:66: error: passing argument 9 of ‘bt_uhid_create’ makes integer from pointer without a cast [-Werror=int-conversion]
234 | err = bt_uhid_create(context->uhid, "", NULL, NULL, 0, 0, 0, 0, NULL,
| ^~~~
| |
| void *
In file included from unit/test-uhid.c:25:
./src/shared/uhid.h:60:48: note: expected ‘uint8_t’ {aka ‘unsigned char’} but argument is of type ‘void *’
60 | uint32_t version, uint32_t country, uint8_t type,
| ~~~~~~~~^~~~
unit/test-uhid.c:234:8: error: too few arguments to function ‘bt_uhid_create’
234 | err = bt_uhid_create(context->uhid, "", NULL, NULL, 0, 0, 0, 0, NULL,
| ^~~~~~~~~~~~~~
In file included from unit/test-uhid.c:25:
./src/shared/uhid.h:58:5: note: declared here
58 | int bt_uhid_create(struct bt_uhid *uhid, const char *name, bdaddr_t *src,
| ^~~~~~~~~~~~~~
unit/test-uhid.c:240:9: error: too few arguments to function ‘bt_uhid_destroy’
240 | err = bt_uhid_destroy(context->uhid);
| ^~~~~~~~~~~~~~~
In file included from unit/test-uhid.c:25:
./src/shared/uhid.h:69:5: note: declared here
69 | int bt_uhid_destroy(struct bt_uhid *uhid, bool force);
| ^~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7809: unit/test-uhid.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:4651: all] Error 2


---
Regards,
Linux Bluetooth