diff options
3 files changed, 833 insertions, 0 deletions
diff --git a/meta-networking/recipes-connectivity/bluez-tools/bluez-tools/fix-memory-leaks.patch b/meta-networking/recipes-connectivity/bluez-tools/bluez-tools/fix-memory-leaks.patch new file mode 100644 index 0000000000..22e1fac855 --- /dev/null +++ b/meta-networking/recipes-connectivity/bluez-tools/bluez-tools/fix-memory-leaks.patch | |||
@@ -0,0 +1,768 @@ | |||
1 | Upstream-Status: Submitted [https://github.com/khvzak/bluez-tools/pull/48] | ||
2 | |||
3 | From e5db2eec2591f0109f0eb7c2631055210b55f2f5 Mon Sep 17 00:00:00 2001 | ||
4 | Message-Id: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
5 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
6 | Date: Sat, 7 Nov 2020 01:07:24 -0500 | ||
7 | Subject: [PATCH 1/9] Remove memory leaks and overall restructure | ||
8 | manager_find_adapter | ||
9 | |||
10 | --- | ||
11 | src/lib/manager.c | 61 +++++++++++++++++++++++++++++++++-------------- | ||
12 | 1 file changed, 43 insertions(+), 18 deletions(-) | ||
13 | |||
14 | diff --git a/src/lib/manager.c b/src/lib/manager.c | ||
15 | index 5286a3a..2263afc 100644 | ||
16 | --- a/src/lib/manager.c | ||
17 | +++ b/src/lib/manager.c | ||
18 | @@ -136,43 +136,68 @@ const gchar *manager_find_adapter(Manager *self, const gchar *pattern, GError ** | ||
19 | GVariant *ifaces_and_properties; | ||
20 | GVariantIter i; | ||
21 | |||
22 | + gchar *pattern_lowercase = g_ascii_strdown(pattern, -1); | ||
23 | + | ||
24 | g_variant_iter_init(&i, objects); | ||
25 | - while (g_variant_iter_next(&i, "{&o@a{sa{sv}}}", &object_path, &ifaces_and_properties)) | ||
26 | + gboolean still_looking = TRUE; | ||
27 | + while (still_looking && g_variant_iter_next(&i, "{&o@a{sa{sv}}}", &object_path, &ifaces_and_properties)) | ||
28 | { | ||
29 | const gchar *interface_name; | ||
30 | - GVariant *properties; | ||
31 | GVariantIter ii; | ||
32 | + GVariant* properties; | ||
33 | g_variant_iter_init(&ii, ifaces_and_properties); | ||
34 | while (g_variant_iter_next(&ii, "{&s@a{sv}}", &interface_name, &properties)) | ||
35 | { | ||
36 | - if (g_strstr_len(g_ascii_strdown(interface_name, -1), -1, "adapter")) | ||
37 | + gchar *interface_name_lowercase = g_ascii_strdown(interface_name, -1); | ||
38 | + if (strstr(interface_name_lowercase, "adapter")) | ||
39 | { | ||
40 | - const gchar *object_base_name = g_path_get_basename(object_path); | ||
41 | - if (g_strstr_len(g_ascii_strdown(object_base_name, -1), -1, g_ascii_strdown(pattern, -1))) | ||
42 | + g_free(interface_name_lowercase); | ||
43 | + | ||
44 | + gchar *object_base_name_original = g_path_get_basename(object_path); | ||
45 | + gchar *object_base_name = g_ascii_strdown(interface_name, -1); | ||
46 | + g_free(object_base_name_original); | ||
47 | + | ||
48 | + if (strstr(object_base_name, pattern_lowercase)) | ||
49 | { | ||
50 | - const gchar *retVal = g_strdup(object_path); | ||
51 | - g_variant_unref(properties); | ||
52 | - g_variant_unref(ifaces_and_properties); | ||
53 | - g_variant_unref(objects); | ||
54 | - return retVal; | ||
55 | + still_looking = FALSE; | ||
56 | + g_free(object_base_name); | ||
57 | + break; | ||
58 | } | ||
59 | - const gchar *address = g_variant_get_string(g_variant_lookup_value(properties, "Address", NULL), NULL); | ||
60 | - if (g_strstr_len(g_ascii_strdown(address, -1), -1, g_ascii_strdown(pattern, -1))) | ||
61 | + | ||
62 | + g_free(object_base_name); | ||
63 | + | ||
64 | + const gchar *address_original = g_variant_get_string(g_variant_lookup_value(properties, "Address", NULL), NULL); | ||
65 | + gchar *address = g_ascii_strdown(address_original, -1); | ||
66 | + | ||
67 | + if (strstr(address, pattern_lowercase)) | ||
68 | { | ||
69 | - gchar *retVal = g_strdup(object_path); | ||
70 | - g_variant_unref(properties); | ||
71 | - g_variant_unref(ifaces_and_properties); | ||
72 | - g_variant_unref(objects); | ||
73 | - return retVal; | ||
74 | + still_looking = FALSE; | ||
75 | + g_free(address); | ||
76 | + break; | ||
77 | } | ||
78 | + g_free(address); | ||
79 | } | ||
80 | + else | ||
81 | + { | ||
82 | + g_free(interface_name_lowercase); | ||
83 | + } | ||
84 | + | ||
85 | g_variant_unref(properties); | ||
86 | } | ||
87 | + | ||
88 | g_variant_unref(ifaces_and_properties); | ||
89 | } | ||
90 | g_variant_unref(objects); | ||
91 | + g_free(pattern_lowercase); | ||
92 | |||
93 | - return NULL; | ||
94 | + if (still_looking) | ||
95 | + { | ||
96 | + return NULL; | ||
97 | + } | ||
98 | + else | ||
99 | + { | ||
100 | + return object_path; | ||
101 | + } | ||
102 | } | ||
103 | |||
104 | GPtrArray *manager_get_adapters(Manager *self) | ||
105 | -- | ||
106 | 2.34.1 | ||
107 | |||
108 | |||
109 | From 163fcc94f1bc7c8f238e78adb03af914a566d979 Mon Sep 17 00:00:00 2001 | ||
110 | Message-Id: <163fcc94f1bc7c8f238e78adb03af914a566d979.1710791277.git.joerg.sommer@navimatix.de> | ||
111 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
112 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
113 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
114 | Date: Sat, 7 Nov 2020 22:12:21 -0500 | ||
115 | Subject: [PATCH 2/9] Replace manager_default_adapter with | ||
116 | manager_find_adapter(..., NULL, ...) | ||
117 | |||
118 | --- | ||
119 | src/lib/helpers.c | 57 ++++++++++++++++++----------------------------- | ||
120 | src/lib/manager.c | 51 +++++++++--------------------------------- | ||
121 | src/lib/manager.h | 1 - | ||
122 | 3 files changed, 33 insertions(+), 76 deletions(-) | ||
123 | |||
124 | diff --git a/src/lib/helpers.c b/src/lib/helpers.c | ||
125 | index d7e95f9..99561b5 100644 | ||
126 | --- a/src/lib/helpers.c | ||
127 | +++ b/src/lib/helpers.c | ||
128 | @@ -159,52 +159,39 @@ Adapter *find_adapter(const gchar *name, GError **error) | ||
129 | |||
130 | Manager *manager = g_object_new(MANAGER_TYPE, NULL); | ||
131 | |||
132 | - // If name is null or empty - return default adapter | ||
133 | - if (name == NULL || strlen(name) == 0) | ||
134 | + // Try to find by id | ||
135 | + adapter_path = (gchar *) manager_find_adapter(manager, name, error); | ||
136 | + | ||
137 | + // Found | ||
138 | + if (adapter_path) | ||
139 | { | ||
140 | - adapter_path = (gchar *) manager_default_adapter(manager, error); | ||
141 | - if (adapter_path) | ||
142 | - { | ||
143 | - // adapter = g_object_new(ADAPTER_TYPE, "DBusObjectPath", adapter_path, NULL); | ||
144 | - adapter = adapter_new(adapter_path); | ||
145 | - } | ||
146 | + // adapter = g_object_new(ADAPTER_TYPE, "DBusObjectPath", adapter_path, NULL); | ||
147 | + adapter = adapter_new(adapter_path); | ||
148 | } | ||
149 | else | ||
150 | { | ||
151 | - // Try to find by id | ||
152 | - adapter_path = (gchar *) manager_find_adapter(manager, name, error); | ||
153 | - | ||
154 | - // Found | ||
155 | - if (adapter_path) | ||
156 | + // Try to find by name | ||
157 | + const GPtrArray *adapters_list = manager_get_adapters(manager); | ||
158 | + g_assert(adapters_list != NULL); | ||
159 | + for (int i = 0; i < adapters_list->len; i++) | ||
160 | { | ||
161 | + adapter_path = g_ptr_array_index(adapters_list, i); | ||
162 | // adapter = g_object_new(ADAPTER_TYPE, "DBusObjectPath", adapter_path, NULL); | ||
163 | adapter = adapter_new(adapter_path); | ||
164 | - } | ||
165 | - else | ||
166 | - { | ||
167 | - // Try to find by name | ||
168 | - const GPtrArray *adapters_list = manager_get_adapters(manager); | ||
169 | - g_assert(adapters_list != NULL); | ||
170 | - for (int i = 0; i < adapters_list->len; i++) | ||
171 | + adapter_path = NULL; | ||
172 | + | ||
173 | + if (g_strcmp0(name, adapter_get_name(adapter, error)) == 0) | ||
174 | { | ||
175 | - adapter_path = g_ptr_array_index(adapters_list, i); | ||
176 | - // adapter = g_object_new(ADAPTER_TYPE, "DBusObjectPath", adapter_path, NULL); | ||
177 | - adapter = adapter_new(adapter_path); | ||
178 | - adapter_path = NULL; | ||
179 | - | ||
180 | - if (g_strcmp0(name, adapter_get_name(adapter, error)) == 0) | ||
181 | + if (*error) | ||
182 | { | ||
183 | - if (error) | ||
184 | - { | ||
185 | - g_error_free(*error); | ||
186 | - *error = NULL; | ||
187 | - } | ||
188 | - break; | ||
189 | + g_error_free(*error); | ||
190 | + *error = NULL; | ||
191 | } | ||
192 | - | ||
193 | - g_object_unref(adapter); | ||
194 | - adapter = NULL; | ||
195 | + break; | ||
196 | } | ||
197 | + | ||
198 | + g_object_unref(adapter); | ||
199 | + adapter = NULL; | ||
200 | } | ||
201 | } | ||
202 | |||
203 | diff --git a/src/lib/manager.c b/src/lib/manager.c | ||
204 | index 2263afc..891fc45 100644 | ||
205 | --- a/src/lib/manager.c | ||
206 | +++ b/src/lib/manager.c | ||
207 | @@ -84,45 +84,6 @@ GVariant *manager_get_managed_objects(Manager *self, GError **error) | ||
208 | return retVal; | ||
209 | } | ||
210 | |||
211 | -const gchar *manager_default_adapter(Manager *self, GError **error) | ||
212 | -{ | ||
213 | - g_assert(MANAGER_IS(self)); | ||
214 | - | ||
215 | - GVariant *objects = NULL; | ||
216 | - objects = manager_get_managed_objects(self, error); | ||
217 | - if (objects == NULL) | ||
218 | - return NULL; | ||
219 | - | ||
220 | - const gchar *object_path; | ||
221 | - GVariant *ifaces_and_properties; | ||
222 | - GVariantIter i; | ||
223 | - | ||
224 | - g_variant_iter_init(&i, objects); | ||
225 | - while (g_variant_iter_next(&i, "{&o@a{sa{sv}}}", &object_path, &ifaces_and_properties)) | ||
226 | - { | ||
227 | - const gchar *interface_name; | ||
228 | - GVariant *properties; | ||
229 | - GVariantIter ii; | ||
230 | - g_variant_iter_init(&ii, ifaces_and_properties); | ||
231 | - while (g_variant_iter_next(&ii, "{&s@a{sv}}", &interface_name, &properties)) | ||
232 | - { | ||
233 | - if (g_strstr_len(g_ascii_strdown(interface_name, -1), -1, "adapter")) | ||
234 | - { | ||
235 | - const gchar *retVal = g_strdup(object_path); | ||
236 | - g_variant_unref(properties); | ||
237 | - g_variant_unref(ifaces_and_properties); | ||
238 | - g_variant_unref(objects); | ||
239 | - return retVal; | ||
240 | - } | ||
241 | - g_variant_unref(properties); | ||
242 | - } | ||
243 | - g_variant_unref(ifaces_and_properties); | ||
244 | - } | ||
245 | - g_variant_unref(objects); | ||
246 | - | ||
247 | - return NULL; | ||
248 | -} | ||
249 | - | ||
250 | const gchar *manager_find_adapter(Manager *self, const gchar *pattern, GError **error) | ||
251 | { | ||
252 | g_assert(MANAGER_IS(self)); | ||
253 | @@ -136,7 +97,11 @@ const gchar *manager_find_adapter(Manager *self, const gchar *pattern, GError ** | ||
254 | GVariant *ifaces_and_properties; | ||
255 | GVariantIter i; | ||
256 | |||
257 | - gchar *pattern_lowercase = g_ascii_strdown(pattern, -1); | ||
258 | + gchar *pattern_lowercase = NULL; | ||
259 | + if (pattern != NULL) | ||
260 | + { | ||
261 | + pattern_lowercase = g_ascii_strdown(pattern, -1); | ||
262 | + } | ||
263 | |||
264 | g_variant_iter_init(&i, objects); | ||
265 | gboolean still_looking = TRUE; | ||
266 | @@ -153,6 +118,12 @@ const gchar *manager_find_adapter(Manager *self, const gchar *pattern, GError ** | ||
267 | { | ||
268 | g_free(interface_name_lowercase); | ||
269 | |||
270 | + if (!pattern_lowercase) | ||
271 | + { | ||
272 | + still_looking = FALSE; | ||
273 | + break; | ||
274 | + } | ||
275 | + | ||
276 | gchar *object_base_name_original = g_path_get_basename(object_path); | ||
277 | gchar *object_base_name = g_ascii_strdown(interface_name, -1); | ||
278 | g_free(object_base_name_original); | ||
279 | diff --git a/src/lib/manager.h b/src/lib/manager.h | ||
280 | index 0c9e052..b651812 100644 | ||
281 | --- a/src/lib/manager.h | ||
282 | +++ b/src/lib/manager.h | ||
283 | @@ -54,7 +54,6 @@ extern "C" { | ||
284 | * Method definitions. | ||
285 | */ | ||
286 | GVariant *manager_get_managed_objects(Manager *self, GError **error); | ||
287 | - const gchar *manager_default_adapter(Manager *self, GError **error); | ||
288 | const gchar *manager_find_adapter(Manager *self, const gchar *pattern, GError **error); | ||
289 | GPtrArray *manager_get_adapters(Manager *self); | ||
290 | const gchar **manager_get_devices(Manager *self, const gchar *adapter_pattern); | ||
291 | -- | ||
292 | 2.34.1 | ||
293 | |||
294 | |||
295 | From b463d9cfc2390ca6352c16e6f6e113cf42d0f688 Mon Sep 17 00:00:00 2001 | ||
296 | Message-Id: <b463d9cfc2390ca6352c16e6f6e113cf42d0f688.1710791277.git.joerg.sommer@navimatix.de> | ||
297 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
298 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
299 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
300 | Date: Sat, 7 Nov 2020 23:38:42 -0500 | ||
301 | Subject: [PATCH 3/9] Fix remaining g_ascii_strdown leaks | ||
302 | |||
303 | --- | ||
304 | src/lib/helpers.c | 2 +- | ||
305 | src/lib/manager.c | 5 ++++- | ||
306 | src/lib/properties.c | 4 ++-- | ||
307 | 3 files changed, 7 insertions(+), 4 deletions(-) | ||
308 | |||
309 | diff --git a/src/lib/helpers.c b/src/lib/helpers.c | ||
310 | index 99561b5..b61bc07 100644 | ||
311 | --- a/src/lib/helpers.c | ||
312 | +++ b/src/lib/helpers.c | ||
313 | @@ -242,7 +242,7 @@ Device *find_device(Adapter *adapter, const gchar *name, GError **error) | ||
314 | |||
315 | if(g_variant_lookup(properties, "Address", "s", &address)) | ||
316 | { | ||
317 | - if(g_strcmp0(g_ascii_strdown(address, -1), g_ascii_strdown(name, -1)) == 0) | ||
318 | + if(name && address && g_ascii_strcasecmp(address, name) == 0) | ||
319 | { | ||
320 | device = device_new(object_path); | ||
321 | } | ||
322 | diff --git a/src/lib/manager.c b/src/lib/manager.c | ||
323 | index 891fc45..d506ae6 100644 | ||
324 | --- a/src/lib/manager.c | ||
325 | +++ b/src/lib/manager.c | ||
326 | @@ -200,8 +200,11 @@ GPtrArray *manager_get_adapters(Manager *self) | ||
327 | g_variant_iter_init(&ii, ifaces_and_properties); | ||
328 | while (g_variant_iter_next(&ii, "{&s@a{sv}}", &interface_name, &properties)) | ||
329 | { | ||
330 | - if (g_strstr_len(g_ascii_strdown(interface_name, -1), -1, "adapter")) | ||
331 | + char* interface_name_lowercase = g_ascii_strdown(interface_name, -1); | ||
332 | + if (strstr(interface_name_lowercase, "adapter")) | ||
333 | g_ptr_array_add(adapter_array, (gpointer) g_strdup(object_path)); | ||
334 | + | ||
335 | + g_free(interface_name_lowercase); | ||
336 | g_variant_unref(properties); | ||
337 | } | ||
338 | g_variant_unref(ifaces_and_properties); | ||
339 | diff --git a/src/lib/properties.c b/src/lib/properties.c | ||
340 | index 8b913d5..70a7640 100644 | ||
341 | --- a/src/lib/properties.c | ||
342 | +++ b/src/lib/properties.c | ||
343 | @@ -205,12 +205,12 @@ static void _properties_create_gdbus_proxy(Properties *self, GError **error) | ||
344 | { | ||
345 | if(self->priv->dbus_type && self->priv->dbus_service_name && self->priv->dbus_object_path) | ||
346 | { | ||
347 | - if(g_ascii_strcasecmp(g_ascii_strdown(self->priv->dbus_type, -1), "system") == 0) | ||
348 | + if(g_ascii_strcasecmp(self->priv->dbus_type, "system") == 0) | ||
349 | { | ||
350 | g_assert(system_conn != NULL); | ||
351 | self->priv->proxy = g_dbus_proxy_new_sync(system_conn, G_DBUS_PROXY_FLAGS_NONE, NULL, self->priv->dbus_service_name, self->priv->dbus_object_path, PROPERTIES_DBUS_INTERFACE, NULL, error); | ||
352 | } | ||
353 | - else if(g_ascii_strcasecmp(g_ascii_strdown(self->priv->dbus_type, -1), "session") == 0) | ||
354 | + else if(g_ascii_strcasecmp(self->priv->dbus_type, "session") == 0) | ||
355 | { | ||
356 | g_assert(session_conn != NULL); | ||
357 | self->priv->proxy = g_dbus_proxy_new_sync(session_conn, G_DBUS_PROXY_FLAGS_NONE, NULL, self->priv->dbus_service_name, self->priv->dbus_object_path, PROPERTIES_DBUS_INTERFACE, NULL, error); | ||
358 | -- | ||
359 | 2.34.1 | ||
360 | |||
361 | |||
362 | From 7ca191164a3a3d8867b1a4af7cd349dc53569fa3 Mon Sep 17 00:00:00 2001 | ||
363 | Message-Id: <7ca191164a3a3d8867b1a4af7cd349dc53569fa3.1710791277.git.joerg.sommer@navimatix.de> | ||
364 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
365 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
366 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
367 | Date: Sun, 8 Nov 2020 14:04:36 -0500 | ||
368 | Subject: [PATCH 4/9] Don't leak g_variant_lookup_value results in bt-obex | ||
369 | |||
370 | --- | ||
371 | src/bt-obex.c | 23 ++++++++++++++++------- | ||
372 | 1 file changed, 16 insertions(+), 7 deletions(-) | ||
373 | |||
374 | diff --git a/src/bt-obex.c b/src/bt-obex.c | ||
375 | index 8aacb40..0f044a5 100644 | ||
376 | --- a/src/bt-obex.c | ||
377 | +++ b/src/bt-obex.c | ||
378 | @@ -213,15 +213,24 @@ static void _obex_opp_client_object_manager_handler(GDBusConnection *connection, | ||
379 | g_hash_table_insert(_transfers, g_strdup(interface_object_path), t); | ||
380 | |||
381 | ObexTransferInfo *info = g_malloc0(sizeof(ObexTransferInfo)); | ||
382 | - info->filesize = g_variant_get_uint64(g_variant_lookup_value(properties, "Size", NULL)); | ||
383 | - info->filename = g_strdup(g_variant_get_string(g_variant_lookup_value(properties, "Name", NULL), NULL)); | ||
384 | - info->status = g_strdup(g_variant_get_string(g_variant_lookup_value(properties, "Status", NULL), NULL)); | ||
385 | - ObexSession *session = obex_session_new(g_variant_get_string(g_variant_lookup_value(properties, "Session", NULL), NULL)); | ||
386 | - | ||
387 | + | ||
388 | + GVariant* size_variant = g_variant_lookup_value(properties, "Size", NULL); | ||
389 | + GVariant* name_variant = g_variant_lookup_value(properties, "Name", NULL); | ||
390 | + GVariant* status_variant = g_variant_lookup_value(properties, "Status", NULL); | ||
391 | + GVariant* session_variant = g_variant_lookup_value(properties, "Session", NULL); | ||
392 | + | ||
393 | + info->filesize = g_variant_get_uint64(size_variant); | ||
394 | + info->filename = g_variant_dup_string(name_variant, NULL); | ||
395 | + info->status = g_variant_dup_string(status_variant, NULL); | ||
396 | + ObexSession *session = obex_session_new(g_variant_get_string(session_variant, NULL)); | ||
397 | info->obex_root = g_strdup(obex_session_get_root(session, NULL)); | ||
398 | - | ||
399 | + | ||
400 | + g_variant_unref(size_variant); | ||
401 | + g_variant_unref(name_variant); | ||
402 | + g_variant_unref(status_variant); | ||
403 | + g_variant_unref(session_variant); | ||
404 | g_object_unref(session); | ||
405 | - | ||
406 | + | ||
407 | g_hash_table_insert(_transfer_infos, g_strdup(interface_object_path), info); | ||
408 | if(g_strcmp0(info->status, "queued") == 0) | ||
409 | g_print("[Transfer#%s] Waiting...\n", info->filename); | ||
410 | -- | ||
411 | 2.34.1 | ||
412 | |||
413 | |||
414 | From 7100380b710b36f8e31748ac5bf0e6ffb7c4eed7 Mon Sep 17 00:00:00 2001 | ||
415 | Message-Id: <7100380b710b36f8e31748ac5bf0e6ffb7c4eed7.1710791277.git.joerg.sommer@navimatix.de> | ||
416 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
417 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
418 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
419 | Date: Thu, 12 Nov 2020 21:41:55 -0500 | ||
420 | Subject: [PATCH 5/9] Correctly free temporary values in bt-obex | ||
421 | |||
422 | --- | ||
423 | src/bt-obex.c | 35 +++++++++++++++++++++++++---------- | ||
424 | src/lib/helpers.c | 3 ++- | ||
425 | 2 files changed, 27 insertions(+), 11 deletions(-) | ||
426 | |||
427 | diff --git a/src/bt-obex.c b/src/bt-obex.c | ||
428 | index 0f044a5..547186b 100644 | ||
429 | --- a/src/bt-obex.c | ||
430 | +++ b/src/bt-obex.c | ||
431 | @@ -70,25 +70,32 @@ static void _obex_server_object_manager_handler(GDBusConnection *connection, con | ||
432 | const gchar *interface_object_path = g_variant_get_string(g_variant_get_child_value(parameters, 0), NULL); | ||
433 | GVariant *interfaces_and_properties = g_variant_get_child_value(parameters, 1); | ||
434 | GVariant *properties = NULL; | ||
435 | - | ||
436 | + | ||
437 | if(g_variant_lookup(interfaces_and_properties, OBEX_TRANSFER_DBUS_INTERFACE, "@a{sv}", &properties)) | ||
438 | { | ||
439 | g_print("[OBEX Server] Transfer started\n"); | ||
440 | ObexTransfer *t = obex_transfer_new(interface_object_path); | ||
441 | g_hash_table_insert(_transfers, g_strdup(interface_object_path), t); | ||
442 | - | ||
443 | + | ||
444 | + GVariant* size_variant = g_variant_lookup_value(properties, "Size", NULL); | ||
445 | + GVariant* status_variant = g_variant_lookup_value(properties, "Status", NULL); | ||
446 | + GVariant* session_variant = g_variant_lookup_value(properties, "Session", NULL); | ||
447 | + | ||
448 | ObexTransferInfo *info = g_malloc0(sizeof(ObexTransferInfo)); | ||
449 | - info->filesize = g_variant_get_uint64(g_variant_lookup_value(properties, "Size", NULL)); | ||
450 | - info->status = g_strdup(g_variant_get_string(g_variant_lookup_value(properties, "Status", NULL), NULL)); | ||
451 | - ObexSession *session = obex_session_new(g_variant_get_string(g_variant_lookup_value(properties, "Session", NULL), NULL)); | ||
452 | - | ||
453 | + info->filesize = g_variant_get_uint64(size_variant); | ||
454 | + info->status = g_strdup(g_variant_get_string(status_variant, NULL)); | ||
455 | + | ||
456 | + ObexSession *session = obex_session_new(g_variant_get_string(session_variant, NULL)); | ||
457 | info->obex_root = g_strdup(obex_session_get_root(session, NULL)); | ||
458 | - | ||
459 | g_object_unref(session); | ||
460 | + | ||
461 | + g_variant_unref(size_variant); | ||
462 | + g_variant_unref(status_variant); | ||
463 | + g_variant_unref(session_variant); | ||
464 | |||
465 | g_hash_table_insert(_transfer_infos, g_strdup(interface_object_path), info); | ||
466 | } | ||
467 | - | ||
468 | + | ||
469 | if(g_variant_lookup(interfaces_and_properties, OBEX_SESSION_DBUS_INTERFACE, "@a{sv}", &properties)) | ||
470 | { | ||
471 | g_print("[OBEX Server] OBEX session opened\n"); | ||
472 | @@ -177,7 +184,12 @@ static void _obex_server_properties_handler(GDBusConnection *connection, const g | ||
473 | { | ||
474 | g_print("[OBEX Server] Transfer succeeded\n"); | ||
475 | ObexTransferInfo *info = g_hash_table_lookup(_transfer_infos, object_path); | ||
476 | - g_rename(g_build_filename(info->obex_root, info->filename, NULL), g_build_filename(_root_path, info->filename, NULL)); | ||
477 | + | ||
478 | + gchar* old_name = g_build_filename(info->obex_root, info->filename, NULL); | ||
479 | + gchar* new_name = g_build_filename(_root_path, info->filename, NULL); | ||
480 | + g_rename(old_name, new_name); | ||
481 | + g_free(old_name); | ||
482 | + g_free(new_name); | ||
483 | } | ||
484 | else if(g_strcmp0(status, "error") == 0) | ||
485 | { | ||
486 | @@ -202,7 +214,8 @@ static void _obex_opp_client_object_manager_handler(GDBusConnection *connection, | ||
487 | { | ||
488 | if(g_strcmp0(signal_name, "InterfacesAdded") == 0) | ||
489 | { | ||
490 | - const gchar *interface_object_path = g_variant_get_string(g_variant_get_child_value(parameters, 0), NULL); | ||
491 | + GVariant* interface_value = g_variant_get_child_value(parameters, 0); | ||
492 | + const gchar *interface_object_path = g_variant_get_string(interface_value, NULL); | ||
493 | GVariant *interfaces_and_properties = g_variant_get_child_value(parameters, 1); | ||
494 | GVariant *properties = NULL; | ||
495 | |||
496 | @@ -242,6 +255,8 @@ static void _obex_opp_client_object_manager_handler(GDBusConnection *connection, | ||
497 | } | ||
498 | |||
499 | g_variant_unref(interfaces_and_properties); | ||
500 | + g_variant_unref(interface_value); | ||
501 | + | ||
502 | if(properties) | ||
503 | g_variant_unref(properties); | ||
504 | } | ||
505 | diff --git a/src/lib/helpers.c b/src/lib/helpers.c | ||
506 | index b61bc07..d9e2257 100644 | ||
507 | --- a/src/lib/helpers.c | ||
508 | +++ b/src/lib/helpers.c | ||
509 | @@ -171,7 +171,7 @@ Adapter *find_adapter(const gchar *name, GError **error) | ||
510 | else | ||
511 | { | ||
512 | // Try to find by name | ||
513 | - const GPtrArray *adapters_list = manager_get_adapters(manager); | ||
514 | + GPtrArray *adapters_list = manager_get_adapters(manager); | ||
515 | g_assert(adapters_list != NULL); | ||
516 | for (int i = 0; i < adapters_list->len; i++) | ||
517 | { | ||
518 | @@ -193,6 +193,7 @@ Adapter *find_adapter(const gchar *name, GError **error) | ||
519 | g_object_unref(adapter); | ||
520 | adapter = NULL; | ||
521 | } | ||
522 | + g_ptr_array_unref(adapters_list); | ||
523 | } | ||
524 | |||
525 | g_object_unref(manager); | ||
526 | -- | ||
527 | 2.34.1 | ||
528 | |||
529 | |||
530 | From 860fb6e19a7bc272722c36a980004044bc9906e5 Mon Sep 17 00:00:00 2001 | ||
531 | Message-Id: <860fb6e19a7bc272722c36a980004044bc9906e5.1710791277.git.joerg.sommer@navimatix.de> | ||
532 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
533 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
534 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
535 | Date: Thu, 12 Nov 2020 21:45:51 -0500 | ||
536 | Subject: [PATCH 6/9] Use g_hash_table_new_full() instead of manual freeing | ||
537 | |||
538 | --- | ||
539 | src/bt-obex.c | 56 +++++++++++++++++---------------------------------- | ||
540 | 1 file changed, 18 insertions(+), 38 deletions(-) | ||
541 | |||
542 | diff --git a/src/bt-obex.c b/src/bt-obex.c | ||
543 | index 547186b..413c12d 100644 | ||
544 | --- a/src/bt-obex.c | ||
545 | +++ b/src/bt-obex.c | ||
546 | @@ -55,6 +55,14 @@ struct _ObexTransferInfo { | ||
547 | gchar *status; | ||
548 | }; | ||
549 | |||
550 | +static void obex_transfer_info_free(ObexTransferInfo* info) | ||
551 | +{ | ||
552 | + g_free(info->filename); | ||
553 | + g_free(info->obex_root); | ||
554 | + g_free(info->status); | ||
555 | + g_free(info); | ||
556 | +} | ||
557 | + | ||
558 | static void sigterm_handler(int sig) | ||
559 | { | ||
560 | g_message("%s received", sig == SIGTERM ? "SIGTERM" : "SIGINT"); | ||
561 | @@ -117,10 +125,7 @@ static void _obex_server_object_manager_handler(GDBusConnection *connection, con | ||
562 | if(g_strcmp0(*inf, OBEX_TRANSFER_DBUS_INTERFACE) == 0) | ||
563 | { | ||
564 | g_print("[OBEX Server] OBEX transfer closed\n"); | ||
565 | - ObexTransfer *transfer = g_hash_table_lookup(_transfers, interface_object_path); | ||
566 | g_hash_table_remove(_transfers, interface_object_path); | ||
567 | - g_object_unref(transfer); | ||
568 | - g_free(g_hash_table_lookup(_transfer_infos, interface_object_path)); | ||
569 | g_hash_table_remove(_transfer_infos, interface_object_path); | ||
570 | } | ||
571 | |||
572 | @@ -272,10 +277,7 @@ static void _obex_opp_client_object_manager_handler(GDBusConnection *connection, | ||
573 | if(g_strcmp0(*inf, OBEX_TRANSFER_DBUS_INTERFACE) == 0) | ||
574 | { | ||
575 | // g_print("[OBEX Client] OBEX transfer closed\n"); | ||
576 | - ObexTransfer *transfer = g_hash_table_lookup(_transfers, interface_object_path); | ||
577 | g_hash_table_remove(_transfers, interface_object_path); | ||
578 | - g_object_unref(transfer); | ||
579 | - g_free(g_hash_table_lookup(_transfer_infos, interface_object_path)); | ||
580 | g_hash_table_remove(_transfer_infos, interface_object_path); | ||
581 | if (g_main_loop_is_running(mainloop)) | ||
582 | g_main_loop_quit(mainloop); | ||
583 | @@ -514,8 +516,8 @@ int main(int argc, char *argv[]) | ||
584 | exit_if_error(error); | ||
585 | } | ||
586 | |||
587 | - _transfers = g_hash_table_new(g_str_hash, g_str_equal); | ||
588 | - _transfer_infos = g_hash_table_new(g_str_hash, g_str_equal); | ||
589 | + _transfers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref); | ||
590 | + _transfer_infos = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)obex_transfer_info_free); | ||
591 | |||
592 | ObexAgentManager *manager = obex_agent_manager_new(); | ||
593 | |||
594 | @@ -552,21 +554,10 @@ int main(int argc, char *argv[]) | ||
595 | g_hash_table_iter_init(&iter, _transfers); | ||
596 | while (g_hash_table_iter_next(&iter, &key, &value)) | ||
597 | { | ||
598 | - ObexTransfer *t = OBEX_TRANSFER(value); | ||
599 | - obex_transfer_cancel(t, NULL); // skip errors | ||
600 | - g_object_unref(t); | ||
601 | - g_hash_table_iter_remove(&iter); | ||
602 | - } | ||
603 | - g_hash_table_unref(_transfers); | ||
604 | - | ||
605 | - // Remove transfer information | ||
606 | - g_hash_table_iter_init(&iter, _transfer_infos); | ||
607 | - while (g_hash_table_iter_next(&iter, &key, &value)) | ||
608 | - { | ||
609 | - g_free(value); | ||
610 | - g_hash_table_iter_remove(&iter); | ||
611 | + obex_transfer_cancel(OBEX_TRANSFER(value), NULL); | ||
612 | } | ||
613 | g_hash_table_unref(_transfers); | ||
614 | + g_hash_table_unref(_transfer_infos); | ||
615 | |||
616 | g_dbus_connection_signal_unsubscribe(session_conn, obex_server_object_id); | ||
617 | g_dbus_connection_signal_unsubscribe(session_conn, obex_server_properties_id); | ||
618 | @@ -588,8 +579,8 @@ int main(int argc, char *argv[]) | ||
619 | exit_if_error(error); | ||
620 | } | ||
621 | |||
622 | - _transfers = g_hash_table_new(g_str_hash, g_str_equal); | ||
623 | - _transfer_infos = g_hash_table_new(g_str_hash, g_str_equal); | ||
624 | + _transfers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref); | ||
625 | + _transfer_infos = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); | ||
626 | |||
627 | gchar * files_to_send[] = {NULL, NULL}; | ||
628 | files_to_send[0] = g_path_is_absolute(opp_file_arg) ? g_strdup(opp_file_arg) : get_absolute_path(opp_file_arg); | ||
629 | @@ -663,24 +654,13 @@ int main(int argc, char *argv[]) | ||
630 | g_hash_table_iter_init(&iter, _transfers); | ||
631 | while (g_hash_table_iter_next(&iter, &key, &value)) | ||
632 | { | ||
633 | - ObexTransfer *t = OBEX_TRANSFER(value); | ||
634 | - obex_transfer_cancel(t, NULL); // skip errors | ||
635 | - g_object_unref(t); | ||
636 | - g_hash_table_iter_remove(&iter); | ||
637 | + obex_transfer_cancel(OBEX_TRANSFER(value), NULL); | ||
638 | } | ||
639 | g_hash_table_unref(_transfers); | ||
640 | - | ||
641 | - // Remove transfer information objects | ||
642 | - g_hash_table_iter_init(&iter, _transfer_infos); | ||
643 | - while (g_hash_table_iter_next(&iter, &key, &value)) | ||
644 | - { | ||
645 | - g_free(value); | ||
646 | - g_hash_table_iter_remove(&iter); | ||
647 | - } | ||
648 | - g_hash_table_unref(_transfers); | ||
649 | - | ||
650 | - g_object_unref(client); | ||
651 | |||
652 | + g_hash_table_unref(_transfer_infos); | ||
653 | + g_object_unref(client); | ||
654 | + g_object_unref(session); | ||
655 | g_variant_unref(device_dict); | ||
656 | |||
657 | g_free(src_address); | ||
658 | -- | ||
659 | 2.34.1 | ||
660 | |||
661 | |||
662 | From 9804eb7e5996c52cc542eef59ba3b5f4d0b0b2f9 Mon Sep 17 00:00:00 2001 | ||
663 | Message-Id: <9804eb7e5996c52cc542eef59ba3b5f4d0b0b2f9.1710791277.git.joerg.sommer@navimatix.de> | ||
664 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
665 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
666 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
667 | Date: Thu, 12 Nov 2020 21:51:34 -0500 | ||
668 | Subject: [PATCH 7/9] Don't set filesize if we don't know the size | ||
669 | |||
670 | I only meant to fix the g_variant_unref warning, but fixing all of them | ||
671 | works too! | ||
672 | --- | ||
673 | src/bt-obex.c | 12 ++++++++++-- | ||
674 | 1 file changed, 10 insertions(+), 2 deletions(-) | ||
675 | |||
676 | diff --git a/src/bt-obex.c b/src/bt-obex.c | ||
677 | index 413c12d..219d458 100644 | ||
678 | --- a/src/bt-obex.c | ||
679 | +++ b/src/bt-obex.c | ||
680 | @@ -90,14 +90,22 @@ static void _obex_server_object_manager_handler(GDBusConnection *connection, con | ||
681 | GVariant* session_variant = g_variant_lookup_value(properties, "Session", NULL); | ||
682 | |||
683 | ObexTransferInfo *info = g_malloc0(sizeof(ObexTransferInfo)); | ||
684 | - info->filesize = g_variant_get_uint64(size_variant); | ||
685 | info->status = g_strdup(g_variant_get_string(status_variant, NULL)); | ||
686 | |||
687 | ObexSession *session = obex_session_new(g_variant_get_string(session_variant, NULL)); | ||
688 | info->obex_root = g_strdup(obex_session_get_root(session, NULL)); | ||
689 | g_object_unref(session); | ||
690 | |||
691 | - g_variant_unref(size_variant); | ||
692 | + if (size_variant != NULL) | ||
693 | + { | ||
694 | + info->filesize = g_variant_get_uint64(size_variant); | ||
695 | + g_variant_unref(size_variant); | ||
696 | + } | ||
697 | + else | ||
698 | + { | ||
699 | + info->filesize = 0; | ||
700 | + } | ||
701 | + | ||
702 | g_variant_unref(status_variant); | ||
703 | g_variant_unref(session_variant); | ||
704 | |||
705 | -- | ||
706 | 2.34.1 | ||
707 | |||
708 | |||
709 | From 9566f84464d486983ec597945bc4d5d1594ed830 Mon Sep 17 00:00:00 2001 | ||
710 | Message-Id: <9566f84464d486983ec597945bc4d5d1594ed830.1710791277.git.joerg.sommer@navimatix.de> | ||
711 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
712 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
713 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
714 | Date: Sun, 15 Nov 2020 16:18:36 -0500 | ||
715 | Subject: [PATCH 8/9] Fix a use-after-free in bt-obex | ||
716 | |||
717 | --- | ||
718 | src/bt-obex.c | 2 +- | ||
719 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
720 | |||
721 | diff --git a/src/bt-obex.c b/src/bt-obex.c | ||
722 | index 219d458..7dc5d6b 100644 | ||
723 | --- a/src/bt-obex.c | ||
724 | +++ b/src/bt-obex.c | ||
725 | @@ -626,7 +626,7 @@ int main(int argc, char *argv[]) | ||
726 | mainloop = g_main_loop_new(NULL, FALSE); | ||
727 | |||
728 | ObexClient *client = obex_client_new(); | ||
729 | - const gchar *session_path = obex_client_create_session(client, dst_address, device_dict, &error); | ||
730 | + const gchar *session_path = obex_client_create_session(client, dst_address, g_variant_ref(device_dict), &error); | ||
731 | exit_if_error(error); | ||
732 | ObexSession *session = obex_session_new(session_path); | ||
733 | ObexObjectPush *oop = obex_object_push_new(obex_session_get_dbus_object_path(session)); | ||
734 | -- | ||
735 | 2.34.1 | ||
736 | |||
737 | |||
738 | From 5271a4c6419b54a0b18070d39bfc69fae2819c00 Mon Sep 17 00:00:00 2001 | ||
739 | Message-Id: <5271a4c6419b54a0b18070d39bfc69fae2819c00.1710791277.git.joerg.sommer@navimatix.de> | ||
740 | In-Reply-To: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
741 | References: <e5db2eec2591f0109f0eb7c2631055210b55f2f5.1710791277.git.joerg.sommer@navimatix.de> | ||
742 | From: thatlittlegit <personal@thatlittlegit.tk> | ||
743 | Date: Sat, 21 Nov 2020 13:09:46 -0500 | ||
744 | Subject: [PATCH 9/9] Fix running sdptool if it isn't in $PATH | ||
745 | |||
746 | --- | ||
747 | src/bt-device.c | 4 ++-- | ||
748 | 1 file changed, 2 insertions(+), 2 deletions(-) | ||
749 | |||
750 | diff --git a/src/bt-device.c b/src/bt-device.c | ||
751 | index a739b98..948a10c 100644 | ||
752 | --- a/src/bt-device.c | ||
753 | +++ b/src/bt-device.c | ||
754 | @@ -331,9 +331,9 @@ static GHashTable *_bt_device_sdp_browse(const gchar *device_path, const gchar * | ||
755 | } | ||
756 | |||
757 | if(pattern == NULL || strlen(pattern) == 0) | ||
758 | - execl("/bin/sdptool", "/bin/sdptool", "browse", "--xml", device_path, (char *) 0); | ||
759 | + execlp("sdptool", "sdptool", "browse", "--xml", device_path, (char *) 0); | ||
760 | else | ||
761 | - execl("/bin/sdptool", "/bin/sdptool", "browse", "--xml", "--uuid", pattern, device_path, (char *) 0); | ||
762 | + execlp("sdptool", "sdptool", "browse", "--xml", "--uuid", pattern, device_path, (char *) 0); | ||
763 | |||
764 | } | ||
765 | if(pid == -1) | ||
766 | -- | ||
767 | 2.34.1 | ||
768 | |||
diff --git a/meta-networking/recipes-connectivity/bluez-tools/bluez-tools/obex-file-fix-null-check.patch b/meta-networking/recipes-connectivity/bluez-tools/bluez-tools/obex-file-fix-null-check.patch new file mode 100644 index 0000000000..231f3b0b71 --- /dev/null +++ b/meta-networking/recipes-connectivity/bluez-tools/bluez-tools/obex-file-fix-null-check.patch | |||
@@ -0,0 +1,41 @@ | |||
1 | Upstream-Status: Submitted [https://github.com/khvzak/bluez-tools/pull/47] | ||
2 | |||
3 | From f9bc83d46f131037f7fa5195a506b65560199d0d Mon Sep 17 00:00:00 2001 | ||
4 | Message-Id: <f9bc83d46f131037f7fa5195a506b65560199d0d.1710791715.git.joerg.sommer@navimatix.de> | ||
5 | From: George Talusan <george.talusan@gmail.com> | ||
6 | Date: Mon, 26 Oct 2020 21:35:51 -0400 | ||
7 | Subject: [PATCH] fix null checks | ||
8 | |||
9 | --- | ||
10 | src/lib/bluez/obex/obex_file_transfer.c | 6 +++--- | ||
11 | 1 file changed, 3 insertions(+), 3 deletions(-) | ||
12 | |||
13 | diff --git a/src/lib/bluez/obex/obex_file_transfer.c b/src/lib/bluez/obex/obex_file_transfer.c | ||
14 | index 2d3dafe..91c41d6 100644 | ||
15 | --- a/src/lib/bluez/obex/obex_file_transfer.c | ||
16 | +++ b/src/lib/bluez/obex/obex_file_transfer.c | ||
17 | @@ -194,7 +194,7 @@ GVariant *obex_file_transfer_get_file(ObexFileTransfer *self, const gchar *targe | ||
18 | g_assert(OBEX_FILE_TRANSFER_IS(self)); | ||
19 | GVariant *ret = NULL; | ||
20 | GVariant *proxy_ret = g_dbus_proxy_call_sync(self->priv->proxy, "GetFile", g_variant_new ("(ss)", targetfile, sourcefile), G_DBUS_CALL_FLAGS_NONE, -1, NULL, error); | ||
21 | - if (proxy_ret != NULL) | ||
22 | + if (proxy_ret == NULL) | ||
23 | return NULL; | ||
24 | ret = g_variant_ref_sink(proxy_ret); | ||
25 | g_variant_unref(proxy_ret); | ||
26 | @@ -228,9 +228,9 @@ GVariant *obex_file_transfer_put_file(ObexFileTransfer *self, const gchar *sourc | ||
27 | g_assert(OBEX_FILE_TRANSFER_IS(self)); | ||
28 | GVariant *ret = NULL; | ||
29 | GVariant *proxy_ret = g_dbus_proxy_call_sync(self->priv->proxy, "PutFile", g_variant_new ("(ss)", targetfile, sourcefile), G_DBUS_CALL_FLAGS_NONE, -1, NULL, error); | ||
30 | - if (proxy_ret != NULL) | ||
31 | + if (proxy_ret == NULL) | ||
32 | return NULL; | ||
33 | ret = g_variant_ref_sink(proxy_ret); | ||
34 | g_variant_unref(proxy_ret); | ||
35 | return ret; | ||
36 | -} | ||
37 | \ No newline at end of file | ||
38 | +} | ||
39 | -- | ||
40 | 2.34.1 | ||
41 | |||
diff --git a/meta-networking/recipes-connectivity/bluez-tools/bluez-tools_git.bb b/meta-networking/recipes-connectivity/bluez-tools/bluez-tools_git.bb new file mode 100644 index 0000000000..22005632c2 --- /dev/null +++ b/meta-networking/recipes-connectivity/bluez-tools/bluez-tools_git.bb | |||
@@ -0,0 +1,24 @@ | |||
1 | SUMMARY = "Bluez Tools" | ||
2 | DESCRIPTION = "\ | ||
3 | Additional tools for bluez5 to list, manage, and show inforations about \ | ||
4 | adapters, agents, devices, network connections, and obex. \ | ||
5 | " | ||
6 | HOMEPAGE = "https://github.com/khvzak/bluez-tools" | ||
7 | BUGTRACKER = "https://github.com/khvzak/bluez-tools/issues" | ||
8 | LICENSE = "GPL-2.0-only" | ||
9 | LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e" | ||
10 | |||
11 | DEPENDS = "dbus-glib glib-2.0 readline" | ||
12 | |||
13 | SRC_URI = "\ | ||
14 | git://github.com/khvzak/bluez-tools.git;protocol=https;branch=master \ | ||
15 | file://fix-memory-leaks.patch \ | ||
16 | file://obex-file-fix-null-check.patch \ | ||
17 | " | ||
18 | SRCREV = "f65321736475429316f07ee94ec0deac8e46ec4a" | ||
19 | |||
20 | S = "${WORKDIR}/git" | ||
21 | |||
22 | inherit autotools pkgconfig | ||
23 | |||
24 | RDEPENDS:${PN} = "bluez5" | ||