qtbase: durable patch for struct ifreq on Redox (6.11.1)

qnetworkinterface_unix.cpp getifaddrs path declares `struct ifreq ifr` to pass
to getMtu(), but Redox relibc <net/if.h> provides only interface flags and the
if_nameindex() helpers -- no struct ifreq (Redox has no SIOCGIF* ioctls). The
SIOCGIFMTU body in getMtu() is #ifdef-guarded and compiles out, so the type
only needs to be complete. Define a minimal-but-standard struct ifreq under
#if defined(__redox__) at file scope; the ioctls that would use it fail
gracefully at runtime (mtu stays 0). Durable patch, wired into qtbase recipe.
This commit is contained in:
2026-07-24 21:15:54 +09:00
parent f3da8875ee
commit 41bc2a63e2
2 changed files with 40 additions and 0 deletions
+1
View File
@@ -14,6 +14,7 @@ patches = [
"qtwaylandscanner-null-guard-listeners.patch",
"redox-in6-pktinfo.patch",
"redox-forkfd-rusage-scope.patch",
"redox-ifreq-struct.patch",
]
[build]
@@ -0,0 +1,39 @@
--- a/src/network/kernel/qnetworkinterface_unix.cpp
+++ b/src/network/kernel/qnetworkinterface_unix.cpp
@@ -31,6 +31,36 @@
#include <qplatformdefs.h>
+#if defined(__redox__)
+// Redox relibc's <net/if.h> declares the interface flags and if_nameindex()
+// helpers but not struct ifreq (there is no SIOCGIF* ioctl support on Redox).
+// The getifaddrs path below still declares a `struct ifreq` to pass to
+// getMtu(); the SIOCGIFMTU body is #ifdef-guarded and compiles out, so this
+// only needs to be a complete type. Provide a minimal-but-standard layout so
+// the network module builds; the ioctls that would use it fail gracefully at
+// runtime (mtu stays 0).
+# ifndef IFNAMSIZ
+# define IFNAMSIZ 16
+# endif
+struct ifreq {
+ char ifr_name[IFNAMSIZ];
+ union {
+ struct sockaddr ifr_addr;
+ struct sockaddr ifr_dstaddr;
+ struct sockaddr ifr_broadaddr;
+ struct sockaddr ifr_netmask;
+ struct sockaddr ifr_hwaddr;
+ short ifr_flags;
+ int ifr_ifindex;
+ int ifr_metric;
+ int ifr_mtu;
+ char ifr_slave[IFNAMSIZ];
+ char ifr_newname[IFNAMSIZ];
+ char *ifr_data;
+ };
+};
+#endif // __redox__
+
QT_BEGIN_NAMESPACE
static QHostAddress addressFromSockaddr(sockaddr *sa, int ifindex = 0, const QString &ifname = QString())