All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Devoogdt <thomas.devoogdt@gmail.com>
To: buildroot@buildroot.org
Cc: Thomas Devoogdt <thomas.devoogdt@gmail.com>,
	Marcin Bis <marcin@bis.org.pl>
Subject: [Buildroot] [PATCH] package/bluez5_utils: fix build with libglib2 >= 2.69
Date: Sun,  6 Feb 2022 10:04:26 +0100	[thread overview]
Message-ID: <20220206090426.15583-1-thomas.devoogdt@gmail.com> (raw)

Fix the following build failure raised since bump of libglib2 to version
2.70 in commit 079923d:

profiles/battery/battery.c:162:2: warning: 'g_memdup' is deprecated (declared at /home/buildroot/autobuild/instance-0/output-1/host/bin/../arm-buildroot-linux-gnueabi/sysroot/usr/include/glib-2.0/glib/gstrfuncs.h:257): Use 'g_memdup2' instead [-Wdeprecated-declarations]
  batt->initial_value = g_memdup(value, length);

Fixes:
 - http://autobuild.buildroot.org/results/6b8/6b8870d12e0804d6154230a7322c49416c1dc0e2/build-end.log

Sources:
 - https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/?id=710220f861b100856711a0a4d4a852874228a57a
 - https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/?id=9f09e69ecb077082301dafb745856e1f3731aaa7
 - https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/?id=cfab569484b18407fc117bb96634525cc76ea1f5

Signed-off-by: Thomas Devoogdt <thomas.devoogdt@gmail.com>
---
 ...-tools-mesh-cfgtest-include-limits.h.patch |    6 +-
 ...til-Rename-btd_malloc-to-util_malloc.patch |   67 +
 .../0003-shared-util-Add-util_memdup.patch    |   57 +
 ...ace-use-of-g_memdup-with-util_memdup.patch | 1411 +++++++++++++++++
 4 files changed, 1538 insertions(+), 3 deletions(-)
 create mode 100644 package/bluez5_utils/0002-shared-util-Rename-btd_malloc-to-util_malloc.patch
 create mode 100644 package/bluez5_utils/0003-shared-util-Add-util_memdup.patch
 create mode 100644 package/bluez5_utils/0004-build-Replace-use-of-g_memdup-with-util_memdup.patch

diff --git a/package/bluez5_utils/0001-tools-mesh-cfgtest-include-limits.h.patch b/package/bluez5_utils/0001-tools-mesh-cfgtest-include-limits.h.patch
index 7f1197357f..57f363a7fd 100644
--- a/package/bluez5_utils/0001-tools-mesh-cfgtest-include-limits.h.patch
+++ b/package/bluez5_utils/0001-tools-mesh-cfgtest-include-limits.h.patch
@@ -1,7 +1,7 @@
-From 5158827fded7cb4daf550a5956aff0c74f6c38fc Mon Sep 17 00:00:00 2001
+From 1cf621cae3844f31bdac85298f4ae736be5488f6 Mon Sep 17 00:00:00 2001
 From: Michael Nosthoff <bluez@heine.tech>
 Date: Thu, 22 Jul 2021 21:36:13 +0200
-Subject: [PATCH] tools/mesh-cfgtest: include limits.h
+Subject: [PATCH 1/4] tools/mesh-cfgtest: include limits.h
 
 mesh-cfgtest.c uses PATH_MAX so it should include limits.h.
 
@@ -29,5 +29,5 @@ index fa0474faa..116ab7f16 100644
  #include <stdio.h>
  #include <time.h>
 -- 
-2.32.0
+2.17.1
 
