Be more conservative about gethostname()'s truncating behaviour

Don't assume it will provide an error or null-terminate the string on
truncation, since POSIX doesn't guarantee either behaviour (although
Linux and Darwin at least will do the 'right thing').

llvm-svn: 228613
This commit is contained in:
Ben Langmuir 2015-02-09 21:55:44 +00:00
parent 5fc82fd6b5
commit 541c202be8
1 changed files with 5 additions and 1 deletions

View File

@ -2029,8 +2029,12 @@ std::string CompilerInvocation::getModuleHash() const {
// running, so mangle the hostname in to the module hash to separate them.
char hostname[256];
hostname[0] = 0;
if (gethostname(hostname, 255) == 0)
if (gethostname(hostname, 255) == 0) {
// Forcibly null-terminate the result, since POSIX doesn't require that
// truncation result in an error or that truncated names be null-terminated.
hostname[sizeof(hostname)-1] = 0;
code = hash_combine(code, StringRef(hostname));
}
// Ignore failures in gethostname() by not including the hostname in the hash.
#endif