winfsp unit tests and fixes
This commit is contained in:
		| @@ -36,8 +36,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_new_file_with_normal_attribute) { | |||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               FILE_ATTRIBUTE_NORMAL, 0); |                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
|  |  | ||||||
| @@ -53,8 +53,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_new_file_with_read_only_attribute) { | |||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               FILE_ATTRIBUTE_READONLY, 0); |                               CREATE_NEW, FILE_ATTRIBUTE_READONLY, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
|  |  | ||||||
| @@ -73,8 +73,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_new_file_with_read_only_attribute) { | |||||||
| // | // | ||||||
| //   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | | //   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | | ||||||
| //   GENERIC_WRITE, | //   GENERIC_WRITE, | ||||||
| //                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, | //                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
| //                               CREATE_NEW, FILE_ATTRIBUTE_SYSTEM, 0); | //                               CREATE_NEW, FILE_ATTRIBUTE_SYSTEM, nullptr); | ||||||
| //   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | //   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
| //   ::CloseHandle(handle); | //   ::CloseHandle(handle); | ||||||
| // | // | ||||||
| @@ -93,8 +93,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_new_file_with_hidden_attribute) { | |||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               FILE_ATTRIBUTE_HIDDEN, 0); |                               CREATE_NEW, FILE_ATTRIBUTE_HIDDEN, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
|  |  | ||||||
| @@ -112,8 +112,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_always_file_with_normal_attribute) { | |||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); |                               CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
|  |  | ||||||
| @@ -129,8 +129,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_file_with_read_only_attribute) { | |||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               CREATE_ALWAYS, FILE_ATTRIBUTE_READONLY, 0); |                               CREATE_ALWAYS, FILE_ATTRIBUTE_READONLY, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
|  |  | ||||||
| @@ -150,8 +150,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_file_with_read_only_attribute) { | |||||||
| // | // | ||||||
| //   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | | //   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | | ||||||
| //   GENERIC_WRITE, | //   GENERIC_WRITE, | ||||||
| //                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, | //                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
| //                               CREATE_ALWAYS, FILE_ATTRIBUTE_SYSTEM, 0); | //                               CREATE_ALWAYS, FILE_ATTRIBUTE_SYSTEM, nullptr); | ||||||
| //   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | //   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
| //   ::CloseHandle(handle); | //   ::CloseHandle(handle); | ||||||
| // | // | ||||||
| @@ -170,8 +170,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_create_always_file_with_hidden_attribute) { | |||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, 0); |                               CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
|  |  | ||||||
| @@ -199,8 +199,8 @@ TYPED_TEST(winfsp_test, cr8_attr_can_handle_read_only_directory) { | |||||||
|   EXPECT_EQ((FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_READONLY), attr); |   EXPECT_EQ((FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_READONLY), attr); | ||||||
|  |  | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               FILE_ATTRIBUTE_NORMAL, 0); |                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -35,7 +35,7 @@ TYPED_TEST(winfsp_test, cr8_nl_can_create_file_of_max_component_length) { | |||||||
|     DWORD max_length{}; |     DWORD max_length{}; | ||||||
|     EXPECT_TRUE(::GetVolumeInformationA(this->mount_location.c_str(), nullptr, |     EXPECT_TRUE(::GetVolumeInformationA(this->mount_location.c_str(), nullptr, | ||||||
|                                         0, nullptr, &max_length, nullptr, |                                         0, nullptr, &max_length, nullptr, | ||||||
|                                         nullptr, 0)); |                                         nullptr, nullptr)); | ||||||
|     EXPECT_EQ(255U, max_length); |     EXPECT_EQ(255U, max_length); | ||||||
|  |  | ||||||
|     auto file_path = utils::path::combine(this->mount_location, |     auto file_path = utils::path::combine(this->mount_location, | ||||||
| @@ -43,10 +43,10 @@ TYPED_TEST(winfsp_test, cr8_nl_can_create_file_of_max_component_length) { | |||||||
|                                               std::string(max_length, 'a'), |                                               std::string(max_length, 'a'), | ||||||
|                                           }); |                                           }); | ||||||
|  |  | ||||||
|     auto handle = |     auto handle = ::CreateFileA( | ||||||
|         ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |         file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                       FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |         FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                       FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |         FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|     ASSERT_NE(INVALID_HANDLE_VALUE, handle); |     ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|     EXPECT_TRUE(::CloseHandle(handle)); |     EXPECT_TRUE(::CloseHandle(handle)); | ||||||
|   } |   } | ||||||
| @@ -58,7 +58,7 @@ TYPED_TEST(winfsp_test, | |||||||
|     DWORD max_length{}; |     DWORD max_length{}; | ||||||
|     EXPECT_TRUE(::GetVolumeInformationA(this->mount_location.c_str(), nullptr, |     EXPECT_TRUE(::GetVolumeInformationA(this->mount_location.c_str(), nullptr, | ||||||
|                                         0, nullptr, &max_length, nullptr, |                                         0, nullptr, &max_length, nullptr, | ||||||
|                                         nullptr, 0)); |                                         nullptr, nullptr)); | ||||||
|     EXPECT_EQ(255U, max_length); |     EXPECT_EQ(255U, max_length); | ||||||
|  |  | ||||||
|     auto file_path = utils::path::combine(this->mount_location, |     auto file_path = utils::path::combine(this->mount_location, | ||||||
| @@ -66,10 +66,10 @@ TYPED_TEST(winfsp_test, | |||||||
|                                               std::string(max_length + 1U, 'a'), |                                               std::string(max_length + 1U, 'a'), | ||||||
|                                           }); |                                           }); | ||||||
|  |  | ||||||
|     auto handle = |     auto handle = ::CreateFileA( | ||||||
|         ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |         file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                       FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |         FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                       FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |         FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|     ASSERT_EQ(INVALID_HANDLE_VALUE, handle); |     ASSERT_EQ(INVALID_HANDLE_VALUE, handle); | ||||||
|     EXPECT_EQ(ERROR_INVALID_NAME, ::GetLastError()); |     EXPECT_EQ(ERROR_INVALID_NAME, ::GetLastError()); | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -35,8 +35,8 @@ TYPED_TEST(winfsp_test, cr8_file_can_create_file) { | |||||||
|       utils::path::combine(this->mount_location, {"test_file_0"}), |       utils::path::combine(this->mount_location, {"test_file_0"}), | ||||||
|   }; |   }; | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               FILE_ATTRIBUTE_NORMAL, 0); |                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
| } | } | ||||||
| @@ -46,8 +46,8 @@ TYPED_TEST(winfsp_test, cr8_file_create_new_fails_when_file_exists) { | |||||||
|       utils::path::combine(this->mount_location, {"test_file_0"}), |       utils::path::combine(this->mount_location, {"test_file_0"}), | ||||||
|   }; |   }; | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               FILE_ATTRIBUTE_NORMAL, 0); |                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||||
|   ASSERT_EQ(INVALID_HANDLE_VALUE, handle); |   ASSERT_EQ(INVALID_HANDLE_VALUE, handle); | ||||||
|   EXPECT_EQ(ERROR_FILE_EXISTS, ::GetLastError()); |   EXPECT_EQ(ERROR_FILE_EXISTS, ::GetLastError()); | ||||||
| } | } | ||||||
| @@ -57,8 +57,8 @@ TYPED_TEST(winfsp_test, cr8_file_can_open_existing_file) { | |||||||
|       utils::path::combine(this->mount_location, {"test_file_0"}), |       utils::path::combine(this->mount_location, {"test_file_0"}), | ||||||
|   }; |   }; | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); |                               OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
| } | } | ||||||
| @@ -68,8 +68,8 @@ TYPED_TEST(winfsp_test, cr8_file_create_always_succeeds_when_file_exists) { | |||||||
|       utils::path::combine(this->mount_location, {"test_file_0"}), |       utils::path::combine(this->mount_location, {"test_file_0"}), | ||||||
|   }; |   }; | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, 0); |                               CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   // EXPECT file_size is 0 |   // EXPECT file_size is 0 | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
| @@ -79,15 +79,16 @@ TYPED_TEST(winfsp_test, cr8_file_can_delete_file_after_close) { | |||||||
|   auto file_path{ |   auto file_path{ | ||||||
|       utils::path::combine(this->mount_location, {"test_file_0"}), |       utils::path::combine(this->mount_location, {"test_file_0"}), | ||||||
|   }; |   }; | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0); |                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, | ||||||
|  |                     FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
|  |  | ||||||
|   handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                          FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, |                          FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                          FILE_FLAG_DELETE_ON_CLOSE, 0); |                          OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_EQ(INVALID_HANDLE_VALUE, handle); |   ASSERT_EQ(INVALID_HANDLE_VALUE, handle); | ||||||
|   EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError()); |   EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError()); | ||||||
|  |  | ||||||
| @@ -101,8 +102,8 @@ TYPED_TEST(winfsp_test, | |||||||
|        }) { |        }) { | ||||||
|     auto handle = ::CreateFileA( |     auto handle = ::CreateFileA( | ||||||
|         (this->mount_location + "\\" + invalid_char + "\\test_file_0").c_str(), |         (this->mount_location + "\\" + invalid_char + "\\test_file_0").c_str(), | ||||||
|         GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, |         GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, | ||||||
|         CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); |         nullptr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||||
|     ASSERT_EQ(INVALID_HANDLE_VALUE, handle); |     ASSERT_EQ(INVALID_HANDLE_VALUE, handle); | ||||||
|     if (handle != INVALID_HANDLE_VALUE) { |     if (handle != INVALID_HANDLE_VALUE) { | ||||||
|       std::cout << "char: " << invalid_char << std::endl; |       std::cout << "char: " << invalid_char << std::endl; | ||||||
| @@ -121,8 +122,8 @@ TYPED_TEST(winfsp_test, | |||||||
|                            }), |                            }), | ||||||
|   }; |   }; | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               FILE_ATTRIBUTE_NORMAL, 0); |                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||||
|   ASSERT_EQ(INVALID_HANDLE_VALUE, handle); |   ASSERT_EQ(INVALID_HANDLE_VALUE, handle); | ||||||
|   EXPECT_EQ(ERROR_INVALID_NAME, ::GetLastError()); |   EXPECT_EQ(ERROR_INVALID_NAME, ::GetLastError()); | ||||||
| } | } | ||||||
| @@ -153,35 +154,35 @@ TYPED_TEST(winfsp_test, cr8_file_directory_delete_fails_if_not_empty) { | |||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               FILE_ATTRIBUTE_NORMAL, 0); |                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
|  |  | ||||||
|   handle = |   handle = ::CreateFileA( | ||||||
|       ::CreateFileA(dir_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       dir_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, |       FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, | ||||||
|                     FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, 0); |       FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
|  |  | ||||||
|   handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                          FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, |                          FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                          FILE_FLAG_DELETE_ON_CLOSE, 0); |                          OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
|  |  | ||||||
|   handle = |   handle = ::CreateFileA( | ||||||
|       ::CreateFileA(dir_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       dir_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, |       FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, | ||||||
|                     FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, 0); |       FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
|  |  | ||||||
|   handle = |   handle = ::CreateFileA( | ||||||
|       ::CreateFileA(dir_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       dir_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, |       FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, | ||||||
|                     FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, 0); |       FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_EQ(INVALID_HANDLE_VALUE, handle); |   ASSERT_EQ(INVALID_HANDLE_VALUE, handle); | ||||||
|   EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError()); |   EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError()); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -43,7 +43,7 @@ TYPED_TEST(winfsp_test, delete_directory_fails_if_directory_not_empty) { | |||||||
|  |  | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); |                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
|  |  | ||||||
| @@ -67,12 +67,12 @@ TYPED_TEST(winfsp_test, | |||||||
|  |  | ||||||
|   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); |                               CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|   ::CloseHandle(handle); |   ::CloseHandle(handle); | ||||||
|  |  | ||||||
|   handle = ::CreateFileA(file_path.c_str(), DELETE, FILE_SHARE_DELETE, nullptr, |   handle = ::CreateFileA(file_path.c_str(), DELETE, FILE_SHARE_DELETE, nullptr, | ||||||
|                          OPEN_EXISTING, 0, 0); |                          OPEN_EXISTING, 0, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|   typedef struct { |   typedef struct { | ||||||
| @@ -83,7 +83,7 @@ TYPED_TEST(winfsp_test, | |||||||
|   EXPECT_TRUE(::SetFileInformationByHandle(handle, FileDispositionInfo, |   EXPECT_TRUE(::SetFileInformationByHandle(handle, FileDispositionInfo, | ||||||
|                                            &disp_info, sizeof disp_info)); |                                            &disp_info, sizeof disp_info)); | ||||||
|   auto handle2 = ::CreateFileA(file_path.c_str(), FILE_READ_ATTRIBUTES, 0, |   auto handle2 = ::CreateFileA(file_path.c_str(), FILE_READ_ATTRIBUTES, 0, | ||||||
|                                nullptr, OPEN_EXISTING, 0, 0); |                                nullptr, OPEN_EXISTING, 0, nullptr); | ||||||
|   EXPECT_EQ(INVALID_HANDLE_VALUE, handle2); |   EXPECT_EQ(INVALID_HANDLE_VALUE, handle2); | ||||||
|   EXPECT_EQ(ERROR_ACCESS_DENIED, ::GetLastError()); |   EXPECT_EQ(ERROR_ACCESS_DENIED, ::GetLastError()); | ||||||
|  |  | ||||||
| @@ -92,6 +92,32 @@ TYPED_TEST(winfsp_test, | |||||||
|   EXPECT_FALSE(::DeleteFileA(file_path.c_str())); |   EXPECT_FALSE(::DeleteFileA(file_path.c_str())); | ||||||
|   EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError()); |   EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError()); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | TYPED_TEST(winfsp_test, delete_can_handle_mmap_after_file_deletion) { | ||||||
|  |   auto file_path{ | ||||||
|  |       utils::path::combine(this->mount_location, {"test_file_3"}), | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   auto handle = | ||||||
|  |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|  |                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, | ||||||
|  |                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|  |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|  |   auto *mapping = | ||||||
|  |       ::CreateFileMappingA(handle, nullptr, PAGE_READWRITE, 0, | ||||||
|  |                            SystemInfo.dwAllocationGranularity, nullptr); | ||||||
|  |   EXPECT_TRUE(mapping != nullptr); | ||||||
|  |   EXPECT_TRUE(::CloseHandle(handle)); | ||||||
|  |  | ||||||
|  |   auto handle = ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|  |                               FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, | ||||||
|  |                               OPEN_EXISTING, 0, nullptr); | ||||||
|  |   EXPECT_EQ(INVALID_HANDLE_VALUE, handle); | ||||||
|  |   EXPECT_EQ(ERROR_FILE_NOT_FOUND, ::GetLastError()); | ||||||
|  |  | ||||||
|  |   EXPECT_TRUE(::CloseHandle(mapping)); | ||||||
|  | } | ||||||
| } // namespace repertory | } // namespace repertory | ||||||
|  |  | ||||||
| #endif // defined(_WIN32) | #endif // defined(_WIN32) | ||||||
|   | |||||||
| @@ -36,8 +36,8 @@ TYPED_TEST(winfsp_test, info_can_get_tag_info) { | |||||||
|   }; |   }; | ||||||
|   auto handle = |   auto handle = | ||||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|   FILE_ATTRIBUTE_TAG_INFO tag_info{}; |   FILE_ATTRIBUTE_TAG_INFO tag_info{}; | ||||||
| @@ -61,8 +61,8 @@ TYPED_TEST(winfsp_test, info_can_get_basic_info) { | |||||||
|   }; |   }; | ||||||
|   auto handle = |   auto handle = | ||||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|   FILE_BASIC_INFO basic_info{}; |   FILE_BASIC_INFO basic_info{}; | ||||||
| @@ -91,8 +91,8 @@ TYPED_TEST(winfsp_test, info_can_get_standard_info) { | |||||||
|   }; |   }; | ||||||
|   auto handle = |   auto handle = | ||||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|   FILE_STANDARD_INFO std_info{}; |   FILE_STANDARD_INFO std_info{}; | ||||||
| @@ -113,8 +113,8 @@ TYPED_TEST(winfsp_test, info_can_get_file_name_info) { | |||||||
|   }; |   }; | ||||||
|   auto handle = |   auto handle = | ||||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|   std::array<std::uint8_t, sizeof(FILE_NAME_INFO) + MAX_PATH> name_info{}; |   std::array<std::uint8_t, sizeof(FILE_NAME_INFO) + MAX_PATH> name_info{}; | ||||||
| @@ -143,8 +143,8 @@ TYPED_TEST(winfsp_test, info_get_file_name_info_buffer_too_small) { | |||||||
|   }; |   }; | ||||||
|   auto handle = |   auto handle = | ||||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|   std::array<std::uint8_t, sizeof(FILE_NAME_INFO)> name_info{}; |   std::array<std::uint8_t, sizeof(FILE_NAME_INFO)> name_info{}; | ||||||
| @@ -171,8 +171,8 @@ TYPED_TEST(winfsp_test, info_can_get_file_info) { | |||||||
|   }; |   }; | ||||||
|   auto handle = |   auto handle = | ||||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|   BY_HANDLE_FILE_INFORMATION file_info{}; |   BY_HANDLE_FILE_INFORMATION file_info{}; | ||||||
| @@ -217,8 +217,8 @@ TYPED_TEST(winfsp_test, info_can_get_file_path) { | |||||||
|   }; |   }; | ||||||
|   auto handle = |   auto handle = | ||||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|   std::string final_path; |   std::string final_path; | ||||||
| @@ -245,8 +245,8 @@ TYPED_TEST(winfsp_test, info_can_set_file_info_attributes_to_hidden) { | |||||||
|   }; |   }; | ||||||
|   auto handle = |   auto handle = | ||||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|   EXPECT_TRUE(::SetFileAttributesA(file_path.c_str(), FILE_ATTRIBUTE_HIDDEN)); |   EXPECT_TRUE(::SetFileAttributesA(file_path.c_str(), FILE_ATTRIBUTE_HIDDEN)); | ||||||
| @@ -266,8 +266,8 @@ TYPED_TEST( | |||||||
|   }; |   }; | ||||||
|   auto handle = |   auto handle = | ||||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|   EXPECT_TRUE(::SetFileAttributesA( |   EXPECT_TRUE(::SetFileAttributesA( | ||||||
| @@ -286,8 +286,8 @@ TYPED_TEST(winfsp_test, info_can_set_creation_file_time) { | |||||||
|   }; |   }; | ||||||
|   auto handle = |   auto handle = | ||||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|   BY_HANDLE_FILE_INFORMATION orig_file_info{}; |   BY_HANDLE_FILE_INFORMATION orig_file_info{}; | ||||||
| @@ -320,8 +320,8 @@ TYPED_TEST(winfsp_test, info_can_set_accessed_file_time) { | |||||||
|   }; |   }; | ||||||
|   auto handle = |   auto handle = | ||||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|   BY_HANDLE_FILE_INFORMATION orig_file_info{}; |   BY_HANDLE_FILE_INFORMATION orig_file_info{}; | ||||||
| @@ -353,8 +353,8 @@ TYPED_TEST(winfsp_test, info_can_set_written_file_time) { | |||||||
|   }; |   }; | ||||||
|   auto handle = |   auto handle = | ||||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|   BY_HANDLE_FILE_INFORMATION orig_file_info{}; |   BY_HANDLE_FILE_INFORMATION orig_file_info{}; | ||||||
| @@ -386,8 +386,8 @@ TYPED_TEST(winfsp_test, info_can_set_file_size) { | |||||||
|   }; |   }; | ||||||
|   auto handle = |   auto handle = | ||||||
|       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, |       ::CreateFileA(file_path.c_str(), GENERIC_READ | GENERIC_WRITE, | ||||||
|                     FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_NEW, |                     FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, CREATE_NEW, | ||||||
|                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, 0); |                     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, nullptr); | ||||||
|   ASSERT_NE(INVALID_HANDLE_VALUE, handle); |   ASSERT_NE(INVALID_HANDLE_VALUE, handle); | ||||||
|  |  | ||||||
|   auto offset = ::SetFilePointer(handle, 42, nullptr, FILE_BEGIN); |   auto offset = ::SetFilePointer(handle, 42, nullptr, FILE_BEGIN); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user