diff --git a/package/bluez5_utils/0002-shared-util-Rename-btd_malloc-to-util_malloc.patch b/package/bluez5_utils/0002-shared-util-Rename-btd_malloc-to-util_malloc.patch
new file mode 100644
index 0000000000..ac5d4a6c3f
--- /dev/null
+++ b/package/bluez5_utils/0002-shared-util-Rename-btd_malloc-to-util_malloc.patch
@@ -0,0 +1,67 @@
+From f3263fed28bf510a1225661fe2b5f598300c11cd Mon Sep 17 00:00:00 2001
+From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
+Date: Wed, 5 Jan 2022 15:53:35 -0800
+Subject: [PATCH 2/4] shared/util: Rename btd_malloc to util_malloc
+
+util functions are not limited to daemon only which is normally the case
+when using btd prefix.
+
+(cherry picked from commit 710220f861b100856711a0a4d4a852874228a57a)
+Signed-off-by: Thomas Devoogdt <thomas.devoogdt@gmail.com>
+---
+ profiles/audio/avdtp.c | 2 +-
+ src/shared/util.c      | 2 +-
+ src/shared/util.h      | 4 ++--
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/profiles/audio/avdtp.c b/profiles/audio/avdtp.c
+index d3dfbf96d..f2b461330 100644
+--- a/profiles/audio/avdtp.c
++++ b/profiles/audio/avdtp.c
+@@ -1333,7 +1333,7 @@ static GSList *caps_to_list(uint8_t *data, size_t size,
+ 			break;
+ 		}
+ 
+-		cpy = btd_malloc(sizeof(*cpy) + cap->length);
++		cpy = util_malloc(sizeof(*cpy) + cap->length);
+ 		memcpy(cpy, cap, sizeof(*cap) + cap->length);
+ 
+ 		size -= sizeof(*cap) + cap->length;
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 81b20d86f..93110047b 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -25,7 +25,7 @@
+ 
+ #include "src/shared/util.h"
+ 
+-void *btd_malloc(size_t size)
++void *util_malloc(size_t size)
+ {
+ 	if (__builtin_expect(!!size, 1)) {
+ 		void *ptr;
+diff --git a/src/shared/util.h b/src/shared/util.h
+index ac70117ca..11d09979d 100644
+--- a/src/shared/util.h
++++ b/src/shared/util.h
+@@ -75,7 +75,7 @@ do {						\
+ 		size_t __n = (size_t) (count);	\
+ 		size_t __s = sizeof(type);	\
+ 		void *__p;			\
+-		__p = btd_malloc(__n * __s);	\
++		__p = util_malloc(__n * __s);	\
+ 		memset(__p, 0, __n * __s);	\
+ 		__p;				\
+ 	}))
+@@ -86,7 +86,7 @@ do {						\
+ char *strdelimit(char *str, char *del, char c);
+ int strsuffix(const char *str, const char *suffix);
+ 
+-void *btd_malloc(size_t size);
++void *util_malloc(size_t size);
+ 
+ typedef void (*util_debug_func_t)(const char *str, void *user_data);
+ 
+-- 
+2.17.1
+
diff --git a/package/bluez5_utils/0003-shared-util-Add-util_memdup.patch b/package/bluez5_utils/0003-shared-util-Add-util_memdup.patch
new file mode 100644
index 0000000000..ff39d19f3e
--- /dev/null
+++ b/package/bluez5_utils/0003-shared-util-Add-util_memdup.patch
@@ -0,0 +1,57 @@
+From 28f1c140374d1ecda65e3d59cca72352c3a07774 Mon Sep 17 00:00:00 2001
+From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
+Date: Thu, 6 Jan 2022 11:45:12 -0800
+Subject: [PATCH 3/4] shared/util: Add util_memdup
+
+This adds util_memdup which is intended to replace g_memdup since
+replacing that with g_memdup2 requires bumping the glib version.
+
+(cherry picked from commit 9f09e69ecb077082301dafb745856e1f3731aaa7)
+Signed-off-by: Thomas Devoogdt <thomas.devoogdt@gmail.com>
+---
+ src/shared/util.c | 16 ++++++++++++++++
+ src/shared/util.h |  1 +
+ 2 files changed, 17 insertions(+)
+
+diff --git a/src/shared/util.c b/src/shared/util.c
+index 93110047b..6e1c83057 100644
+--- a/src/shared/util.c
++++ b/src/shared/util.c
+@@ -41,6 +41,22 @@ void *util_malloc(size_t size)
+ 	return NULL;
+ }
+ 
++void *util_memdup(const void *src, size_t size)
++{
++	void *cpy;
++
++	if (!src || !size)
++		return NULL;
++
++	cpy = util_malloc(size);
++	if (!cpy)
++		return NULL;
++
++	memcpy(cpy, src, size);
++
++	return cpy;
++}
++
+ void util_debug_va(util_debug_func_t function, void *user_data,
+ 				const char *format, va_list va)
+ {
+diff --git a/src/shared/util.h b/src/shared/util.h
+index 11d09979d..8ef6132c4 100644
+--- a/src/shared/util.h
++++ b/src/shared/util.h
+@@ -87,6 +87,7 @@ char *strdelimit(char *str, char *del, char c);
+ int strsuffix(const char *str, const char *suffix);
+ 
+ void *util_malloc(size_t size);
++void *util_memdup(const void *src, size_t size);
+ 
+ typedef void (*util_debug_func_t)(const char *str, void *user_data);
+ 
+-- 
+2.17.1
+
diff --git a/package/bluez5_utils/0004-build-Replace-use-of-g_memdup-with-util_memdup.patch b/package/bluez5_utils/0004-build-Replace-use-of-g_memdup-with-util_memdup.patch
new file mode 100644
index 0000000000..9c4c3e9e01
--- /dev/null
+++ b/package/bluez5_utils/0004-build-Replace-use-of-g_memdup-with-util_memdup.patch
@@ -0,0 +1,1411 @@
+From 7eb74180cf6fd6cebc61bb719d458cbf5d7f4ca7 Mon Sep 17 00:00:00 2001
+From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
+Date: Thu, 6 Jan 2022 12:50:33 -0800
+Subject: [PATCH 4/4] build: Replace use of g_memdup with util_memdup
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This replaces the uses of g_memdup with util_memdup since the former has
+been deprecated:
+
+  warning: ‘g_memdup’ is deprecated: Use 'g_memdup2' instead
+  [-Wdeprecated-declarations]
+
+g_memdup2 requires bumping glib version which would likely have its
+own problems thus why util_memdup was introduced.
+
+(cherry picked from commit cfab569484b18407fc117bb96634525cc76ea1f5)
+Signed-off-by: Thomas Devoogdt <thomas.devoogdt@gmail.com>
+---
+ Makefile.am                | 10 ++---
+ Makefile.obexd             |  1 +
+ Makefile.tools             | 11 ++++--
+ android/a2dp.c             |  9 +++--
+ android/avctp.c            |  5 ++-
+ android/avrcp-lib.c        |  2 +-
+ android/gatt.c             |  5 ++-
+ android/hidhost.c          |  3 +-
+ android/tester-main.c      | 77 +++++++++++++++++++++-----------------
+ attrib/gatt.c              | 12 +++---
+ client/gatt.c              |  2 +-
+ gobex/gobex-header.c       |  7 ++--
+ gobex/gobex-packet.c       |  5 ++-
+ obexd/src/obex.c           |  5 ++-
+ plugins/neard.c            |  9 +++--
+ plugins/policy.c           |  7 ++--
+ profiles/audio/avctp.c     |  9 +++--
+ profiles/audio/avrcp.c     | 10 ++---
+ profiles/battery/bas.c     |  4 +-
+ profiles/battery/battery.c |  4 +-
+ profiles/deviceinfo/dis.c  |  4 +-
+ profiles/input/hog-lib.c   | 12 +++---
+ profiles/scanparam/scpp.c  |  4 +-
+ src/eir.c                  |  8 ++--
+ tools/gatt-service.c       | 15 ++++----
+ tools/mesh-gatt/gatt.c     |  5 ++-
+ unit/test-avctp.c          |  4 +-
+ unit/test-avdtp.c          |  6 +--
+ unit/test-avrcp.c          | 10 ++---
+ unit/test-gatt.c           |  4 +-
+ unit/test-hfp.c            | 11 +++---
+ unit/test-hog.c            | 26 ++++++-------
+ unit/test-sdp.c            | 10 +++--
+ unit/test-uhid.c           |  2 +-
+ 34 files changed, 172 insertions(+), 146 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 308f13c50..9b5e140b8 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -508,23 +508,23 @@ unit_tests += unit/test-gobex-header unit/test-gobex-packet unit/test-gobex \
+ 
+ unit_test_gobex_SOURCES = $(gobex_sources) unit/util.c unit/util.h \
+ 						unit/test-gobex.c
+-unit_test_gobex_LDADD = $(GLIB_LIBS)
++unit_test_gobex_LDADD = src/libshared-glib.la $(GLIB_LIBS)
+ 
+ unit_test_gobex_packet_SOURCES = $(gobex_sources) unit/util.c unit/util.h \
+ 						unit/test-gobex-packet.c
+-unit_test_gobex_packet_LDADD = $(GLIB_LIBS)
++unit_test_gobex_packet_LDADD = src/libshared-glib.la $(GLIB_LIBS)
+ 
+ unit_test_gobex_header_SOURCES = $(gobex_sources) unit/util.c unit/util.h \
+ 						unit/test-gobex-header.c
+-unit_test_gobex_header_LDADD = $(GLIB_LIBS)
++unit_test_gobex_header_LDADD = src/libshared-glib.la $(GLIB_LIBS)
+ 
+ unit_test_gobex_transfer_SOURCES = $(gobex_sources) unit/util.c unit/util.h \
+ 						unit/test-gobex-transfer.c
+-unit_test_gobex_transfer_LDADD = $(GLIB_LIBS)
++unit_test_gobex_transfer_LDADD = src/libshared-glib.la $(GLIB_LIBS)
+ 
+ unit_test_gobex_apparam_SOURCES = $(gobex_sources) unit/util.c unit/util.h \
+ 						unit/test-gobex-apparam.c
+-unit_test_gobex_apparam_LDADD = $(GLIB_LIBS)
++unit_test_gobex_apparam_LDADD = src/libshared-glib.la $(GLIB_LIBS)
+ endif
+ 
+ unit_tests += unit/test-lib
+diff --git a/Makefile.obexd b/Makefile.obexd
+index 37a133455..5d1a4ff65 100644
+--- a/Makefile.obexd
++++ b/Makefile.obexd
+@@ -82,6 +82,7 @@ obexd_src_obexd_SOURCES = $(btio_sources) $(gobex_sources) \
+ 			obexd/src/map_ap.h
+ obexd_src_obexd_LDADD = lib/libbluetooth-internal.la \
+ 			gdbus/libgdbus-internal.la \
++			src/libshared-glib.la \
+ 			$(ICAL_LIBS) $(DBUS_LIBS) $(LIBEBOOK_LIBS) \
+ 			$(LIBEDATASERVER_LIBS) $(GLIB_LIBS) -ldl
+ 
+diff --git a/Makefile.tools b/Makefile.tools
+index c7bdff83f..35b0021ea 100644
+--- a/Makefile.tools
++++ b/Makefile.tools
+@@ -302,7 +302,8 @@ tools_mpris_proxy_SOURCES = tools/mpris-proxy.c
+ tools_mpris_proxy_LDADD = gdbus/libgdbus-internal.la $(GLIB_LIBS) $(DBUS_LIBS)
+ 
+ tools_gatt_service_SOURCES = tools/gatt-service.c
+-tools_gatt_service_LDADD = $(GLIB_LIBS) $(DBUS_LIBS) gdbus/libgdbus-internal.la
++tools_gatt_service_LDADD = gdbus/libgdbus-internal.la \
++			   src/libshared-mainloop.la $(GLIB_LIBS) $(DBUS_LIBS)
+ 
+ profiles_iap_iapd_SOURCES = profiles/iap/main.c
+ profiles_iap_iapd_LDADD = gdbus/libgdbus-internal.la $(GLIB_LIBS) $(DBUS_LIBS)
+@@ -448,11 +449,12 @@ noinst_PROGRAMS += tools/btmgmt tools/obex-client-tool tools/obex-server-tool \
+ tools_obex_client_tool_SOURCES = $(gobex_sources) $(btio_sources) \
+ 						tools/obex-client-tool.c
+ tools_obex_client_tool_LDADD = lib/libbluetooth-internal.la \
+-						$(GLIB_LIBS) -lreadline
++			       src/libshared-glib.la $(GLIB_LIBS) -lreadline
+ 
+ tools_obex_server_tool_SOURCES = $(gobex_sources) $(btio_sources) \
+ 						tools/obex-server-tool.c
+-tools_obex_server_tool_LDADD = lib/libbluetooth-internal.la $(GLIB_LIBS)
++tools_obex_server_tool_LDADD = lib/libbluetooth-internal.la \
++			       src/libshared-glib.la $(GLIB_LIBS)
+ 
+ tools_bluetooth_player_SOURCES = tools/bluetooth-player.c
+ tools_bluetooth_player_LDADD = gdbus/libgdbus-internal.la \
+@@ -461,7 +463,8 @@ tools_bluetooth_player_LDADD = gdbus/libgdbus-internal.la \
+ 
+ tools_obexctl_SOURCES = tools/obexctl.c
+ tools_obexctl_LDADD = gdbus/libgdbus-internal.la src/libshared-glib.la \
+-				$(GLIB_LIBS) $(DBUS_LIBS) -lreadline
++			src/libshared-glib.la $(GLIB_LIBS) $(DBUS_LIBS) \
++			-lreadline
+ 
+ tools_btmgmt_SOURCES = tools/btmgmt.c src/uuid-helper.c client/display.c
+ tools_btmgmt_LDADD = lib/libbluetooth-internal.la src/libshared-mainloop.la \
+diff --git a/android/a2dp.c b/android/a2dp.c
+index 029107cf5..ee607a32d 100644
+--- a/android/a2dp.c
++++ b/android/a2dp.c
+@@ -26,6 +26,7 @@
+ #include "lib/sdp_lib.h"
+ #include "profiles/audio/a2dp-codecs.h"
+ #include "src/shared/queue.h"
++#include "src/shared/util.h"
+ #include "src/log.h"
+ #include "hal-msg.h"
+ #include "ipc-common.h"
+@@ -428,7 +429,7 @@ static struct a2dp_preset *sbc_select_range(void *caps, uint8_t caps_len,
+ 
+ 	p = g_new0(struct a2dp_preset, 1);
+ 	p->len = conf_len;
+-	p->data = g_memdup(conf, p->len);
++	p->data = util_memdup(conf, p->len);
+ 
+ 	return p;
+ }
+@@ -448,7 +449,7 @@ static struct a2dp_preset *aac_select_range(void *caps, uint8_t caps_len,
+ 
+ 	p = g_new0(struct a2dp_preset, 1);
+ 	p->len = conf_len;
+-	p->data = g_memdup(conf, p->len);
++	p->data = util_memdup(conf, p->len);
+ 
+ 	return p;
+ }
+@@ -1036,7 +1037,7 @@ static gboolean sep_setconf_ind(struct avdtp *session,
+ 
+ 		preset = g_new0(struct a2dp_preset, 1);
+ 		preset->len = cap->length - sizeof(*codec);
+-		preset->data = g_memdup(codec->data, preset->len);
++		preset->data = util_memdup(codec->data, preset->len);
+ 
+ 		if (check_config(endpoint, preset) < 0) {
+ 			preset_free(preset);
+@@ -1365,7 +1366,7 @@ static GSList *parse_presets(const struct audio_preset *p, uint8_t count,
+ 
+ 		preset = g_new0(struct a2dp_preset, 1);
+ 		preset->len = p->len;
+-		preset->data = g_memdup(p->data, preset->len);
++		preset->data = util_memdup(p->data, preset->len);
+ 		l = g_slist_append(l, preset);
+ 
+ 		len -= preset->len;
+diff --git a/android/avctp.c b/android/avctp.c
+index 14ebbc391..37b4cec4f 100644
+--- a/android/avctp.c
++++ b/android/avctp.c
+@@ -31,6 +31,7 @@
+ #include <glib.h>
+ 
+ #include "lib/sdp.h"
++#include "src/shared/util.h"
+ #include "src/log.h"
+ #include "avctp.h"
+ 
+@@ -1177,7 +1178,7 @@ static int avctp_send_req(struct avctp *session, uint8_t code, uint8_t subunit,
+ 
+ 	for (i = 0; i < iov_cnt; i++) {
+ 		pdu[i].iov_len = iov[i].iov_len;
+-		pdu[i].iov_base = g_memdup(iov[i].iov_base, iov[i].iov_len);
++		pdu[i].iov_base = util_memdup(iov[i].iov_base, iov[i].iov_len);
+ 	}
+ 
+ 	req = g_new0(struct avctp_control_req, 1);
+@@ -1218,7 +1219,7 @@ int avctp_send_browsing_req(struct avctp *session,
+ 
+ 	for (i = 0; i < iov_cnt; i++) {
+ 		pdu[i].iov_len = iov[i].iov_len;
+-		pdu[i].iov_base = g_memdup(iov[i].iov_base, iov[i].iov_len);
++		pdu[i].iov_base = util_memdup(iov[i].iov_base, iov[i].iov_len);
+ 	}
+ 
+ 	req = g_new0(struct avctp_browsing_req, 1);
+diff --git a/android/avrcp-lib.c b/android/avrcp-lib.c
+index 2007d09d2..b342692cb 100644
+--- a/android/avrcp-lib.c
++++ b/android/avrcp-lib.c
+@@ -2620,7 +2620,7 @@ static char *parse_folder_list(uint8_t *params, uint16_t params_len,
+ 			return NULL;
+ 		}
+ 
+-		folders[count] = g_memdup(&params[i], len);
++		folders[count] = util_memdup(&params[i], len);
+ 		i += len;
+ 	}
+ 
+diff --git a/android/gatt.c b/android/gatt.c
+index a8a0c488b..e8ba5aabb 100644
+--- a/android/gatt.c
++++ b/android/gatt.c
+@@ -1338,7 +1338,8 @@ static void discover_primary_cb(uint8_t status, GSList *services,
+ 		}
+ 
+ 		bt_uuid_to_uuid128(&uuid, &u128);
+-		new_uuid = g_memdup(&u128.value.u128, sizeof(u128.value.u128));
++		new_uuid = util_memdup(&u128.value.u128,
++					sizeof(u128.value.u128));
+ 
+ 		uuids = g_slist_prepend(uuids, new_uuid);
+ 	}
+@@ -6633,7 +6634,7 @@ static uint8_t write_prep_request(const uint8_t *cmd, uint16_t cmd_len,
+ 
+ 	queue_push_tail(dev->pending_requests, data);
+ 
+-	data->value = g_memdup(value, vlen);
++	data->value = util_memdup(value, vlen);
+ 	data->length = vlen;
+ 
+ 	if (!gatt_db_attribute_write(attrib, offset, value, vlen, cmd[0],
+diff --git a/android/hidhost.c b/android/hidhost.c
+index 016382e17..b4e5c527f 100644
+--- a/android/hidhost.c
++++ b/android/hidhost.c
+@@ -689,7 +689,8 @@ static void hid_sdp_search_cb(sdp_list_t *recs, int err, gpointer data)
+ 				goto fail;
+ 
+ 			dev->rd_size = data->unitSize;
+-			dev->rd_data = g_memdup(data->val.str, data->unitSize);
++			dev->rd_data = util_memdup(data->val.str,
++							data->unitSize);
+ 		}
+ 	}
+ 
+diff --git a/android/tester-main.c b/android/tester-main.c
+index ff5ecdf83..317c1de06 100644
+--- a/android/tester-main.c
++++ b/android/tester-main.c
+@@ -1253,7 +1253,8 @@ static bt_property_t *copy_properties(int num_properties,
+ 	for (i = 0; i < num_properties; i++) {
+ 		props[i].type = properties[i].type;
+ 		props[i].len = properties[i].len;
+-		props[i].val = g_memdup(properties[i].val, properties[i].len);
++		props[i].val = util_memdup(properties[i].val,
++						properties[i].len);
+ 	}
+ 
+ 	return props;
+@@ -1268,7 +1269,8 @@ static bt_property_t *repack_properties(int num_properties,
+ 	for (i = 0; i < num_properties; i++) {
+ 		props[i].type = properties[i]->type;
+ 		props[i].len = properties[i]->len;
+-		props[i].val = g_memdup(properties[i]->val, properties[i]->len);
++		props[i].val = util_memdup(properties[i]->val,
++						properties[i]->len);
+ 	}
+ 
+ 	return props;
+@@ -1281,7 +1283,7 @@ static bt_property_t *create_property(bt_property_type_t type, void *val,
+ 
+ 	prop->type = type;
+ 	prop->len = len;
+-	prop->val = g_memdup(val, len);
++	prop->val = util_memdup(val, len);
+ 
+ 	return prop;
+ }
+@@ -1615,7 +1617,7 @@ static void gattc_search_result_cb(int conn_id, btgatt_srvc_id_t *srvc_id)
+ 
+ 	step->callback = CB_GATTC_SEARCH_RESULT;
+ 	step->callback_result.conn_id = conn_id;
+-	step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id));
++	step->callback_result.service = util_memdup(srvc_id, sizeof(*srvc_id));
+ 
+ 	schedule_callback_verification(step);
+ }
+@@ -1639,8 +1641,8 @@ static void gattc_get_characteristic_cb(int conn_id, int status,
+ 	step->callback = CB_GATTC_GET_CHARACTERISTIC;
+ 	step->callback_result.status = status;
+ 	step->callback_result.conn_id = conn_id;
+-	step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id));
+-	step->callback_result.characteristic = g_memdup(char_id,
++	step->callback_result.service = util_memdup(srvc_id, sizeof(*srvc_id));
++	step->callback_result.characteristic = util_memdup(char_id,
+ 							sizeof(*char_id));
+ 	step->callback_result.char_prop = char_prop;
+ 
+@@ -1656,10 +1658,10 @@ static void gattc_get_descriptor_cb(int conn_id, int status,
+ 	step->callback = CB_GATTC_GET_DESCRIPTOR;
+ 	step->callback_result.status = status;
+ 	step->callback_result.conn_id = conn_id;
+-	step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id));
+-	step->callback_result.characteristic = g_memdup(char_id,
++	step->callback_result.service = util_memdup(srvc_id, sizeof(*srvc_id));
++	step->callback_result.characteristic = util_memdup(char_id,
+ 							sizeof(*char_id));
+-	step->callback_result.descriptor = g_memdup(descr_id,
++	step->callback_result.descriptor = util_memdup(descr_id,
+ 							sizeof(*descr_id));
+ 
+ 	schedule_callback_verification(step);
+@@ -1673,8 +1675,8 @@ static void gattc_get_included_service_cb(int conn_id, int status,
+ 	step->callback = CB_GATTC_GET_INCLUDED_SERVICE;
+ 	step->callback_result.status = status;
+ 	step->callback_result.conn_id = conn_id;
+-	step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id));
+-	step->callback_result.included = g_memdup(incl_srvc_id,
++	step->callback_result.service = util_memdup(srvc_id, sizeof(*srvc_id));
++	step->callback_result.included = util_memdup(incl_srvc_id,
+ 							sizeof(*srvc_id));
+ 
+ 	schedule_callback_verification(step);
+@@ -1688,7 +1690,8 @@ static void gattc_read_characteristic_cb(int conn_id, int status,
+ 	step->callback = CB_GATTC_READ_CHARACTERISTIC;
+ 	step->callback_result.status = status;
+ 	step->callback_result.conn_id = conn_id;
+-	step->callback_result.read_params = g_memdup(p_data, sizeof(*p_data));
++	step->callback_result.read_params = util_memdup(p_data,
++							sizeof(*p_data));
+ 
+ 	schedule_callback_verification(step);
+ }
+@@ -1701,7 +1704,8 @@ static void gattc_read_descriptor_cb(int conn_id, int status,
+ 	step->callback = CB_GATTC_READ_DESCRIPTOR;
+ 	step->callback_result.status = status;
+ 	step->callback_result.conn_id = conn_id;
+-	step->callback_result.read_params = g_memdup(p_data, sizeof(*p_data));
++	step->callback_result.read_params = util_memdup(p_data,
++							sizeof(*p_data));
+ 
+ 	schedule_callback_verification(step);
+ }
+@@ -1714,7 +1718,8 @@ static void gattc_write_characteristic_cb(int conn_id, int status,
+ 	step->callback = CB_GATTC_WRITE_CHARACTERISTIC;
+ 	step->callback_result.status = status;
+ 	step->callback_result.conn_id = conn_id;
+-	step->callback_result.write_params = g_memdup(p_data, sizeof(*p_data));
++	step->callback_result.write_params = util_memdup(p_data,
++							sizeof(*p_data));
+ 
+ 	schedule_callback_verification(step);
+ }
+@@ -1727,7 +1732,8 @@ static void gattc_write_descriptor_cb(int conn_id, int status,
+ 	step->callback = CB_GATTC_WRITE_DESCRIPTOR;
+ 	step->callback_result.status = status;
+ 	step->callback_result.conn_id = conn_id;
+-	step->callback_result.write_params = g_memdup(p_data, sizeof(*p_data));
++	step->callback_result.write_params = util_memdup(p_data,
++							sizeof(*p_data));
+ 
+ 	schedule_callback_verification(step);
+ }
+@@ -1742,8 +1748,8 @@ static void gattc_register_for_notification_cb(int conn_id, int registered,
+ 	step->callback = CB_GATTC_REGISTER_FOR_NOTIFICATION;
+ 	step->callback_result.status = status;
+ 	step->callback_result.conn_id = conn_id;
+-	step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id));
+-	step->callback_result.characteristic = g_memdup(char_id,
++	step->callback_result.service = util_memdup(srvc_id, sizeof(*srvc_id));
++	step->callback_result.characteristic = util_memdup(char_id,
+ 							sizeof(*char_id));
+ 	step->callback_result.notification_registered = registered;
+ 
+@@ -1756,7 +1762,8 @@ static void gattc_notif_cb(int conn_id, btgatt_notify_params_t *p_data)
+ 
+ 	step->callback = CB_GATTC_NOTIFY;
+ 	step->callback_result.conn_id = conn_id;
+-	step->callback_result.notify_params = g_memdup(p_data, sizeof(*p_data));
++	step->callback_result.notify_params = util_memdup(p_data,
++							sizeof(*p_data));
+ 
+ 	schedule_callback_verification(step);
+ }
+@@ -1827,8 +1834,8 @@ static void gatts_service_added_cb(int status, int server_if,
+ 
+ 	step->callback_result.status = status;
+ 	step->callback_result.gatt_app_id = server_if;
+-	step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id));
+-	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
++	step->callback_result.service = util_memdup(srvc_id, sizeof(*srvc_id));
++	step->callback_result.srvc_handle = util_memdup(&srvc_handle,
+ 							sizeof(srvc_handle));
+ 
+ 	schedule_callback_verification(step);
+@@ -1844,9 +1851,9 @@ static void gatts_included_service_added_cb(int status, int server_if,
+ 
+ 	step->callback_result.status = status;
+ 	step->callback_result.gatt_app_id = server_if;
+-	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
++	step->callback_result.srvc_handle = util_memdup(&srvc_handle,
+ 							sizeof(srvc_handle));
+-	step->callback_result.inc_srvc_handle = g_memdup(&inc_srvc_handle,
++	step->callback_result.inc_srvc_handle = util_memdup(&inc_srvc_handle,
+ 						sizeof(inc_srvc_handle));
+ 
+ 	schedule_callback_verification(step);
+@@ -1863,10 +1870,10 @@ static void gatts_characteristic_added_cb(int status, int server_if,
+ 
+ 	step->callback_result.status = status;
+ 	step->callback_result.gatt_app_id = server_if;
+-	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
++	step->callback_result.srvc_handle = util_memdup(&srvc_handle,
+ 							sizeof(srvc_handle));
+-	step->callback_result.uuid = g_memdup(uuid, sizeof(*uuid));
+-	step->callback_result.char_handle = g_memdup(&char_handle,
++	step->callback_result.uuid = util_memdup(uuid, sizeof(*uuid));
++	step->callback_result.char_handle = util_memdup(&char_handle,
+ 							sizeof(char_handle));
+ 
+ 	schedule_callback_verification(step);
+@@ -1883,10 +1890,10 @@ static void gatts_descriptor_added_cb(int status, int server_if,
+ 
+ 	step->callback_result.status = status;
+ 	step->callback_result.gatt_app_id = server_if;
+-	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
++	step->callback_result.srvc_handle = util_memdup(&srvc_handle,
+ 							sizeof(srvc_handle));
+-	step->callback_result.uuid = g_memdup(uuid, sizeof(*uuid));
+-	step->callback_result.desc_handle = g_memdup(&desc_handle,
++	step->callback_result.uuid = util_memdup(uuid, sizeof(*uuid));
++	step->callback_result.desc_handle = util_memdup(&desc_handle,
+ 							sizeof(desc_handle));
+ 
+ 	schedule_callback_verification(step);
+@@ -1900,7 +1907,7 @@ static void gatts_service_started_cb(int status, int server_if, int srvc_handle)
+ 
+ 	step->callback_result.status = status;
+ 	step->callback_result.gatt_app_id = server_if;
+-	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
++	step->callback_result.srvc_handle = util_memdup(&srvc_handle,
+ 							sizeof(srvc_handle));
+ 
+ 	schedule_callback_verification(step);
+@@ -1914,7 +1921,7 @@ static void gatts_service_stopped_cb(int status, int server_if, int srvc_handle)
+ 
+ 	step->callback_result.status = status;
+ 	step->callback_result.gatt_app_id = server_if;
+-	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
++	step->callback_result.srvc_handle = util_memdup(&srvc_handle,
+ 							sizeof(srvc_handle));
+ 
+ 	schedule_callback_verification(step);
+@@ -1928,7 +1935,7 @@ static void gatts_service_deleted_cb(int status, int server_if, int srvc_handle)
+ 
+ 	step->callback_result.status = status;
+ 	step->callback_result.gatt_app_id = server_if;
+-	step->callback_result.srvc_handle = g_memdup(&srvc_handle,
++	step->callback_result.srvc_handle = util_memdup(&srvc_handle,
+ 							sizeof(srvc_handle));
+ 
+ 	schedule_callback_verification(step);
+@@ -1945,7 +1952,7 @@ static void gatts_request_read_cb(int conn_id, int trans_id, bt_bdaddr_t *bda,
+ 
+ 	step->callback_result.conn_id = conn_id;
+ 	step->callback_result.trans_id = trans_id;
+-	step->callback_result.attr_handle = g_memdup(&attr_handle,
++	step->callback_result.attr_handle = util_memdup(&attr_handle,
+ 							sizeof(attr_handle));
+ 	step->callback_result.offset = offset;
+ 	step->callback_result.is_long = is_long;
+@@ -1974,13 +1981,13 @@ static void gatts_request_write_cb(int conn_id, int trans_id, bt_bdaddr_t *bda,
+ 
+ 	step->callback_result.conn_id = conn_id;
+ 	step->callback_result.trans_id = trans_id;
+-	step->callback_result.attr_handle = g_memdup(&attr_handle,
++	step->callback_result.attr_handle = util_memdup(&attr_handle,
+ 							sizeof(attr_handle));
+ 	step->callback_result.offset = offset;
+ 	step->callback_result.length = length;
+ 	step->callback_result.need_rsp = need_rsp;
+ 	step->callback_result.is_prep = is_prep;
+-	step->callback_result.value = g_memdup(&value, length);
++	step->callback_result.value = util_memdup(&value, length);
+ 
+ 	/* Utilize property verification mechanism for bdaddr */
+ 	props[0] = create_property(BT_PROPERTY_BDADDR, bda, sizeof(*bda));
+@@ -2169,7 +2176,7 @@ static btmce_mas_instance_t *copy_mas_instances(int num_instances,
+ 		inst[i].id = instances[i].id;
+ 		inst[i].scn = instances[i].scn;
+ 		inst[i].msg_types = instances[i].msg_types;
+-		inst[i].p_name = g_memdup(instances[i].p_name,
++		inst[i].p_name = util_memdup(instances[i].p_name,
+ 						strlen(instances[i].p_name));
+ 	}
+ 
+diff --git a/attrib/gatt.c b/attrib/gatt.c
+index 46b2ca381..b496dd1eb 100644
+--- a/attrib/gatt.c
++++ b/attrib/gatt.c
+@@ -135,7 +135,7 @@ static void discover_char_unref(void *data)
+ 
+ 	g_slist_free_full(dc->characteristics, g_free);
+ 	g_attrib_unref(dc->attrib);
+-	g_free(dc->uuid);
++	free(dc->uuid);
+ 	g_free(dc);
+ }
+ 
+@@ -157,7 +157,7 @@ static void discover_desc_unref(void *data)
+ 
+ 	g_slist_free_full(dd->descriptors, g_free);
+ 	g_attrib_unref(dd->attrib);
+-	g_free(dd->uuid);
++	free(dd->uuid);
+ 	g_free(dd);
+ }
+ 
+@@ -696,7 +696,7 @@ guint gatt_discover_char(GAttrib *attrib, uint16_t start, uint16_t end,
+ 	dc->user_data = user_data;
+ 	dc->end = end;
+ 	dc->start = start;
+-	dc->uuid = g_memdup(uuid, sizeof(bt_uuid_t));
++	dc->uuid = util_memdup(uuid, sizeof(bt_uuid_t));
+ 
+ 	dc->id = g_attrib_send(attrib, 0, buf, plen, char_discovered_cb,
+ 				discover_char_ref(dc), discover_char_unref);
+@@ -905,7 +905,7 @@ static void prepare_write_cb(guint8 status, const guint8 *rpdu, guint16 rlen,
+ 	if (long_write->offset == long_write->vlen) {
+ 		execute_write(long_write->attrib, ATT_WRITE_ALL_PREP_WRITES,
+ 				long_write->func, long_write->user_data);
+-		g_free(long_write->value);
++		free(long_write->value);
+ 		g_free(long_write);
+ 
+ 		return;
+@@ -964,7 +964,7 @@ guint gatt_write_char(GAttrib *attrib, uint16_t handle, const uint8_t *value,
+ 	long_write->func = func;
+ 	long_write->user_data = user_data;
+ 	long_write->handle = handle;
+-	long_write->value = g_memdup(value, vlen);
++	long_write->value = util_memdup(value, vlen);
+ 	long_write->vlen = vlen;
+ 
+ 	return prepare_write(long_write);
+@@ -1130,7 +1130,7 @@ guint gatt_discover_desc(GAttrib *attrib, uint16_t start, uint16_t end,
+ 	dd->user_data = user_data;
+ 	dd->start = start;
+ 	dd->end = end;
+-	dd->uuid = g_memdup(uuid, sizeof(bt_uuid_t));
++	dd->uuid = util_memdup(uuid, sizeof(bt_uuid_t));
+ 
+ 	dd->id = g_attrib_send(attrib, 0, buf, plen, desc_discovered_cb,
+ 				discover_desc_ref(dd), discover_desc_unref);
+diff --git a/client/gatt.c b/client/gatt.c
+index 11f70dc4f..13872c794 100644
+--- a/client/gatt.c
++++ b/client/gatt.c
+@@ -811,7 +811,7 @@ static uint8_t *str2bytearray(char *arg, size_t *val_len)
+ 
+ 	*val_len = i;
+ 
+-	return g_memdup(value, i);
++	return util_memdup(value, i);
+ }
+ 
+ void gatt_write_attribute(GDBusProxy *proxy, int argc, char *argv[])
+diff --git a/gobex/gobex-header.c b/gobex/gobex-header.c
+index 011d33d1a..002ba8861 100644
+--- a/gobex/gobex-header.c
++++ b/gobex/gobex-header.c
+@@ -15,6 +15,7 @@
+ 
+ #include "gobex-header.h"
+ #include "gobex-debug.h"
++#include "src/shared/util.h"
+ 
+ /* Header types */
+ #define G_OBEX_HDR_ENC_UNICODE	(0 << 6)
+@@ -222,7 +223,7 @@ GObexHeader *g_obex_header_decode(const void *data, gsize len,
+ 
+ 		switch (data_policy) {
+ 		case G_OBEX_DATA_COPY:
+-			header->v.data = g_memdup(ptr, header->vlen);
++			header->v.data = util_memdup(ptr, header->vlen);
+ 			break;
+ 		case G_OBEX_DATA_REF:
+ 			header->extdata = TRUE;
+@@ -282,7 +283,7 @@ void g_obex_header_free(GObexHeader *header)
+ 		break;
+ 	case G_OBEX_HDR_ENC_BYTES:
+ 		if (!header->extdata)
+-			g_free(header->v.data);
++			free(header->v.data);
+ 		break;
+ 	case G_OBEX_HDR_ENC_UINT8:
+ 	case G_OBEX_HDR_ENC_UINT32:
+@@ -410,7 +411,7 @@ GObexHeader *g_obex_header_new_bytes(guint8 id, const void *data, gsize len)
+ 	header->id = id;
+ 	header->vlen = len;
+ 	header->hlen = len + 3;
+-	header->v.data = g_memdup(data, len);
++	header->v.data = util_memdup(data, len);
+ 
+ 	return header;
+ }
+diff --git a/gobex/gobex-packet.c b/gobex/gobex-packet.c
+index 11937a5a5..8ae78b0f6 100644
+--- a/gobex/gobex-packet.c
++++ b/gobex/gobex-packet.c
+@@ -17,6 +17,7 @@
+ #include "gobex-defs.h"
+ #include "gobex-packet.h"
+ #include "gobex-debug.h"
++#include "src/shared/util.h"
+ 
+ #define FINAL_BIT 0x80
+ 
+@@ -201,7 +202,7 @@ gboolean g_obex_packet_set_data(GObexPacket *pkt, const void *data, gsize len,
+ 
+ 	switch (data_policy) {
+ 	case G_OBEX_DATA_COPY:
+-		pkt->data.buf = g_memdup(data, len);
++		pkt->data.buf = util_memdup(data, len);
+ 		break;
+ 	case G_OBEX_DATA_REF:
+ 		pkt->data.buf_ref = data;
+@@ -259,7 +260,7 @@ void g_obex_packet_free(GObexPacket *pkt)
+ 	switch (pkt->data_policy) {
+ 	case G_OBEX_DATA_INHERIT:
+ 	case G_OBEX_DATA_COPY:
+-		g_free(pkt->data.buf);
++		free(pkt->data.buf);
+ 		break;
+ 	case G_OBEX_DATA_REF:
+ 		break;
+diff --git a/obexd/src/obex.c b/obexd/src/obex.c
+index 9f992ec18..3a68fd66c 100644
+--- a/obexd/src/obex.c
++++ b/obexd/src/obex.c
+@@ -40,6 +40,7 @@
+ #include "mimetype.h"
+ #include "service.h"
+ #include "transport.h"
++#include "src/shared/util.h"
+ 
+ typedef struct {
+ 	uint8_t  version;
+@@ -145,7 +146,7 @@ static void os_reset_session(struct obex_session *os)
+ 		os->path = NULL;
+ 	}
+ 	if (os->apparam) {
+-		g_free(os->apparam);
++		free(os->apparam);
+ 		os->apparam = NULL;
+ 		os->apparam_len = 0;
+ 	}
+@@ -594,7 +595,7 @@ static void parse_apparam(struct obex_session *os, GObexPacket *req)
+ 	if (!g_obex_header_get_bytes(hdr, &apparam, &len))
+ 		return;
+ 
+-	os->apparam = g_memdup(apparam, len);
++	os->apparam = util_memdup(apparam, len);
+ 	os->apparam_len = len;
+ 	DBG("APPARAM");
+ }
+diff --git a/plugins/neard.c b/plugins/neard.c
+index e07b51106..a75527148 100644
+--- a/plugins/neard.c
++++ b/plugins/neard.c
+@@ -30,6 +30,7 @@
+ #include "src/eir.h"
+ #include "src/agent.h"
+ #include "src/btd.h"
++#include "src/shared/util.h"
+ 
+ #define NEARD_NAME "org.neard"
+ #define NEARD_PATH "/"
+@@ -71,7 +72,7 @@ static void free_oob_params(struct oob_params *params)
+ 	g_free(params->name);
+ 	g_free(params->hash);
+ 	g_free(params->randomizer);
+-	g_free(params->pin);
++	free(params->pin);
+ }
+ 
+ static DBusMessage *error_reply(DBusMessage *msg, int error)
+@@ -407,10 +408,10 @@ static int process_nokia_long (void *data, size_t size, uint8_t marker,
+ 		remote->name = g_strndup((char *)n->name, n->name_len);
+ 
+ 	if (marker == 0x01) {
+-		remote->pin = g_memdup(n->authentication, 4);
++		remote->pin = util_memdup(n->authentication, 4);
+ 		remote->pin_len = 4;
+ 	} else if (marker == 0x02) {
+-		remote->pin = g_memdup(n->authentication, 16);
++		remote->pin = util_memdup(n->authentication, 16);
+ 		remote->pin_len = 16;
+ 	}
+ 
+@@ -439,7 +440,7 @@ static int process_nokia_short (void *data, size_t size,
+ 	if (n->name_len > 0)
+ 		remote->name = g_strndup((char *)n->name, n->name_len);
+ 
+-	remote->pin = g_memdup(n->authentication, 4);
++	remote->pin = util_memdup(n->authentication, 4);
+ 	remote->pin_len = 4;
+ 
+ 	return 0;
+diff --git a/plugins/policy.c b/plugins/policy.c
+index 051db82e1..48f5db7d3 100644
+--- a/plugins/policy.c
++++ b/plugins/policy.c
+@@ -32,6 +32,7 @@
+ #include "src/profile.h"
+ #include "src/btd.h"
+ #include "src/shared/timeout.h"
++#include "src/shared/util.h"
+ 
+ #define CONTROL_CONNECT_TIMEOUT 2
+ #define SOURCE_RETRY_TIMEOUT 2
+@@ -855,7 +856,7 @@ static int policy_init(void)
+ 		reconnect_attempts = default_attempts;
+ 		reconnect_intervals_len = sizeof(default_intervals) /
+ 						sizeof(*reconnect_intervals);
+-		reconnect_intervals = g_memdup(default_intervals,
++		reconnect_intervals = util_memdup(default_intervals,
+ 						sizeof(default_intervals));
+ 		goto done;
+ 	}
+@@ -886,7 +887,7 @@ static int policy_init(void)
+ 		g_clear_error(&gerr);
+ 		reconnect_intervals_len = sizeof(default_intervals) /
+ 						sizeof(*reconnect_intervals);
+-		reconnect_intervals = g_memdup(default_intervals,
++		reconnect_intervals = util_memdup(default_intervals,
+ 						sizeof(default_intervals));
+ 	}
+ 
+@@ -919,7 +920,7 @@ static void policy_exit(void)
+ 	if (reconnect_uuids)
+ 		g_strfreev(reconnect_uuids);
+ 
+-	g_free(reconnect_intervals);
++	free(reconnect_intervals);
+ 
+ 	g_slist_free_full(reconnects, reconnect_destroy);
+ 
+diff --git a/profiles/audio/avctp.c b/profiles/audio/avctp.c
+index 64d1a8504..6f64f162b 100644
+--- a/profiles/audio/avctp.c
++++ b/profiles/audio/avctp.c
+@@ -40,6 +40,7 @@
+ #include "src/log.h"
+ #include "src/error.h"
+ #include "src/shared/timeout.h"
++#include "src/shared/util.h"
+ 
+ #include "avctp.h"
+ #include "avrcp.h"
+@@ -760,7 +761,7 @@ static void control_req_destroy(void *data)
+ 						NULL, 0, req->user_data);
+ 
+ done:
+-	g_free(req->operands);
++	free(req->operands);
+ 	g_free(req);
+ }
+ 
+@@ -776,7 +777,7 @@ static void browsing_req_destroy(void *data)
+ 	req->func(session, NULL, 0, req->user_data);
+ 
+ done:
+-	g_free(req->operands);
++	free(req->operands);
+ 	g_free(req);
+ }
+ 
+@@ -1727,7 +1728,7 @@ static int avctp_send_req(struct avctp *session, uint8_t code,
+ 	req->subunit = subunit;
+ 	req->op = opcode;
+ 	req->func = func;
+-	req->operands = g_memdup(operands, operand_count);
++	req->operands = util_memdup(operands, operand_count);
+ 	req->operand_count = operand_count;
+ 	req->user_data = user_data;
+ 
+@@ -1765,7 +1766,7 @@ int avctp_send_browsing_req(struct avctp *session,
+ 
+ 	req = g_new0(struct avctp_browsing_req, 1);
+ 	req->func = func;
+-	req->operands = g_memdup(operands, operand_count);
++	req->operands = util_memdup(operands, operand_count);
+ 	req->operand_count = operand_count;
+ 	req->user_data = user_data;
+ 
+diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
+index 7c280203c..d4e19ffc0 100644
+--- a/profiles/audio/avrcp.c
++++ b/profiles/audio/avrcp.c
+@@ -1298,7 +1298,7 @@ static uint8_t avrcp_handle_get_current_player_value(struct avrcp *session,
+ 	 * Save a copy of requested settings because we can override them
+ 	 * while responding
+ 	 */
+-	settings = g_memdup(&pdu->params[1], pdu->params[0]);
++	settings = util_memdup(&pdu->params[1], pdu->params[0]);
+ 	len = 0;
+ 
+ 	/*
+@@ -1323,7 +1323,7 @@ static uint8_t avrcp_handle_get_current_player_value(struct avrcp *session,
+ 		pdu->params[++len] = val;
+ 	}
+ 
+-	g_free(settings);
++	free(settings);
+ 
+ 	if (len) {
+ 		pdu->params[0] = len / 2;
+@@ -2801,7 +2801,7 @@ static gboolean avrcp_set_browsed_player_rsp(struct avctp *conn,
+ 			break;
+ 		}
+ 
+-		folders[count] = g_memdup(&pdu->params[i], len);
++		folders[count] = util_memdup(&pdu->params[i], len);
+ 		i += len;
+ 	}
+ 
+@@ -2888,7 +2888,7 @@ static void avrcp_player_parse_features(struct avrcp_player *player,
+ {
+ 	struct media_player *mp = player->user_data;
+ 
+-	player->features = g_memdup(features, 16);
++	player->features = util_memdup(features, 16);
+ 
+ 	if (features[7] & 0x08) {
+ 		media_player_set_browsable(mp, true);
+@@ -3622,7 +3622,7 @@ static void player_destroy(gpointer data)
+ 	g_slist_free(player->sessions);
+ 	g_free(player->path);
+ 	g_free(player->change_path);
+-	g_free(player->features);
++	free(player->features);
+ 	g_free(player);
+ }
+ 
+diff --git a/profiles/battery/bas.c b/profiles/battery/bas.c
+index 3c6173b61..16ff22e19 100644
+--- a/profiles/battery/bas.c
++++ b/profiles/battery/bas.c
+@@ -62,7 +62,7 @@ static void bas_free(struct bt_bas *bas)
+ {
+ 	bt_bas_detach(bas);
+ 
+-	g_free(bas->primary);
++	free(bas->primary);
+ 	queue_destroy(bas->gatt_op, (void *) destroy_gatt_req);
+ 	free(bas);
+ }
+@@ -75,7 +75,7 @@ struct bt_bas *bt_bas_new(void *primary)
+ 	bas->gatt_op = queue_new();
+ 
+ 	if (primary)
+-		bas->primary = g_memdup(primary, sizeof(*bas->primary));
++		bas->primary = util_memdup(primary, sizeof(*bas->primary));
+ 
+ 	return bt_bas_ref(bas);
+ }
+diff --git a/profiles/battery/battery.c b/profiles/battery/battery.c
+index 176d127f6..02d024d92 100644
+--- a/profiles/battery/battery.c
++++ b/profiles/battery/battery.c
+@@ -66,7 +66,7 @@ static void batt_free(struct batt *batt)
+ 	gatt_db_unref(batt->db);
+ 	bt_gatt_client_unref(batt->client);
+ 	btd_device_unref(batt->device);
+-	g_free (batt->initial_value);
++	free(batt->initial_value);
+ 	if (batt->battery)
+ 		btd_battery_unregister(batt->battery);
+ 	g_free(batt);
+@@ -159,7 +159,7 @@ static void read_initial_battery_level_cb(bool success,
+ 	if (!length)
+ 		return;
+ 
+-	batt->initial_value = g_memdup(value, length);
++	batt->initial_value = util_memdup(value, length);
+ 
+ 	/* request notify */
+ 	batt->batt_level_cb_id =
+diff --git a/profiles/deviceinfo/dis.c b/profiles/deviceinfo/dis.c
+index 87fa63306..f660179ed 100644
+--- a/profiles/deviceinfo/dis.c
++++ b/profiles/deviceinfo/dis.c
+@@ -72,7 +72,7 @@ static void dis_free(struct bt_dis *dis)
+ {
+ 	bt_dis_detach(dis);
+ 
+-	g_free(dis->primary);
++	free(dis->primary);
+ 	queue_destroy(dis->gatt_op, (void *) destroy_gatt_req);
+ 	g_free(dis);
+ }
+@@ -143,7 +143,7 @@ struct bt_dis *bt_dis_new_primary(void *primary)
+ 	dis->gatt_op = queue_new();
+ 
+ 	if (primary)
+-		dis->primary = g_memdup(primary, sizeof(*dis->primary));
++		dis->primary = util_memdup(primary, sizeof(*dis->primary));
+ 
+ 	return bt_dis_ref(dis);
+ }
+diff --git a/profiles/input/hog-lib.c b/profiles/input/hog-lib.c
+index 3bbe42370..d37caa1f1 100644
+--- a/profiles/input/hog-lib.c
++++ b/profiles/input/hog-lib.c
+@@ -527,9 +527,9 @@ static void report_read_cb(guint8 status, const guint8 *pdu, guint16 len,
+ 	}
+ 
+ 	if (report->value)
+-		g_free(report->value);
++		free(report->value);
+ 
+-	report->value = g_memdup(pdu, len);
++	report->value = util_memdup(pdu, len);
+ 	report->len = len;
+ }
+ 
+@@ -1217,7 +1217,7 @@ static void report_free(void *data)
+ {
+ 	struct report *report = data;
+ 
+-	g_free(report->value);
++	free(report->value);
+ 	g_free(report);
+ }
+ 
+@@ -1241,7 +1241,7 @@ static void hog_free(void *data)
+ 	bt_uhid_unref(hog->uhid);
+ 	g_slist_free_full(hog->reports, report_free);
+ 	g_free(hog->name);
+-	g_free(hog->primary);
++	free(hog->primary);
+ 	queue_destroy(hog->gatt_op, (void *) destroy_gatt_req);
+ 	if (hog->gatt_db)
+ 		gatt_db_unref(hog->gatt_db);
+@@ -1609,7 +1609,7 @@ static void hog_attach_hog(struct bt_hog *hog, struct gatt_primary *primary)
+ 	struct bt_hog *instance;
+ 
+ 	if (!hog->primary) {
+-		hog->primary = g_memdup(primary, sizeof(*primary));
++		hog->primary = util_memdup(primary, sizeof(*primary));
+ 		discover_char(hog, hog->attrib, primary->range.start,
+ 						primary->range.end, NULL,
+ 						char_discovered_cb, hog);
+@@ -1623,7 +1623,7 @@ static void hog_attach_hog(struct bt_hog *hog, struct gatt_primary *primary)
+ 	if (!instance)
+ 		return;
+ 
+-	instance->primary = g_memdup(primary, sizeof(*primary));
++	instance->primary = util_memdup(primary, sizeof(*primary));
+ 	find_included(instance, hog->attrib, primary->range.start,
+ 			primary->range.end, find_included_cb, instance);
+ 
+diff --git a/profiles/scanparam/scpp.c b/profiles/scanparam/scpp.c
+index da38a6aaa..4be8b26cc 100644
+--- a/profiles/scanparam/scpp.c
++++ b/profiles/scanparam/scpp.c
+@@ -91,7 +91,7 @@ static void scpp_free(struct bt_scpp *scan)
+ {
+ 	bt_scpp_detach(scan);
+ 
+-	g_free(scan->primary);
++	free(scan->primary);
+ 	queue_destroy(scan->gatt_op, NULL); /* cleared in bt_scpp_detach */
+ 	g_free(scan);
+ }
+@@ -110,7 +110,7 @@ struct bt_scpp *bt_scpp_new(void *primary)
+ 	scan->gatt_op = queue_new();
+ 
+ 	if (primary)
+-		scan->primary = g_memdup(primary, sizeof(*scan->primary));
++		scan->primary = util_memdup(primary, sizeof(*scan->primary));
+ 
+ 	return bt_scpp_ref(scan);
+ }
+diff --git a/src/eir.c b/src/eir.c
+index 0f5d14fcd..2f9ee036f 100644
+--- a/src/eir.c
++++ b/src/eir.c
+@@ -53,9 +53,9 @@ void eir_data_free(struct eir_data *eir)
+ 	eir->services = NULL;
+ 	g_free(eir->name);
+ 	eir->name = NULL;
+-	g_free(eir->hash);
++	free(eir->hash);
+ 	eir->hash = NULL;
+-	g_free(eir->randomizer);
++	free(eir->randomizer);
+ 	eir->randomizer = NULL;
+ 	g_slist_free_full(eir->msd_list, g_free);
+ 	eir->msd_list = NULL;
+@@ -323,13 +323,13 @@ void eir_parse(struct eir_data *eir, const uint8_t *eir_data, uint8_t eir_len)
+ 		case EIR_SSP_HASH:
+ 			if (data_len < 16)
+ 				break;
+-			eir->hash = g_memdup(data, 16);
++			eir->hash = util_memdup(data, 16);
+ 			break;
+ 
+ 		case EIR_SSP_RANDOMIZER:
+ 			if (data_len < 16)
+ 				break;
+-			eir->randomizer = g_memdup(data, 16);
++			eir->randomizer = util_memdup(data, 16);
+ 			break;
+ 
+ 		case EIR_DEVICE_ID:
+diff --git a/tools/gatt-service.c b/tools/gatt-service.c
+index 631c4f249..ed6b06f1e 100644
+--- a/tools/gatt-service.c
++++ b/tools/gatt-service.c
+@@ -26,6 +26,7 @@
+ #include "gdbus/gdbus.h"
+ 
+ #include "src/error.h"
++#include "src/shared/util.h"
+ 
+ #define GATT_MGR_IFACE			"org.bluez.GattManager1"
+ #define GATT_SERVICE_IFACE		"org.bluez.GattService1"
+@@ -126,8 +127,8 @@ static gboolean desc_get_value(const GDBusPropertyTable *property,
+ 
+ static void desc_write(struct descriptor *desc, const uint8_t *value, int len)
+ {
+-	g_free(desc->value);
+-	desc->value = g_memdup(value, len);
++	free(desc->value);
++	desc->value = util_memdup(value, len);
+ 	desc->vlen = len;
+ 
+ 	g_dbus_emit_property_changed(connection, desc->path,
+@@ -264,8 +265,8 @@ static gboolean chr_get_props(const GDBusPropertyTable *property,
+ 
+ static void chr_write(struct characteristic *chr, const uint8_t *value, int len)
+ {
+-	g_free(chr->value);
+-	chr->value = g_memdup(value, len);
++	free(chr->value);
++	chr->value = util_memdup(value, len);
+ 	chr->vlen = len;
+ 
+ 	g_dbus_emit_property_changed(connection, chr->path, GATT_CHR_IFACE,
+@@ -388,7 +389,7 @@ static void chr_iface_destroy(gpointer user_data)
+ 
+ 	g_free(chr->uuid);
+ 	g_free(chr->service);
+-	g_free(chr->value);
++	free(chr->value);
+ 	g_free(chr->path);
+ 	g_free(chr);
+ }
+@@ -398,7 +399,7 @@ static void desc_iface_destroy(gpointer user_data)
+ 	struct descriptor *desc = user_data;
+ 
+ 	g_free(desc->uuid);
+-	g_free(desc->value);
++	free(desc->value);
+ 	g_free(desc->path);
+ 	g_free(desc);
+ }
+@@ -592,7 +593,7 @@ static gboolean register_characteristic(const char *chr_uuid,
+ 
+ 	chr = g_new0(struct characteristic, 1);
+ 	chr->uuid = g_strdup(chr_uuid);
+-	chr->value = g_memdup(value, vlen);
++	chr->value = util_memdup(value, vlen);
+ 	chr->vlen = vlen;
+ 	chr->props = props;
+ 	chr->service = g_strdup(service_path);
+diff --git a/tools/mesh-gatt/gatt.c b/tools/mesh-gatt/gatt.c
+index c8a8123fb..ab9743cd1 100644
+--- a/tools/mesh-gatt/gatt.c
++++ b/tools/mesh-gatt/gatt.c
+@@ -24,6 +24,7 @@
+ 
+ #include "src/shared/io.h"
+ #include "src/shared/shell.h"
++#include "src/shared/util.h"
+ #include "gdbus/gdbus.h"
+ #include "lib/bluetooth.h"
+ #include "lib/uuid.h"
+@@ -86,7 +87,7 @@ static void write_data_free(void *user_data)
+ {
+ 	struct write_data *data = user_data;
+ 
+-	g_free(data->gatt_data);
++	free(data->gatt_data);
+ 	free(data);
+ }
+ 
+@@ -338,7 +339,7 @@ bool mesh_gatt_write(GDBusProxy *proxy, uint8_t *buf, uint16_t len,
+ 	/* TODO: should keep in queue in case we need to cancel write? */
+ 
+ 	data->gatt_len = len;
+-	data->gatt_data = g_memdup(buf, len);
++	data->gatt_data = util_memdup(buf, len);
+ 	data->gatt_data[0] &= GATT_TYPE_MASK;
+ 	data->iov.iov_base = data->gatt_data;
+ 	data->iov.iov_len = len;
+diff --git a/unit/test-avctp.c b/unit/test-avctp.c
+index fa7db59c8..25fd3abc2 100644
+--- a/unit/test-avctp.c
++++ b/unit/test-avctp.c
+@@ -53,7 +53,7 @@ struct context {
+ #define raw_pdu(args...)					\
+ 	{							\
+ 		.valid = true,					\
+-		.data = g_memdup(data(args), sizeof(data(args))), \
++		.data = util_memdup(data(args), sizeof(data(args))), \
+ 		.size = sizeof(data(args)),			\
+ 	}
+ 
+@@ -64,7 +64,7 @@ struct context {
+ 		};							\
+ 		static struct test_data data;				\
+ 		data.test_name = g_strdup(name);			\
+-		data.pdu_list = g_memdup(pdus, sizeof(pdus));		\
++		data.pdu_list = util_memdup(pdus, sizeof(pdus));	\
+ 		tester_add(name, &data, NULL, function, NULL);		\
+ 	} while (0)
+ 
+diff --git a/unit/test-avdtp.c b/unit/test-avdtp.c
+index 4e8a68c6b..2e49def43 100644
+--- a/unit/test-avdtp.c
++++ b/unit/test-avdtp.c
+@@ -48,7 +48,7 @@ struct test_data {
+ #define raw_pdu(args...) \
+ 	{							\
+ 		.valid = true,					\
+-		.data = g_memdup(data(args), sizeof(data(args))), \
++		.data = util_memdup(data(args), sizeof(data(args))), \
+ 		.size = sizeof(data(args)),			\
+ 	}
+ 
+@@ -56,7 +56,7 @@ struct test_data {
+ 	{							\
+ 		.valid = true,					\
+ 		.fragmented = true,				\
+-		.data = g_memdup(data(args), sizeof(data(args))), \
++		.data = util_memdup(data(args), sizeof(data(args))), \
+ 		.size = sizeof(data(args)),			\
+ 	}
+ 
+@@ -67,7 +67,7 @@ struct test_data {
+ 		};							\
+ 		static struct test_data data;				\
+ 		data.test_name = g_strdup(name);			\
+-		data.pdu_list = g_memdup(pdus, sizeof(pdus));		\
++		data.pdu_list = util_memdup(pdus, sizeof(pdus));	\
+ 		tester_add(name, &data, NULL, function, NULL);	\
+ 	} while (0)
+ 
+diff --git a/unit/test-avrcp.c b/unit/test-avrcp.c
+index 34a70377d..b637a8a1b 100644
+--- a/unit/test-avrcp.c
++++ b/unit/test-avrcp.c
+@@ -61,7 +61,7 @@ struct context {
+ #define raw_pdu(args...)					\
+ 	{							\
+ 		.valid = true,					\
+-		.data = g_memdup(data(args), sizeof(data(args))), \
++		.data = util_memdup(data(args), sizeof(data(args))), \
+ 		.size = sizeof(data(args)),			\
+ 	}
+ 
+@@ -69,7 +69,7 @@ struct context {
+ 	{							\
+ 		.valid = true,					\
+ 		.browse = true,					\
+-		.data = g_memdup(data(args), sizeof(data(args))), \
++		.data = util_memdup(data(args), sizeof(data(args))), \
+ 		.size = sizeof(data(args)),			\
+ 	}
+ 
+@@ -77,7 +77,7 @@ struct context {
+ 	{							\
+ 		.valid = true,					\
+ 		.fragmented = true,				\
+-		.data = g_memdup(data(args), sizeof(data(args))), \
++		.data = util_memdup(data(args), sizeof(data(args))), \
+ 		.size = sizeof(data(args)),			\
+ 	}
+ 
+@@ -85,7 +85,7 @@ struct context {
+ 	{							\
+ 		.valid = true,					\
+ 		.continuing = true,				\
+-		.data = g_memdup(data(args), sizeof(data(args))), \
++		.data = util_memdup(data(args), sizeof(data(args))), \
+ 		.size = sizeof(data(args)),			\
+ 	}
+ 
+@@ -96,7 +96,7 @@ struct context {
+ 		};							\
+ 		static struct test_data data;				\
+ 		data.test_name = g_strdup(name);			\
+-		data.pdu_list = g_memdup(pdus, sizeof(pdus));		\
++		data.pdu_list = util_memdup(pdus, sizeof(pdus));	\
+ 		tester_add(name, &data, NULL, function, NULL);		\
+ 	} while (0)
+ 
+diff --git a/unit/test-gatt.c b/unit/test-gatt.c
+index 6a47268e6..f92d860c4 100644
+--- a/unit/test-gatt.c
++++ b/unit/test-gatt.c
+@@ -73,7 +73,7 @@ struct context {
+ #define raw_pdu(args...)					\
+ 	{							\
+ 		.valid = true,					\
+-		.data = g_memdup(data(args), sizeof(data(args))), \
++		.data = util_memdup(data(args), sizeof(data(args))), \
+ 		.size = sizeof(data(args)),			\
+ 	}
+ 
+@@ -94,7 +94,7 @@ struct context {
+ 		data.uuid = bt_uuid;					\
+ 		data.step = test_step;					\
+ 		data.source_db = db;					\
+-		data.pdu_list = g_memdup(pdus, sizeof(pdus));		\
++		data.pdu_list = util_memdup(pdus, sizeof(pdus));	\
+ 		tester_add(name, &data, NULL, function, NULL);		\
+ 	} while (0)
+ 
+diff --git a/unit/test-hfp.c b/unit/test-hfp.c
+index f504724d7..b4af99d53 100644
+--- a/unit/test-hfp.c
++++ b/unit/test-hfp.c
+@@ -17,6 +17,7 @@
+ #include <glib.h>
+ #include "src/shared/hfp.h"
+ #include "src/shared/tester.h"
++#include "src/shared/util.h"
+ 
+ struct context {
+ 	guint watch_id;
+@@ -50,7 +51,7 @@ struct test_data {
+ #define raw_pdu(args...)					\
+ 	{							\
+ 		.valid = true,					\
+-		.data = g_memdup(data(args), sizeof(data(args))), \
++		.data = util_memdup(data(args), sizeof(data(args))), \
+ 		.size = sizeof(data(args)),			\
+ 	}
+ 
+@@ -62,7 +63,7 @@ struct test_data {
+ #define type_pdu(cmd_type, args...)				\
+ 	{							\
+ 		.valid = true,					\
+-		.data = g_memdup(data(args), sizeof(data(args))), \
++		.data = util_memdup(data(args), sizeof(data(args))), \
+ 		.size = sizeof(data(args)),			\
+ 		.type = cmd_type,				\
+ 	}
+@@ -70,7 +71,7 @@ struct test_data {
+ #define frg_pdu(args...)					\
+ 	{							\
+ 		.valid = true,					\
+-		.data = g_memdup(data(args), sizeof(data(args))), \
++		.data = util_memdup(data(args), sizeof(data(args))), \
+ 		.size = sizeof(data(args)),			\
+ 		.fragmented = true,				\
+ 	}
+@@ -82,7 +83,7 @@ struct test_data {
+ 		};							\
+ 		static struct test_data data;				\
+ 		data.test_name = g_strdup(name);			\
+-		data.pdu_list = g_memdup(pdus, sizeof(pdus));		\
++		data.pdu_list = util_memdup(pdus, sizeof(pdus));	\
+ 		data.result_func = result_function;			\
+ 		tester_add(name, &data, NULL, function, NULL);		\
+ 		data.test_handler = test_handler;			\
+@@ -96,7 +97,7 @@ struct test_data {
+ 		};							\
+ 		static struct test_data data;				\
+ 		data.test_name = g_strdup(name);			\
+-		data.pdu_list = g_memdup(pdus, sizeof(pdus));		\
++		data.pdu_list = util_memdup(pdus, sizeof(pdus));	\
+ 		data.hf_result_func = result_func;			\
+ 		data.response_func = response_function;			\
+ 		tester_add(name, &data, NULL, function, NULL);		\
+diff --git a/unit/test-hog.c b/unit/test-hog.c
+index 116a5cb07..067497de4 100644
+--- a/unit/test-hog.c
++++ b/unit/test-hog.c
+@@ -59,24 +59,24 @@ struct context {
+ #define raw_pdu(args...)					\
+ {								\
+ 	.valid = true,						\
+-	.data = g_memdup(data(args), sizeof(data(args))),	\
++	.data = util_memdup(data(args), sizeof(data(args))),	\
+ 	.size = sizeof(data(args)),				\
+ }
+ 
+-#define false_pdu()	\
+-{						\
+-		.valid = false, \
++#define false_pdu()						\
++{								\
++		.valid = false,					\
+ }
+ 
+-#define define_test(name, function, args...)      \
+-	do {    \
+-		const struct test_pdu pdus[] = {			\
+-			args, { }					\
+-		};		\
+-		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);     \
++#define define_test(name, function, args...)			\
++	do {							\
++		const struct test_pdu pdus[] = {		\
++			args, { }				\
++		};						\
++		static struct test_data data;			\
++		data.test_name = g_strdup(name);		\
++		data.pdu_list = util_memdup(pdus, sizeof(pdus));\
++		tester_add(name, &data, NULL, function, NULL);	\
+ 	} while (0)
+ 
+ static gboolean context_quit(gpointer user_data)
+diff --git a/unit/test-sdp.c b/unit/test-sdp.c
+index 8f95fcb71..5c04a71eb 100644
+--- a/unit/test-sdp.c
++++ b/unit/test-sdp.c
+@@ -47,14 +47,16 @@ struct test_data {
+ #define raw_pdu(args...) \
+ 	{							\
+ 		.valid = true,					\
+-		.raw_data = g_memdup(raw_data(args), sizeof(raw_data(args))), \
++		.raw_data = util_memdup(raw_data(args),		\
++					sizeof(raw_data(args))), \
+ 		.raw_size = sizeof(raw_data(args)),		\
+ 	}
+ 
+ #define raw_pdu_cont(cont, args...) \
+ 	{							\
+ 		.valid = true,					\
+-		.raw_data = g_memdup(raw_data(args), sizeof(raw_data(args))), \
++		.raw_data = util_memdup(raw_data(args),		\
++					sizeof(raw_data(args))), \
+ 		.raw_size = sizeof(raw_data(args)),		\
+ 		.cont_len = cont,				\
+ 	}
+@@ -66,7 +68,7 @@ struct test_data {
+ 		};							\
+ 		static struct test_data data;				\
+ 		data.mtu = _mtu;					\
+-		data.pdu_list = g_memdup(pdus, sizeof(pdus));		\
++		data.pdu_list = util_memdup(pdus, sizeof(pdus));	\
+ 		tester_add(name, &data, NULL, test_sdp, NULL);		\
+ 	} while (0)
+ 
+@@ -92,7 +94,7 @@ struct test_data_de {
+ #define define_test_de_attr(name, input, exp) \
+ 	do {								\
+ 		static struct test_data_de data;			\
+-		data.input_data = g_memdup(input, sizeof(input));	\
++		data.input_data = util_memdup(input, sizeof(input));	\
+ 		data.input_size = sizeof(input);			\
+ 		data.expected = exp;					\
+ 		tester_add("/sdp/DE/ATTR/" name, &data,	NULL,		\
+diff --git a/unit/test-uhid.c b/unit/test-uhid.c
+index 001d39a3d..8a8eef855 100644
+--- a/unit/test-uhid.c
++++ b/unit/test-uhid.c
+@@ -61,7 +61,7 @@ struct context {
+ 		};							\
+ 		static struct test_data data;				\
+ 		data.test_name = g_strdup(name);			\
+-		data.pdu_list = g_memdup(pdus, sizeof(pdus));		\
++		data.pdu_list = util_memdup(pdus, sizeof(pdus));	\
+ 		tester_add(name, &data, NULL, function, NULL);		\
+ 	} while (0)
+ 
+-- 
+2.17.1
+
-- 
2.17.1

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

             reply	other threads:[~2022-02-06  9:04 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-06  9:04 Thomas Devoogdt [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-02-06  9:23 [Buildroot] [PATCH] package/bluez5_utils: fix build with libglib2 >= 2.69 Thomas Devoogdt
2022-02-06 14:15 ` Peter Korsgaard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220206090426.15583-1-thomas.devoogdt@gmail.com \
    --to=thomas.devoogdt@gmail.com \
    --cc=buildroot@buildroot.org \
    --cc=marcin@bis.org.pl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.