From 6c5e6a030dc49f36a5d4f2846fe78daf3d02a03d Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 4 Oct 2013 15:23:54 -0700 Subject: Fix loading of libresolv when the .so file (not .so.2) isn't installed glibc is nice to us and provides a #define with the actual name. On most Linux systems, the .so file is installed only if the glibc-devel package is installed. For all of us Qt developers, it's installed. But for end users, it might not be. Change-Id: Id455371db91a074befd3bcd071f285c725d7e7e5 Reviewed-by: Ian Monroe Reviewed-by: Richard J. Moore --- src/network/kernel/qdnslookup_unix.cpp | 15 +++++++++++++-- src/network/kernel/qhostinfo_unix.cpp | 15 +++++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/network/kernel/qdnslookup_unix.cpp b/src/network/kernel/qdnslookup_unix.cpp index 729729d929..052c492f07 100644 --- a/src/network/kernel/qdnslookup_unix.cpp +++ b/src/network/kernel/qdnslookup_unix.cpp @@ -52,6 +52,10 @@ #include #include +#ifdef __GNU_LIBRARY__ +# include +#endif + QT_BEGIN_NAMESPACE #ifndef QT_NO_LIBRARY @@ -77,9 +81,16 @@ struct QDnsLookupStateDeleter static void resolveLibrary() { - QLibrary lib(QLatin1String("resolv")); + QLibrary lib; +#ifdef LIBRESOLV_SO + lib.setFileName(QStringLiteral(LIBRESOLV_SO)); if (!lib.load()) - return; +#endif + { + lib.setFileName(QLatin1String("resolv")); + if (!lib.load()) + return; + } local_dn_expand = dn_expand_proto(lib.resolve("__dn_expand")); if (!local_dn_expand) diff --git a/src/network/kernel/qhostinfo_unix.cpp b/src/network/kernel/qhostinfo_unix.cpp index 04daf2ecdd..dc2702b552 100644 --- a/src/network/kernel/qhostinfo_unix.cpp +++ b/src/network/kernel/qhostinfo_unix.cpp @@ -63,6 +63,10 @@ # include #endif +#ifdef __GNU_LIBRARY__ +# include +#endif + #if defined (QT_NO_GETADDRINFO) static QBasicMutex getHostByNameMutex; #endif @@ -93,9 +97,16 @@ static res_state_ptr local_res = 0; static void resolveLibrary() { #if !defined(QT_NO_LIBRARY) && !defined(Q_OS_QNX) - QLibrary lib(QLatin1String("resolv")); + QLibrary lib; +#ifdef LIBRESOLV_SO + lib.setFileName(QStringLiteral(LIBRESOLV_SO)); if (!lib.load()) - return; +#endif + { + lib.setFileName(QLatin1String("resolv")); + if (!lib.load()) + return; + } local_res_init = res_init_proto(lib.resolve("__res_init")); if (!local_res_init) -- cgit v1.2.3