Fix windows' implementation of status when a file doesn't exist.

The unix one was returning no_such_file_or_directory, but the windows one
was return success.

Update the one one caller that was depending on the old behavior.

llvm-svn: 187463
This commit is contained in:
Rafael Espindola 2013-07-31 00:10:25 +00:00
parent c7be519dc0
commit 107b74c6c3
2 changed files with 15 additions and 6 deletions

View File

@ -399,8 +399,15 @@ error_code remove(const Twine &path, bool &existed) {
SmallVector<wchar_t, 128> path_utf16;
file_status st;
if (error_code ec = status(path, st))
return ec;
error_code EC = status(path, st);
if (EC) {
if (EC == windows_error::file_not_found ||
EC == windows_error::path_not_found) {
existed = false;
return error_code::success();
}
return EC;
}
if (error_code ec = UTF8ToUTF16(path.toStringRef(path_storage),
path_utf16))
@ -611,11 +618,9 @@ handle_status_error:
Result = file_status(file_type::file_not_found);
else if (EC == windows_error::sharing_violation)
Result = file_status(file_type::type_unknown);
else {
else
Result = file_status(file_type::status_error);
return EC;
}
return error_code::success();
return EC;
}
error_code status(const Twine &path, file_status &result) {

View File

@ -240,6 +240,10 @@ TEST_F(FileSystemTest, TempFiles) {
ASSERT_NO_ERROR(fs::remove(Twine(TempPath2), TempFileExists));
EXPECT_TRUE(TempFileExists);
error_code EC = fs::status(TempPath2.c_str(), B);
EXPECT_EQ(EC, errc::no_such_file_or_directory);
EXPECT_EQ(B.type(), fs::file_type::file_not_found);
// Make sure Temp2 doesn't exist.
ASSERT_NO_ERROR(fs::exists(Twine(TempPath2), TempFileExists));
EXPECT_FALSE(TempFileExists);