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:
parent
5fc82fd6b5
commit
541c202be8
|
@ -2029,8 +2029,12 @@ std::string CompilerInvocation::getModuleHash() const {
|
||||||
// running, so mangle the hostname in to the module hash to separate them.
|
// running, so mangle the hostname in to the module hash to separate them.
|
||||||
char hostname[256];
|
char hostname[256];
|
||||||
hostname[0] = 0;
|
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));
|
code = hash_combine(code, StringRef(hostname));
|
||||||
|
}
|
||||||
// Ignore failures in gethostname() by not including the hostname in the hash.
|
// Ignore failures in gethostname() by not including the hostname in the hash.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue