This commit is contained in:
		| @@ -24,14 +24,14 @@ | |||||||
|  |  | ||||||
| #include "types/repertory.hpp" | #include "types/repertory.hpp" | ||||||
| #include "utils/string.hpp" | #include "utils/string.hpp" | ||||||
|  | #include "utils/time.hpp" | ||||||
| #include "utils/utils.hpp" | #include "utils/utils.hpp" | ||||||
|  |  | ||||||
| namespace repertory { | namespace repertory { | ||||||
| namespace utils::aws { | namespace utils::aws { | ||||||
| #if defined(_WIN32) | #if defined(_WIN32) | ||||||
| [[nodiscard]] inline auto format_time(std::uint64_t t) -> std::uint64_t { | [[nodiscard]] inline auto format_time(std::uint64_t t) -> std::uint64_t { | ||||||
|   FILETIME ft{}; |   auto ft = utils::time::unix_time_to_filetime(t); | ||||||
|   utils::unix_time_to_filetime(t, ft); |  | ||||||
|   return static_cast<std::uint64_t>(ft.dwHighDateTime) << 32u | |   return static_cast<std::uint64_t>(ft.dwHighDateTime) << 32u | | ||||||
|          ft.dwLowDateTime; |          ft.dwLowDateTime; | ||||||
| } | } | ||||||
| @@ -75,7 +75,7 @@ struct head_object_result { | |||||||
|       struct tm tm1 {}; |       struct tm tm1 {}; | ||||||
|       // Mon, 17 Dec 2012 02:14:10 GMT |       // Mon, 17 Dec 2012 02:14:10 GMT | ||||||
| #if defined(_WIN32) | #if defined(_WIN32) | ||||||
|       utils::strptime(date.c_str(), "%a, %d %b %Y %H:%M:%S %Z", &tm1); |       utils::time::strptime(date.c_str(), "%a, %d %b %Y %H:%M:%S %Z", &tm1); | ||||||
| #else | #else | ||||||
|       strptime(date.c_str(), "%a, %d %b %Y %H:%M:%S %Z", &tm1); |       strptime(date.c_str(), "%a, %d %b %Y %H:%M:%S %Z", &tm1); | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ | |||||||
|  |  | ||||||
| #include "platform/platform.hpp" | #include "platform/platform.hpp" | ||||||
| #include "types/startup_exception.hpp" | #include "types/startup_exception.hpp" | ||||||
|  | #include "utils/common.hpp" | ||||||
| #include "utils/error_utils.hpp" | #include "utils/error_utils.hpp" | ||||||
| #include "utils/file_utils.hpp" | #include "utils/file_utils.hpp" | ||||||
| #include "utils/path.hpp" | #include "utils/path.hpp" | ||||||
|   | |||||||
| @@ -24,6 +24,7 @@ | |||||||
| #include "platform/platform.hpp" | #include "platform/platform.hpp" | ||||||
| #include "types/remote.hpp" | #include "types/remote.hpp" | ||||||
| #include "types/repertory.hpp" | #include "types/repertory.hpp" | ||||||
|  | #include "utils/common.hpp" | ||||||
| #include "utils/encryption.hpp" | #include "utils/encryption.hpp" | ||||||
| #include "utils/error_utils.hpp" | #include "utils/error_utils.hpp" | ||||||
| #include "utils/string.hpp" | #include "utils/string.hpp" | ||||||
|   | |||||||
| @@ -39,6 +39,7 @@ | |||||||
| #include "types/startup_exception.hpp" | #include "types/startup_exception.hpp" | ||||||
| #include "utils/base64.hpp" | #include "utils/base64.hpp" | ||||||
| #include "utils/collection.hpp" | #include "utils/collection.hpp" | ||||||
|  | #include "utils/common.hpp" | ||||||
| #include "utils/error_utils.hpp" | #include "utils/error_utils.hpp" | ||||||
| #include "utils/polling.hpp" | #include "utils/polling.hpp" | ||||||
| #include "utils/time.hpp" | #include "utils/time.hpp" | ||||||
|   | |||||||
| @@ -32,6 +32,7 @@ | |||||||
| #include "platform/platform.hpp" | #include "platform/platform.hpp" | ||||||
| #include "rpc/server/server.hpp" | #include "rpc/server/server.hpp" | ||||||
| #include "types/remote.hpp" | #include "types/remote.hpp" | ||||||
|  | #include "utils/common.hpp" | ||||||
| #include "utils/error_utils.hpp" | #include "utils/error_utils.hpp" | ||||||
| #include "utils/file_utils.hpp" | #include "utils/file_utils.hpp" | ||||||
| #include "utils/path.hpp" | #include "utils/path.hpp" | ||||||
|   | |||||||
| @@ -31,6 +31,7 @@ | |||||||
| #include "platform/platform.hpp" | #include "platform/platform.hpp" | ||||||
| #include "types/remote.hpp" | #include "types/remote.hpp" | ||||||
| #include "types/repertory.hpp" | #include "types/repertory.hpp" | ||||||
|  | #include "utils/common.hpp" | ||||||
| #include "utils/error_utils.hpp" | #include "utils/error_utils.hpp" | ||||||
| #include "utils/file.hpp" | #include "utils/file.hpp" | ||||||
| #include "utils/path.hpp" | #include "utils/path.hpp" | ||||||
|   | |||||||
| @@ -34,10 +34,13 @@ | |||||||
| #include "drives/winfsp/remotewinfsp/i_remote_instance.hpp" | #include "drives/winfsp/remotewinfsp/i_remote_instance.hpp" | ||||||
| #include "events/event_system.hpp" | #include "events/event_system.hpp" | ||||||
| #include "events/events.hpp" | #include "events/events.hpp" | ||||||
|  | #include "platform/platform.hpp" | ||||||
| #include "types/remote.hpp" | #include "types/remote.hpp" | ||||||
| #include "types/repertory.hpp" | #include "types/repertory.hpp" | ||||||
|  | #include "utils/common.hpp" | ||||||
| #include "utils/file_utils.hpp" | #include "utils/file_utils.hpp" | ||||||
| #include "utils/path.hpp" | #include "utils/path.hpp" | ||||||
|  | #include "utils/time.hpp" | ||||||
|  |  | ||||||
| #if !defined(_SH_DENYNO) | #if !defined(_SH_DENYNO) | ||||||
| #define _SH_DENYRW 0x10 // deny read/write mode | #define _SH_DENYRW 0x10 // deny read/write mode | ||||||
| @@ -96,10 +99,10 @@ void remote_server::populate_stat(const char *path, bool directory, | |||||||
|       directory ? 2 + drive_.get_directory_item_count( |       directory ? 2 + drive_.get_directory_item_count( | ||||||
|                           utils::path::create_api_path(path)) |                           utils::path::create_api_path(path)) | ||||||
|                 : 1); |                 : 1); | ||||||
|   r_stat.st_atimespec = utils::time64_to_unix_time(unix_st.st_atime); |   r_stat.st_atimespec = utils::time::time64_to_unix_time(unix_st.st_atime); | ||||||
|   r_stat.st_birthtimespec = utils::time64_to_unix_time(unix_st.st_ctime); |   r_stat.st_birthtimespec = utils::time::time64_to_unix_time(unix_st.st_ctime); | ||||||
|   r_stat.st_ctimespec = utils::time64_to_unix_time(unix_st.st_ctime); |   r_stat.st_ctimespec = utils::time::time64_to_unix_time(unix_st.st_ctime); | ||||||
|   r_stat.st_mtimespec = utils::time64_to_unix_time(unix_st.st_mtime); |   r_stat.st_mtimespec = utils::time::time64_to_unix_time(unix_st.st_mtime); | ||||||
|   r_stat.st_size = static_cast<remote::file_size>(unix_st.st_size); |   r_stat.st_size = static_cast<remote::file_size>(unix_st.st_size); | ||||||
|   r_stat.st_mode = unix_st.st_mode; |   r_stat.st_mode = unix_st.st_mode; | ||||||
| } | } | ||||||
| @@ -544,7 +547,8 @@ auto remote_server::fuse_write( | |||||||
|         errno = EFAULT; |         errno = EFAULT; | ||||||
|         if ((write_size == 0) || |         if ((write_size == 0) || | ||||||
|             native_file::attach(os_handle)->write_bytes( |             native_file::attach(os_handle)->write_bytes( | ||||||
|                 buffer, static_cast<std::size_t>(write_size), write_offset, |                 reinterpret_cast<const unsigned char *>(buffer), | ||||||
|  |                 static_cast<std::size_t>(write_size), write_offset, | ||||||
|                 bytes_written)) { |                 bytes_written)) { | ||||||
|           res = 0; |           res = 0; | ||||||
|           errno = 0; |           errno = 0; | ||||||
| @@ -855,7 +859,7 @@ auto remote_server::fuse_utimens(const char *path, const remote::file_time *tv, | |||||||
|       access_time.dwLowDateTime = now & 0xFFFFFFFF; |       access_time.dwLowDateTime = now & 0xFFFFFFFF; | ||||||
|       access_time_ptr = &access_time; |       access_time_ptr = &access_time; | ||||||
|     } else if (op0 != UTIME_OMIT) { |     } else if (op0 != UTIME_OMIT) { | ||||||
|       utils::unix_time_to_filetime(tv[0U], access_time); |       access_time = utils::time::unix_time_to_filetime(tv[0U]); | ||||||
|       access_time_ptr = &access_time; |       access_time_ptr = &access_time; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -865,7 +869,7 @@ auto remote_server::fuse_utimens(const char *path, const remote::file_time *tv, | |||||||
|       write_time.dwLowDateTime = now & 0xFFFFFFFF; |       write_time.dwLowDateTime = now & 0xFFFFFFFF; | ||||||
|       write_time_ptr = &write_time; |       write_time_ptr = &write_time; | ||||||
|     } else if (op1 != UTIME_OMIT) { |     } else if (op1 != UTIME_OMIT) { | ||||||
|       utils::unix_time_to_filetime(tv[1U], write_time); |       write_time = utils::time::unix_time_to_filetime(tv[1U]); | ||||||
|       write_time_ptr = &write_time; |       write_time_ptr = &write_time; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -30,6 +30,7 @@ | |||||||
| #include "platform/platform.hpp" | #include "platform/platform.hpp" | ||||||
| #include "rpc/server/server.hpp" | #include "rpc/server/server.hpp" | ||||||
| #include "utils/collection.hpp" | #include "utils/collection.hpp" | ||||||
|  | #include "utils/common.hpp" | ||||||
| #include "utils/error_utils.hpp" | #include "utils/error_utils.hpp" | ||||||
| #include "utils/file_utils.hpp" | #include "utils/file_utils.hpp" | ||||||
| #include "utils/path.hpp" | #include "utils/path.hpp" | ||||||
| @@ -361,7 +362,7 @@ auto remote_winfsp_drive::ReadDirectory(PVOID /*file_node*/, PVOID file_desc, | |||||||
|           const auto display_name = utils::string::from_utf8( |           const auto display_name = utils::string::from_utf8( | ||||||
|               utils::path::strip_to_file_name(item_path)); |               utils::path::strip_to_file_name(item_path)); | ||||||
|           if (not marker || (marker && item_found)) { |           if (not marker || (marker && item_found)) { | ||||||
|             if (not utils::path::is_ads_file_path(item_path)) { |             // if (not utils::path::is_ads_file_path(item_path)) { | ||||||
|               union { |               union { | ||||||
|                 UINT8 B[FIELD_OFFSET(FSP_FSCTL_DIR_INFO, FileNameBuf) + |                 UINT8 B[FIELD_OFFSET(FSP_FSCTL_DIR_INFO, FileNameBuf) + | ||||||
|                         ((MAX_PATH + 1) * sizeof(WCHAR))]; |                         ((MAX_PATH + 1) * sizeof(WCHAR))]; | ||||||
| @@ -389,7 +390,7 @@ auto remote_winfsp_drive::ReadDirectory(PVOID /*file_node*/, PVOID file_desc, | |||||||
|                   break; |                   break; | ||||||
|                 } |                 } | ||||||
|               } |               } | ||||||
|             } |             // } | ||||||
|           } else { |           } else { | ||||||
|             item_found = display_name == std::wstring(marker); |             item_found = display_name == std::wstring(marker); | ||||||
|           } |           } | ||||||
|   | |||||||
| @@ -33,6 +33,7 @@ | |||||||
| #include "types/repertory.hpp" | #include "types/repertory.hpp" | ||||||
| #include "types/startup_exception.hpp" | #include "types/startup_exception.hpp" | ||||||
| #include "utils/collection.hpp" | #include "utils/collection.hpp" | ||||||
|  | #include "utils/common.hpp" | ||||||
| #include "utils/error_utils.hpp" | #include "utils/error_utils.hpp" | ||||||
| #include "utils/file_utils.hpp" | #include "utils/file_utils.hpp" | ||||||
| #include "utils/polling.hpp" | #include "utils/polling.hpp" | ||||||
| @@ -928,10 +929,10 @@ auto winfsp_drive::ReadDirectory(PVOID /*file_node*/, PVOID file_desc, | |||||||
|                                 api_path, {utils::string::to_utf8(marker)}))); |                                 api_path, {utils::string::to_utf8(marker)}))); | ||||||
|               while ((error = iterator.get_directory_item( |               while ((error = iterator.get_directory_item( | ||||||
|                           offset++, dir_item)) == api_error::success) { |                           offset++, dir_item)) == api_error::success) { | ||||||
|                 if (utils::path::is_ads_file_path(dir_item.api_path) || |                 // if (utils::path::is_ads_file_path(dir_item.api_path) || | ||||||
|                     dir_item.api_path == "." || dir_item.api_path == "..") { |                 //     dir_item.api_path == "." || dir_item.api_path == "..") { | ||||||
|                   continue; |                 //   continue; | ||||||
|                 } |                 // } | ||||||
|  |  | ||||||
|                 if (dir_item.meta.empty()) { |                 if (dir_item.meta.empty()) { | ||||||
|                   utils::error::raise_api_path_error( |                   utils::error::raise_api_path_error( | ||||||
|   | |||||||
| @@ -29,6 +29,7 @@ | |||||||
| #include "providers/i_provider.hpp" | #include "providers/i_provider.hpp" | ||||||
| #include "types/repertory.hpp" | #include "types/repertory.hpp" | ||||||
| #include "types/startup_exception.hpp" | #include "types/startup_exception.hpp" | ||||||
|  | #include "utils/common.hpp" | ||||||
| #include "utils/encrypting_reader.hpp" | #include "utils/encrypting_reader.hpp" | ||||||
| #include "utils/error_utils.hpp" | #include "utils/error_utils.hpp" | ||||||
| #include "utils/file_utils.hpp" | #include "utils/file_utils.hpp" | ||||||
|   | |||||||
| @@ -26,6 +26,7 @@ | |||||||
| #include "providers/i_provider.hpp" | #include "providers/i_provider.hpp" | ||||||
| #include "types/repertory.hpp" | #include "types/repertory.hpp" | ||||||
| #include "types/startup_exception.hpp" | #include "types/startup_exception.hpp" | ||||||
|  | #include "utils/common.hpp" | ||||||
| #include "utils/error_utils.hpp" | #include "utils/error_utils.hpp" | ||||||
| #include "utils/file_utils.hpp" | #include "utils/file_utils.hpp" | ||||||
| #include "utils/path.hpp" | #include "utils/path.hpp" | ||||||
|   | |||||||
| @@ -26,6 +26,7 @@ | |||||||
| #include "platform/platform.hpp" | #include "platform/platform.hpp" | ||||||
| #include "providers/i_provider.hpp" | #include "providers/i_provider.hpp" | ||||||
| #include "types/repertory.hpp" | #include "types/repertory.hpp" | ||||||
|  | #include "utils/common.hpp" | ||||||
| #include "utils/encrypting_reader.hpp" | #include "utils/encrypting_reader.hpp" | ||||||
| #include "utils/file_utils.hpp" | #include "utils/file_utils.hpp" | ||||||
| #include "utils/path.hpp" | #include "utils/path.hpp" | ||||||
|   | |||||||
| @@ -33,6 +33,7 @@ | |||||||
| #include "utils/file_utils.hpp" | #include "utils/file_utils.hpp" | ||||||
| #include "utils/path.hpp" | #include "utils/path.hpp" | ||||||
| #include "utils/polling.hpp" | #include "utils/polling.hpp" | ||||||
|  | #include "utils/time.hpp" | ||||||
|  |  | ||||||
| namespace { | namespace { | ||||||
| const std::string directory_table = "directory"; | const std::string directory_table = "directory"; | ||||||
| @@ -98,20 +99,22 @@ auto encrypt_provider::create_api_file( | |||||||
|   file.modified_date = |   file.modified_date = | ||||||
|       buf.st_mtimespec.tv_nsec + (buf.st_mtimespec.tv_sec * NANOS_PER_SECOND); |       buf.st_mtimespec.tv_nsec + (buf.st_mtimespec.tv_sec * NANOS_PER_SECOND); | ||||||
| #elif defined(_WIN32) | #elif defined(_WIN32) | ||||||
|   FILETIME ft{}; |   auto ft = utils::time::unix_time_to_filetime( | ||||||
|   utils::unix_time_to_filetime(utils::time64_to_unix_time(buf.st_atime), ft); |       utils::time::time64_to_unix_time(buf.st_atime)); | ||||||
|   file.accessed_date = |   file.accessed_date = | ||||||
|       (static_cast<std::uint64_t>(ft.dwHighDateTime) << 32U) | ft.dwLowDateTime; |       (static_cast<std::uint64_t>(ft.dwHighDateTime) << 32U) | ft.dwLowDateTime; | ||||||
|  |  | ||||||
|   utils::unix_time_to_filetime(utils::time64_to_unix_time(buf.st_mtime), ft); |   ft = utils::time::unix_time_to_filetime( | ||||||
|  |       utils::time::time64_to_unix_time(buf.st_mtime)); | ||||||
|   file.changed_date = |   file.changed_date = | ||||||
|       (static_cast<std::uint64_t>(ft.dwHighDateTime) << 32U) | ft.dwLowDateTime; |       (static_cast<std::uint64_t>(ft.dwHighDateTime) << 32U) | ft.dwLowDateTime; | ||||||
|  |  | ||||||
|   utils::unix_time_to_filetime(utils::time64_to_unix_time(buf.st_ctime), ft); |   ft = utils::time::unix_time_to_filetime( | ||||||
|  |       utils::time::time64_to_unix_time(buf.st_ctime)); | ||||||
|   file.creation_date = |   file.creation_date = | ||||||
|       (static_cast<std::uint64_t>(ft.dwHighDateTime) << 32U) | ft.dwLowDateTime; |       (static_cast<std::uint64_t>(ft.dwHighDateTime) << 32U) | ft.dwLowDateTime; | ||||||
|  |  | ||||||
|   utils::unix_time_to_filetime(utils::time64_to_unix_time(buf.st_mtime), ft); |   ft = utils::time::unix_time_to_filetime(utils::time::time64_to_unix_time(buf.st_mtime)); | ||||||
|   file.modified_date = |   file.modified_date = | ||||||
|       (static_cast<std::uint64_t>(ft.dwHighDateTime) << 32U) | ft.dwLowDateTime; |       (static_cast<std::uint64_t>(ft.dwHighDateTime) << 32U) | ft.dwLowDateTime; | ||||||
| #else | #else | ||||||
|   | |||||||
| @@ -31,6 +31,7 @@ | |||||||
| #include "utils/native_file.hpp" | #include "utils/native_file.hpp" | ||||||
| #include "utils/path.hpp" | #include "utils/path.hpp" | ||||||
| #include "utils/string.hpp" | #include "utils/string.hpp" | ||||||
|  | #include "utils/time.hpp" | ||||||
|  |  | ||||||
| namespace repertory::utils { | namespace repertory::utils { | ||||||
| void calculate_allocation_size(bool directory, std::uint64_t file_size, | void calculate_allocation_size(bool directory, std::uint64_t file_size, | ||||||
| @@ -61,7 +62,7 @@ auto convert_api_date(const std::string &date) -> std::uint64_t { | |||||||
|  |  | ||||||
|   struct tm tm1 {}; |   struct tm tm1 {}; | ||||||
| #if defined(_WIN32) | #if defined(_WIN32) | ||||||
|   utils::strptime(date_time.c_str(), "%Y-%m-%dT%T", &tm1); |   utils::time::strptime(date_time.c_str(), "%Y-%m-%dT%T", &tm1); | ||||||
| #else | #else | ||||||
|   strptime(date_time.c_str(), "%Y-%m-%dT%T", &tm1); |   strptime(date_time.c_str(), "%Y-%m-%dT%T", &tm1); | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -176,18 +176,6 @@ auto run_process_elevated(std::vector<const char *> args) -> int { | |||||||
|  |  | ||||||
| void set_last_error_code(DWORD error_code) { ::SetLastError(error_code); } | void set_last_error_code(DWORD error_code) { ::SetLastError(error_code); } | ||||||
|  |  | ||||||
| // https://stackoverflow.com/questions/321849/strptime-equivalent-on-windows |  | ||||||
| auto strptime(const char *s, const char *f, struct tm *tm) -> const char * { |  | ||||||
|   std::istringstream input(s); |  | ||||||
|   input.imbue(std::locale(setlocale(LC_ALL, nullptr))); |  | ||||||
|   input >> std::get_time(tm, f); |  | ||||||
|   if (input.fail()) { |  | ||||||
|     return nullptr; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   return reinterpret_cast<const char *>(s + input.tellg()); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| auto unix_access_mask_to_windows(std::int32_t mask) -> int { | auto unix_access_mask_to_windows(std::int32_t mask) -> int { | ||||||
|   if (mask & 1) { |   if (mask & 1) { | ||||||
|     mask -= 1; |     mask -= 1; | ||||||
|   | |||||||
| @@ -26,6 +26,7 @@ | |||||||
| #include "test_common.hpp" | #include "test_common.hpp" | ||||||
|  |  | ||||||
| #include "drives/winfsp/i_winfsp_drive.hpp" | #include "drives/winfsp/i_winfsp_drive.hpp" | ||||||
|  | #include "utils/common.hpp" | ||||||
| #include "utils/file_utils.hpp" | #include "utils/file_utils.hpp" | ||||||
| #include "utils/path.hpp" | #include "utils/path.hpp" | ||||||
| #include "utils/time.hpp" | #include "utils/time.hpp" | ||||||
|   | |||||||
| @@ -30,6 +30,7 @@ | |||||||
| #include "mocks/mock_upload_manager.hpp" | #include "mocks/mock_upload_manager.hpp" | ||||||
| #include "platform/platform.hpp" | #include "platform/platform.hpp" | ||||||
| #include "types/repertory.hpp" | #include "types/repertory.hpp" | ||||||
|  | #include "utils/common.hpp" | ||||||
| #include "utils/encrypting_reader.hpp" | #include "utils/encrypting_reader.hpp" | ||||||
| #include "utils/event_capture.hpp" | #include "utils/event_capture.hpp" | ||||||
| #include "utils/file_utils.hpp" | #include "utils/file_utils.hpp" | ||||||
|   | |||||||
| @@ -34,6 +34,7 @@ | |||||||
| #endif | #endif | ||||||
| #include "drives/fuse/remotefuse/remote_client.hpp" | #include "drives/fuse/remotefuse/remote_client.hpp" | ||||||
| #include "types/repertory.hpp" | #include "types/repertory.hpp" | ||||||
|  | #include "utils/common.hpp" | ||||||
| #include "utils/time.hpp" | #include "utils/time.hpp" | ||||||
| #include "utils/utils.hpp" | #include "utils/utils.hpp" | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user