diff options
Diffstat (limited to 'lldb/source/Host/posix/HostInfoPosix.cpp')
| -rw-r--r-- | lldb/source/Host/posix/HostInfoPosix.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/lldb/source/Host/posix/HostInfoPosix.cpp b/lldb/source/Host/posix/HostInfoPosix.cpp index f300e22e9e5..78300fca034 100644 --- a/lldb/source/Host/posix/HostInfoPosix.cpp +++ b/lldb/source/Host/posix/HostInfoPosix.cpp @@ -32,10 +32,16 @@ bool HostInfoPosix::GetHostname(std::string &s) { char hostname[PATH_MAX]; hostname[sizeof(hostname) - 1] = '\0'; if (::gethostname(hostname, sizeof(hostname) - 1) == 0) { - struct hostent *h = ::gethostbyname(hostname); - if (h) - s.assign(h->h_name); - else + struct addrinfo hints; + struct addrinfo *res = nullptr; + std::memset(&hints, 0, sizeof(hints)); + hints.ai_flags = AI_CANONNAME; + int err = ::getaddrinfo(hostname, nullptr, &hints, &res); + if (err == 0) { + assert(res->ai_canonname && "getaddrinfo found a canonical name"); + s.assign(res->ai_canonname); + freeaddrinfo(res); + } else s.assign(hostname); return true; } |

