All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v2,1/1] package/pipewire: fix uclibc build
@ 2022-05-30 21:33 Fabrice Fontaine
  2022-05-31  8:17 ` Thomas Petazzoni via buildroot
  0 siblings, 1 reply; 2+ messages in thread
From: Fabrice Fontaine @ 2022-05-30 21:33 UTC (permalink / raw)
  To: buildroot; +Cc: James Hilliard, Fabrice Fontaine

Fix the following uclibc build failure:

/home/buildroot/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mipsel-buildroot-linux-uclibc/10.3.0/../../../../mipsel-buildroot-linux-uclibc/bin/ld: src/pipewire/libpipewire-0.3.so.0.351.0.p/introspect.c.o: in function `pw_node_info_merge':
/home/buildroot/autobuild/instance-0/output-1/build/pipewire-0.3.51/build/../src/pipewire/introspect.c:216: undefined reference to `reallocarray'

Fixes:
 - http://autobuild.buildroot.org/results/374582f75713c4116ae23f972c5bc55214879502

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
Changes v1 -> v2:
 - Backport correct upstream fix (previous one was broken)

 .../0002-fix-detection-of-reallocarray.patch  | 287 ++++++++++++++++++
 1 file changed, 287 insertions(+)
 create mode 100644 package/pipewire/0002-fix-detection-of-reallocarray.patch

diff --git a/package/pipewire/0002-fix-detection-of-reallocarray.patch b/package/pipewire/0002-fix-detection-of-reallocarray.patch
new file mode 100644
index 0000000000..8cb80c8672
--- /dev/null
+++ b/package/pipewire/0002-fix-detection-of-reallocarray.patch
@@ -0,0 +1,287 @@
+From 85ca67b9275780cc40bee08f92954db9184cad56 Mon Sep 17 00:00:00 2001
+From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+Date: Fri, 27 May 2022 15:00:17 +0200
+Subject: [PATCH] fix detection of reallocarray
+
+Fix detection of reallocarray (e.g. on glibc) raised since commit
+0708a39b439cec2871cfe3b705191028397e5b8b
+
+Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+
+[Retrieved (and backported) from:
+https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/85ca67b9275780cc40bee08f92954db9184cad56]
+---
+ meson.build                                            |  1 +
+ pipewire-jack/src/metadata.c                           |  2 +-
+ spa/plugins/bluez5/bluez5-dbus.c                       |  5 +++++
+ src/modules/module-client-node/client-node.c           |  2 +-
+ src/modules/module-client-node/remote-node.c           |  4 ++--
+ src/modules/module-client-node/v0/client-node.c        |  4 ++--
+ .../client-endpoint/endpoint-stream.c                  |  4 ++--
+ .../module-session-manager/client-endpoint/endpoint.c  |  4 ++--
+ .../client-session/endpoint-link.c                     |  4 ++--
+ .../module-session-manager/client-session/session.c    |  4 ++--
+ src/pipewire/introspect.c                              |  6 +++---
+ src/pipewire/utils.c                                   | 10 ++++++++++
+ src/pipewire/utils.h                                   |  5 ++---
+ 13 files changed, 35 insertions(+), 20 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 314091779..e6bc29ba4 100644
+--- a/meson.build
++++ b/meson.build
+@@ -375,6 +375,7 @@ check_functions = [
+   ['gettid', '#include <unistd.h>', ['-D_GNU_SOURCE'], []],
+   ['memfd_create', '#include <sys/mman.h>', ['-D_GNU_SOURCE'], []],
+   ['getrandom', '#include <stddef.h>\n#include <sys/random.h>', ['-D_GNU_SOURCE'], []],
++  ['reallocarray', '#include <stdlib.h>', ['-D_GNU_SOURCE'], []],
+   ['sigabbrev_np', '#include <string.h>', ['-D_GNU_SOURCE'], []],
+   ['XSetIOErrorExitHandler', '#include <X11/Xlib.h>', [], [x11_dep]],
+ ]
+diff --git a/pipewire-jack/src/metadata.c b/pipewire-jack/src/metadata.c
+index 8ccb5a348..d50948ff4 100644
+--- a/pipewire-jack/src/metadata.c
++++ b/pipewire-jack/src/metadata.c
+@@ -120,7 +120,7 @@ static jack_property_t *add_property(jack_description_t *desc, const char *key,
+ 
+ 	if (desc->property_cnt == desc->property_size) {
+ 		ns = desc->property_size > 0 ? desc->property_size * 2 : 8;
+-		np = reallocarray(desc->properties, ns, sizeof(*prop));
++		np = pw_reallocarray(desc->properties, ns, sizeof(*prop));
+ 		if (np == NULL)
+ 			return NULL;
+ 		desc->property_size = ns;
+diff --git a/spa/plugins/bluez5/bluez5-dbus.c b/spa/plugins/bluez5/bluez5-dbus.c
+index 98bf05df1..c2e4a7ba7 100644
+--- a/spa/plugins/bluez5/bluez5-dbus.c
++++ b/spa/plugins/bluez5/bluez5-dbus.c
+@@ -50,6 +50,7 @@
+ #include <spa/utils/string.h>
+ #include <spa/utils/json.h>
+ 
++#include "config.h"
+ #include "codec-loader.h"
+ #include "player.h"
+ #include "defs.h"
+@@ -1579,7 +1580,11 @@ const struct a2dp_codec **spa_bt_device_get_supported_a2dp_codecs(struct spa_bt_
+ 		if (j >= size) {
+ 			const struct a2dp_codec **p;
+ 			size = size * 2;
++#ifdef HAVE_REALLOCARRRAY
+ 			p = reallocarray(supported_codecs, size, sizeof(const struct a2dp_codec *));
++#else
++			p = realloc(supported_codecs, size * sizeof(const struct a2dp_codec *));
++#endif
+ 			if (p == NULL) {
+ 				free(supported_codecs);
+ 				return NULL;
+diff --git a/src/modules/module-client-node/client-node.c b/src/modules/module-client-node/client-node.c
+index 2533c360c..9357d03da 100644
+--- a/src/modules/module-client-node/client-node.c
++++ b/src/modules/module-client-node/client-node.c
+@@ -191,7 +191,7 @@ static int update_params(struct params *p, uint32_t n_params, const struct spa_p
+ 		p->params = NULL;
+ 	} else {
+ 		struct spa_pod **np;
+-		np = reallocarray(p->params, p->n_params, sizeof(struct spa_pod *));
++		np = pw_reallocarray(p->params, p->n_params, sizeof(struct spa_pod *));
+ 		if (np == NULL) {
+ 			pw_log_error("%p: can't realloc: %m", p);
+ 			free(p->params);
+diff --git a/src/modules/module-client-node/remote-node.c b/src/modules/module-client-node/remote-node.c
+index c04273e95..c0af9a21f 100644
+--- a/src/modules/module-client-node/remote-node.c
++++ b/src/modules/module-client-node/remote-node.c
+@@ -318,7 +318,7 @@ static int add_node_update(struct node_data *data, uint32_t change_mask, uint32_
+ 							id, &idx, NULL, &param, &b.b);
+ 				if (res == 1) {
+ 					void *p;
+-					p = reallocarray(params, n_params + 1, sizeof(struct spa_pod *));
++					p = pw_reallocarray(params, n_params + 1, sizeof(struct spa_pod *));
+ 					if (p == NULL) {
+ 						res = -errno;
+ 						pw_log_error("realloc failed: %m");
+@@ -384,7 +384,7 @@ static int add_port_update(struct node_data *data, struct pw_impl_port *port, ui
+ 							id, &idx, NULL, &param, &b.b);
+ 				if (res == 1) {
+ 					void *p;
+-					p = reallocarray(params, n_params + 1, sizeof(struct spa_pod*));
++					p = pw_reallocarray(params, n_params + 1, sizeof(struct spa_pod*));
+ 					if (p == NULL) {
+ 						res = -errno;
+ 						pw_log_error("realloc failed: %m");
+diff --git a/src/modules/module-client-node/v0/client-node.c b/src/modules/module-client-node/v0/client-node.c
+index e71abbb14..aeb5931c6 100644
+--- a/src/modules/module-client-node/v0/client-node.c
++++ b/src/modules/module-client-node/v0/client-node.c
+@@ -476,7 +476,7 @@ do_update_port(struct node *this,
+ 			port->params = NULL;
+ 		} else {
+ 			void *p;
+-			p = reallocarray(port->params, port->n_params, sizeof(struct spa_pod *));
++			p = pw_reallocarray(port->params, port->n_params, sizeof(struct spa_pod *));
+ 			if (p == NULL) {
+ 				pw_log_error("%p: port %u can't realloc: %m", this, port_id);
+ 				free(port->params);
+@@ -1049,7 +1049,7 @@ client_node0_update(void *data,
+ 			this->params = NULL;
+ 		} else {
+ 			void *p;
+-			p = reallocarray(this->params, this->n_params, sizeof(struct spa_pod *));
++			p = pw_reallocarray(this->params, this->n_params, sizeof(struct spa_pod *));
+ 			if (p == NULL) {
+ 				pw_log_error("%p: can't realloc: %m", this);
+ 				free(this->params);
+diff --git a/src/modules/module-session-manager/client-endpoint/endpoint-stream.c b/src/modules/module-session-manager/client-endpoint/endpoint-stream.c
+index 8d7f2da2b..8dde6f749 100644
+--- a/src/modules/module-session-manager/client-endpoint/endpoint-stream.c
++++ b/src/modules/module-session-manager/client-endpoint/endpoint-stream.c
+@@ -196,7 +196,7 @@ int endpoint_stream_update(struct endpoint_stream *this,
+ 			this->params = NULL;
+ 		} else {
+ 			void *p;
+-			p = reallocarray(this->params, n_params, sizeof(struct spa_pod*));
++			p = pw_reallocarray(this->params, n_params, sizeof(struct spa_pod*));
+ 			if (p == NULL) {
+ 				free(this->params);
+ 				this->params = NULL;
+@@ -227,7 +227,7 @@ int endpoint_stream_update(struct endpoint_stream *this,
+ 				this->info.params = NULL;
+ 			} else {
+ 				void *p;
+-				p = reallocarray(this->info.params, info->n_params, sizeof(struct spa_param_info));
++				p = pw_reallocarray(this->info.params, info->n_params, sizeof(struct spa_param_info));
+ 				if (p == NULL) {
+ 					free(this->info.params);
+ 					this->info.params = NULL;
+diff --git a/src/modules/module-session-manager/client-endpoint/endpoint.c b/src/modules/module-session-manager/client-endpoint/endpoint.c
+index 8a7863ee1..aa13989b6 100644
+--- a/src/modules/module-session-manager/client-endpoint/endpoint.c
++++ b/src/modules/module-session-manager/client-endpoint/endpoint.c
+@@ -213,7 +213,7 @@ int endpoint_update(struct endpoint *this,
+ 			this->params = NULL;
+ 		} else {
+ 			void *p;
+-			p = reallocarray(this->params, n_params, sizeof(struct spa_pod*));
++			p = pw_reallocarray(this->params, n_params, sizeof(struct spa_pod*));
+ 			if (p == NULL) {
+ 				free(this->params);
+ 				this->params = NULL;
+@@ -245,7 +245,7 @@ int endpoint_update(struct endpoint *this,
+ 				this->info.params = NULL;
+ 			} else {
+ 				void *p;
+-				p = reallocarray(this->info.params, info->n_params, sizeof(struct spa_param_info));
++				p = pw_reallocarray(this->info.params, info->n_params, sizeof(struct spa_param_info));
+ 				if (p == NULL) {
+ 					free(this->info.params);
+ 					this->info.params = NULL;
+diff --git a/src/modules/module-session-manager/client-session/endpoint-link.c b/src/modules/module-session-manager/client-session/endpoint-link.c
+index 9048fe30c..0bdbfc946 100644
+--- a/src/modules/module-session-manager/client-session/endpoint-link.c
++++ b/src/modules/module-session-manager/client-session/endpoint-link.c
+@@ -209,7 +209,7 @@ int endpoint_link_update(struct endpoint_link *this,
+ 			this->params = NULL;
+ 		} else {
+ 			void *p;
+-			p = reallocarray(this->params, n_params, sizeof(struct spa_pod*));
++			p = pw_reallocarray(this->params, n_params, sizeof(struct spa_pod*));
+ 			if (p == NULL) {
+ 				free(this->params);
+ 				this->params = NULL;
+@@ -241,7 +241,7 @@ int endpoint_link_update(struct endpoint_link *this,
+ 				this->info.params = NULL;
+ 			} else {
+ 				void *p;
+-				p = reallocarray(this->info.params, info->n_params, sizeof(struct spa_param_info));
++				p = pw_reallocarray(this->info.params, info->n_params, sizeof(struct spa_param_info));
+ 				if (p == NULL) {
+ 					free(this->info.params);
+ 					this->info.params = NULL;
+diff --git a/src/modules/module-session-manager/client-session/session.c b/src/modules/module-session-manager/client-session/session.c
+index 681c56118..87c1b96a7 100644
+--- a/src/modules/module-session-manager/client-session/session.c
++++ b/src/modules/module-session-manager/client-session/session.c
+@@ -196,7 +196,7 @@ int session_update(struct session *this,
+ 			this->params = NULL;
+ 		} else {
+ 			void *p;
+-			p = reallocarray(this->params, n_params, sizeof(struct spa_pod*));
++			p = pw_reallocarray(this->params, n_params, sizeof(struct spa_pod*));
+ 			if (p == NULL) {
+ 				free(this->params);
+ 				this->params = NULL;
+@@ -222,7 +222,7 @@ int session_update(struct session *this,
+ 				this->info.params = NULL;
+ 			} else {
+ 				void *p;
+-				p = reallocarray(this->info.params, info->n_params, sizeof(struct spa_param_info));
++				p = pw_reallocarray(this->info.params, info->n_params, sizeof(struct spa_param_info));
+ 				if (p == NULL) {
+ 					free(this->info.params);
+ 					this->info.params = NULL;
+diff --git a/src/pipewire/introspect.c b/src/pipewire/introspect.c
+index 35598a90d..2855009c0 100644
+--- a/src/pipewire/introspect.c
++++ b/src/pipewire/introspect.c
+@@ -213,7 +213,7 @@ struct pw_node_info *pw_node_info_merge(struct pw_node_info *info,
+ 		uint32_t i, user, n_params = update->n_params;
+ 		void *np;
+ 
+-		np = reallocarray(info->params, n_params, sizeof(struct spa_param_info));
++		np = pw_reallocarray(info->params, n_params, sizeof(struct spa_param_info));
+ 		if (np == NULL) {
+ 			free(info->params);
+ 			info->params = NULL;
+@@ -283,7 +283,7 @@ struct pw_port_info *pw_port_info_merge(struct pw_port_info *info,
+ 		uint32_t i, user, n_params = update->n_params;
+ 		void *np;
+ 
+-		np = reallocarray(info->params, n_params, sizeof(struct spa_param_info));
++		np = pw_reallocarray(info->params, n_params, sizeof(struct spa_param_info));
+ 		if (np == NULL) {
+ 			free(info->params);
+ 			info->params = NULL;
+@@ -443,7 +443,7 @@ struct pw_device_info *pw_device_info_merge(struct pw_device_info *info,
+ 		uint32_t i, user, n_params = update->n_params;
+ 		void *np;
+ 
+-		np = reallocarray(info->params, n_params, sizeof(struct spa_param_info));
++		np = pw_reallocarray(info->params, n_params, sizeof(struct spa_param_info));
+ 		if (np == NULL) {
+ 			free(info->params);
+ 			info->params = NULL;
+diff --git a/src/pipewire/utils.c b/src/pipewire/utils.c
+index 2f3240faf..a644049fd 100644
+--- a/src/pipewire/utils.c
++++ b/src/pipewire/utils.c
+@@ -168,3 +168,13 @@ ssize_t pw_getrandom(void *buf, size_t buflen, unsigned int flags)
+ 	close(fd);
+ 	return bytes;
+ }
++
++SPA_EXPORT
++void* pw_reallocarray(void *ptr, size_t nmemb, size_t size)
++{
++#ifdef HAVE_REALLOCARRAY
++	return reallocarray(ptr, nmemb, size);
++#else
++	return realloc(ptr, nmemb * size);
++#endif
++}
+diff --git a/src/pipewire/utils.h b/src/pipewire/utils.h
+index 8f8e002b7..b320db22f 100644
+--- a/src/pipewire/utils.h
++++ b/src/pipewire/utils.h
+@@ -88,6 +88,8 @@ pw_strip(char *str, const char *whitespace);
+ 
+ ssize_t pw_getrandom(void *buf, size_t buflen, unsigned int flags);
+ 
++void* pw_reallocarray(void *ptr, size_t nmemb, size_t size);
++
+ /**
+  * \}
+  */
+-- 
+GitLab
+
-- 
2.35.1

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

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [Buildroot] [PATCH v2,1/1] package/pipewire: fix uclibc build
  2022-05-30 21:33 [Buildroot] [PATCH v2,1/1] package/pipewire: fix uclibc build Fabrice Fontaine
@ 2022-05-31  8:17 ` Thomas Petazzoni via buildroot
  0 siblings, 0 replies; 2+ messages in thread
