diff options
Diffstat (limited to 'ares/ares_gethostbyname.c')
-rw-r--r-- | ares/ares_gethostbyname.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/ares/ares_gethostbyname.c b/ares/ares_gethostbyname.c index b39d53be6..decac5583 100644 --- a/ares/ares_gethostbyname.c +++ b/ares/ares_gethostbyname.c @@ -220,15 +220,25 @@ static int file_lookup(const char *name, struct hostent **host) int status; #ifdef WIN32 - char PATH_HOSTS[MAX_PATH]; if (IsNT) { - GetSystemDirectory(PATH_HOSTS, MAX_PATH); - strcat(PATH_HOSTS, PATH_HOSTS_NT); - } else { + char tmp[MAX_PATH]; + HKEY hkeyHosts; + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, &hkeyHosts) + == ERROR_SUCCESS) + { + DWORD dwLength = MAX_PATH; + RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, tmp, + &dwLength); + ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH); + RegCloseKey(hkeyHosts); + } + } + else GetWindowsDirectory(PATH_HOSTS, MAX_PATH); - strcat(PATH_HOSTS, PATH_HOSTS_9X); - } + + strcat(PATH_HOSTS, WIN_PATH_HOSTS); #elif defined(WATT32) extern const char *_w32_GetHostsFile (void); |