From f96204dbe08d5800453d54aec4dc282f1301f834 Mon Sep 17 00:00:00 2001
From: Yang Tse <yangsita@gmail.com>
Date: Mon, 18 May 2009 15:49:32 +0000
Subject: [PATCH] Remove run-time requirement for advapi32.dll since c-ares can
 work even with no advapi32.dll at all.

---
 ares/ares.h              |  3 +--
 ares/ares_library_init.c | 21 +++++++++------------
 ares/ares_strerror.c     |  1 -
 3 files changed, 10 insertions(+), 15 deletions(-)

diff --git a/ares/ares.h b/ares/ares.h
index 6db8b9647a..9f4413f626 100644
--- a/ares/ares.h
+++ b/ares/ares.h
@@ -96,8 +96,7 @@ extern "C" {
 
 /* ares_library_init error codes */
 #define ARES_ELOADIPHLPAPI           21
-#define ARES_ELOADADVAPI32           22
-#define ARES_EADDRGetNetworkParams   23
+#define ARES_EADDRGetNetworkParams   22
 
 /* Flag values */
 #define ARES_FLAG_USEVC         (1 << 0)
diff --git a/ares/ares_library_init.c b/ares/ares_library_init.c
index ee3fe68b6b..b3e8dc9e17 100644
--- a/ares/ares_library_init.c
+++ b/ares/ares_library_init.c
@@ -41,23 +41,20 @@ static int ares_win32_init(void)
       return ARES_EADDRGetNetworkParams;
     }
 
+  /*
+   * When advapi32.dll is unavailable or advapi32.dll has no SystemFunction036,
+   * also known as RtlGenRandom, which is the case for Windows versions prior
+   * to WinXP then c-ares uses portable rand() function. Then don't error here.
+   */
+
   hnd_advapi32 = 0;
   hnd_advapi32 = LoadLibrary("advapi32.dll");
-  if (!hnd_advapi32)
+  if (hnd_advapi32)
     {
-      FreeLibrary(hnd_iphlpapi);
-      return ARES_ELOADADVAPI32;
+      fpSystemFunction036 = (fpSystemFunction036_t)
+        GetProcAddress(hnd_advapi32, "SystemFunction036");
     }
 
-  fpSystemFunction036 = (fpSystemFunction036_t)
-    GetProcAddress(hnd_advapi32, "SystemFunction036");
-
-  /*
-   * Intentionally avoid checking if the address of SystemFunction036, a.k.a.
-   * RtlGenRandom, has been located or not. This function is only available on
-   * WinXP and later. When unavailable c-ares uses portable rand() function.
-   */
-
 #endif
   return ARES_SUCCESS;
 }
diff --git a/ares/ares_strerror.c b/ares/ares_strerror.c
index 6ded90da01..6d291ee633 100644
--- a/ares/ares_strerror.c
+++ b/ares/ares_strerror.c
@@ -45,7 +45,6 @@ const char *ares_strerror(int code)
     "Given hostname is not numeric",
     "Illegal hints flags specified",
     "Error loading iphlpapi.dll",
-    "Error loading advapi32.dll",
     "Could not find GetNetworkParams function"
   };
 
-- 
GitLab