From: Thomas Petazzoni via buildroot @ 2022-05-31  8:17 UTC (permalink / raw)
  To: Fabrice Fontaine; +Cc: James Hilliard, buildroot

On Mon, 30 May 2022 23:33:24 +0200
Fabrice Fontaine <fontaine.fabrice@gmail.com> wrote:

> Fix the following uclibc build failure:
> 
> /home/buildroot/autobuild/instance-0/output-1/host/opt/ext-toolchain/bin/../lib/gcc/mipsel-buildroot-linux-uclibc/10.3.0/../../../../mipsel-buildroot-linux-uclibc/bin/ld: src/pipewire/libpipewire-0.3.so.0.351.0.p/introspect.c.o: in function `pw_node_info_merge':
> /home/buildroot/autobuild/instance-0/output-1/build/pipewire-0.3.51/build/../src/pipewire/introspect.c:216: undefined reference to `reallocarray'
> 
> Fixes:
>  - http://autobuild.buildroot.org/results/374582f75713c4116ae23f972c5bc55214879502
> 
> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> ---
> Changes v1 -> v2:
>  - Backport correct upstream fix (previous one was broken)

Applied to master, thanks.

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-05-31  8:17 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-05-30 21:33 [Buildroot] [PATCH v2,1/1] package/pipewire: fix uclibc build Fabrice Fontaine
2022-05-31  8:17 ` Thomas Petazzoni via buildroot

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.