diff mbox series

[meta-oe,3/4] canopenterm: Fix build with musl

Message ID 20241122190131.2810521-3-raj.khem@gmail.com
State New
Headers show
Series [meta-gnome,1/4] libdex: Link with libucontext on musl | expand

Commit Message

Khem Raj Nov. 22, 2024, 7:01 p.m. UTC
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 ...-initialize-msghdr-in-a-portable-way.patch | 42 +++++++++++++++++++
 .../canopenterm/canopenterm_1.0.8.bb          |  4 +-
 2 files changed, 45 insertions(+), 1 deletion(-)
 create mode 100644 meta-oe/recipes-extended/canopenterm/canopenterm/0001-can_linux-initialize-msghdr-in-a-portable-way.patch
diff mbox series

Patch

diff --git a/meta-oe/recipes-extended/canopenterm/canopenterm/0001-can_linux-initialize-msghdr-in-a-portable-way.patch b/meta-oe/recipes-extended/canopenterm/canopenterm/0001-can_linux-initialize-msghdr-in-a-portable-way.patch
new file mode 100644
index 0000000000..09bbd40215
--- /dev/null
+++ b/meta-oe/recipes-extended/canopenterm/canopenterm/0001-can_linux-initialize-msghdr-in-a-portable-way.patch
@@ -0,0 +1,42 @@ 
+From 464ed82087b0514694ab69e2808e859cb6f13833 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 22 Nov 2024 10:35:12 -0800
+Subject: [PATCH] can_linux: initialize msghdr in a portable way
+
+musl has padding bytes inside the msghdr struct which means initializing
+full structure will cause wrong assignments, doing partial assignment is
+more portable and assign the elements after that
+
+Fixes
+src/core/can_linux.c:362:71: error: incompatible pointer to integer conversion initializing 'int' with an expression of type 'void *' [-Wint-conversion]
+  |     struct msghdr      msg              = { &sa, sizeof(sa), &iov, 1, NULL, 0, 0 };
+  |                                                                       ^~~~
+
+Upstream-Status: Submitted [https://github.com/CANopenTerm/CANopenTerm/pull/70]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/core/can_linux.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/src/core/can_linux.c b/src/core/can_linux.c
+index d8824be..b4e7907 100644
+--- a/src/core/can_linux.c
++++ b/src/core/can_linux.c
+@@ -359,11 +359,16 @@ static char** get_can_interfaces(int* count)
+     int                fd;
+     char               buf[BUFFER_SIZE] = { 0 };
+     struct iovec       iov              = { buf, sizeof(buf) };
+-    struct msghdr      msg              = { &sa, sizeof(sa), &iov, 1, NULL, 0, 0 };
++    struct msghdr      msg              = { 0 };
+     int                len;
+     int                max_interfaces   = 10;
+     int                can_count        = 0;
+     char**             can_interfaces   = (char**)os_calloc(max_interfaces * sizeof(char*), sizeof(char));
++    
++    msg.msg_name = &sa;
++    msg.msg_namelen = sizeof(sa);
++    msg.msg_iov = &iov;
++    msg.msg_iovlen = 1;
+ 
+     struct
+     {
diff --git a/meta-oe/recipes-extended/canopenterm/canopenterm_1.0.8.bb b/meta-oe/recipes-extended/canopenterm/canopenterm_1.0.8.bb
index 191225bb15..c9bf0af560 100644
--- a/meta-oe/recipes-extended/canopenterm/canopenterm_1.0.8.bb
+++ b/meta-oe/recipes-extended/canopenterm/canopenterm_1.0.8.bb
@@ -15,7 +15,9 @@  LIC_FILES_CHKSUM = "file://LICENSE.md;md5=10e84ea70e8c3a1fbc462f5424806474"
 
 DEPENDS = "libinih libsdl2 lua libsocketcan pocketpy"
 
-SRC_URI = "git://github.com/CANopenTerm/CANopenTerm.git;protocol=https;branch=main"
+SRC_URI = "git://github.com/CANopenTerm/CANopenTerm.git;protocol=https;branch=main \
+           file://0001-can_linux-initialize-msghdr-in-a-portable-way.patch \
+           "
 SRCREV = "5bc04e09351f68e889381e1912b0445c4f18ee32"
 
 S = "${WORKDIR}/git"