This code is trying too hard and failing. Either the result of
gethostname() is canonical or it is not. If it is not, then trying to
canonicalize it is – for various reasons – a lost cause. For example, a
given machine might have multiple network interfaces with multiple
addresses per interface, each with a different canonical name.
Separably, the result of HostInfoPosix::GetHostname() and latency
thereof shouldn't depend on whether networking is up or down or what
network the machine happened to be attached to at any given moment (like
a laptop that travels between work and home).
https://reviews.llvm.org/D67230
llvm-svn: 371596
#include <grp.h>
#include <limits.h>
#include <mutex>
-#include <netdb.h>
#include <pwd.h>
#include <stdlib.h>
#include <sys/types.h>
char hostname[PATH_MAX];
hostname[sizeof(hostname) - 1] = '\0';
if (::gethostname(hostname, sizeof(hostname) - 1) == 0) {
- 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);
+ s.assign(hostname);
return true;
}
return false;