aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-qt/qt5/qtwebengine/chromium/0022-chromium-musl-initialize-msghdr-in-a-compatible-mann.patch
blob: 85afe41b4e361eb3039556ce6009a407fcb623c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
From d9e2ebea235d1df86d8db78c949481ca89340e42 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sun, 10 May 2020 08:16:01 -0700
Subject: [PATCH] chromium: musl: initialize msghdr in a compatible manner

initialize msghdr in a compatible manner

msghdr stuct from socket.h is not same between musl and glibc
where musl claims to be more posix  compliant where as glibc seems
to fill whats needed for linux sizewise and chooses long enough types
which maybe questionable, therefore constructing a structure with explicit
constructor is not going to work correctly for musl and glibc at same time

see
https://git.musl-libc.org/cgit/musl/commit/arch/x86_64/bits/socket.h?id=7168790763cdeb794df52be6e3b39fbb021c5a64

This fix initialized the struct to 0 first and then sets the struct elements
by name, so we dont have to hard code the positions of elements when initializing
structure

Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 chromium/net/socket/udp_socket_posix.cc | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/chromium/net/socket/udp_socket_posix.cc b/chromium/net/socket/udp_socket_posix.cc
index 71265568be5..42e0d298045 100644
--- a/chromium/net/socket/udp_socket_posix.cc
+++ b/chromium/net/socket/udp_socket_posix.cc
@@ -1151,8 +1151,12 @@ SendResult UDPSocketPosixSender::InternalSendmmsgBuffers(
   for (auto& buffer : buffers)
     msg_iov->push_back({const_cast<char*>(buffer->data()), buffer->length()});
   msgvec->reserve(buffers.size());
-  for (size_t j = 0; j < buffers.size(); j++)
-    msgvec->push_back({{nullptr, 0, &msg_iov[j], 1, nullptr, 0, 0}, 0});
+  for (size_t j = 0; j < buffers.size(); j++) {
+    struct msghdr m = {0};
+    m.msg_iov = &msg_iov[j];
+    m.msg_iovlen = 1;
+    msgvec->push_back({m, 0});
+  }
   int result = HANDLE_EINTR(Sendmmsg(fd, &msgvec[0], buffers.size(), 0));
   SendResult send_result(0, 0, std::move(buffers));
   if (result < 0) {