41bc2a63e2
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.
40 lines
1.4 KiB
Diff
40 lines
1.4 KiB
Diff
--- 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())
|