Fix error checking in get_temp_file_name().

Checking errno without first checking that the call failed means that
if some other call prior to mkstemp failed with EINVAL prior to this,
the assert would fire even if mkstemp succeeded. If something failed
with EEXIST, it would go in to an infinite loop.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@229035 91177308-0d34-0410-b5e6-96231b3b80d8
Change-Id: I512f29f2cb4b379e9f33e9bc12c060851152647c
This commit is contained in:
Dan Albert
2015-02-13 03:02:28 +00:00
parent 8f9e26da95
commit 00ed9870d9

View File

@@ -69,10 +69,13 @@ get_temp_file_name()
std::string Name;
int FD = -1;
do {
Name = "libcxx.XXXXXX";
FD = mkstemp(&Name[0]);
assert(errno != EINVAL && "Something is wrong with the mkstemp's argument");
} while (FD == -1 || errno == EEXIST);
Name = "libcxx.XXXXXX";
FD = mkstemp(&Name[0]);
if (FD == -1 && errno == EINVAL) {
perror("mkstemp");
abort();
}
} while (FD == -1);
close(FD);
return Name;
#endif