diff --git a/repertory/librepertory/src/drives/winfsp/winfsp_drive.cpp b/repertory/librepertory/src/drives/winfsp/winfsp_drive.cpp index c8feb6d6..d10f7b8b 100644 --- a/repertory/librepertory/src/drives/winfsp/winfsp_drive.cpp +++ b/repertory/librepertory/src/drives/winfsp/winfsp_drive.cpp @@ -309,19 +309,15 @@ auto winfsp_drive::Create(PWSTR file_name, UINT32 create_options, UINT64 /*allocation_size*/, PVOID * /*file_node*/, PVOID *file_desc, OpenFileInfo *ofi) -> NTSTATUS { REPERTORY_USES_FUNCTION_NAME(); + *file_desc = reinterpret_cast(INVALID_HANDLE_VALUE); // TODO Need to revisit this // (ConvertSecurityDescriptorToStringSecurityDescriptor/ConvertStringSecurityDescriptorToSecurityDescriptor) - auto error = api_error::error; - if ((create_options & FILE_DIRECTORY_FILE) != 0U) { - attributes |= FILE_ATTRIBUTE_DIRECTORY; - } else { - attributes &= static_cast( - ~(FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_NORMAL)); - attributes |= FILE_ATTRIBUTE_ARCHIVE; - } + attributes |= + ((create_options & FILE_DIRECTORY_FILE) != 0U ? FILE_ATTRIBUTE_DIRECTORY + : FILE_ATTRIBUTE_ARCHIVE); auto now = utils::time::get_time_now(); auto meta = create_meta_attributes( @@ -339,6 +335,7 @@ auto winfsp_drive::Create(PWSTR file_name, UINT32 create_options, open_file_data ofd{}; std::uint64_t handle{}; std::shared_ptr file; + auto error{api_error::error}; if ((attributes & FILE_ATTRIBUTE_DIRECTORY) != 0U) { error = provider_.create_directory(api_path, meta); if (error == api_error::success) { @@ -760,19 +757,13 @@ auto winfsp_drive::Overwrite(PVOID /*file_node*/, PVOID file_desc, return handle_error(res); } - if (replace_attributes != 0U) { - if (attributes == 0U || attributes == FILE_ATTRIBUTE_NORMAL) { - attributes = FILE_ATTRIBUTE_ARCHIVE; - } + attributes |= FILE_ATTRIBUTE_ARCHIVE; + if (replace_attributes == 0U) { meta[META_ATTRIBUTES] = std::to_string(attributes); return handle_error(provider_.set_item_meta(api_path, meta)); } - if (attributes == 0U) { - return handle_error(api_error::success); - } - auto current_attributes = utils::get_attributes_from_meta(meta); auto merged_attributes = attributes | current_attributes; if (merged_attributes != current_attributes) { @@ -1050,19 +1041,11 @@ auto winfsp_drive::SetBasicInfo(PVOID /*file_node*/, PVOID file_desc, api_path = file->get_api_path(); if (attributes == INVALID_FILE_ATTRIBUTES) { attributes = 0U; - } else if (attributes == 0U) { - attributes = file->is_directory() ? FILE_ATTRIBUTE_DIRECTORY - : FILE_ATTRIBUTE_ARCHIVE; } api_meta_map meta; if (attributes != 0U) { - auto next_attributes = - attributes & static_cast(~FILE_ATTRIBUTE_NORMAL); - if (next_attributes == 0U) { - next_attributes = attributes; - } - meta[META_ATTRIBUTES] = std::to_string(next_attributes); + meta[META_ATTRIBUTES] = std::to_string(attributes); } if ((creation_time != 0U) && (creation_time != max_time)) {