This commit is contained in:
		| @@ -24,14 +24,14 @@ | ||||
|  | ||||
| #include "types/repertory.hpp" | ||||
| #include "utils/string.hpp" | ||||
| #include "utils/time.hpp" | ||||
| #include "utils/utils.hpp" | ||||
|  | ||||
| namespace repertory { | ||||
| namespace utils::aws { | ||||
| #if defined(_WIN32) | ||||
| [[nodiscard]] inline auto format_time(std::uint64_t t) -> std::uint64_t { | ||||
|   FILETIME ft{}; | ||||
|   utils::unix_time_to_filetime(t, ft); | ||||
|   auto ft = utils::time::unix_time_to_filetime(t); | ||||
|   return static_cast<std::uint64_t>(ft.dwHighDateTime) << 32u | | ||||
|          ft.dwLowDateTime; | ||||
| } | ||||
| @@ -75,7 +75,7 @@ struct head_object_result { | ||||
|       struct tm tm1 {}; | ||||
|       // Mon, 17 Dec 2012 02:14:10 GMT | ||||
| #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 | ||||
|       strptime(date.c_str(), "%a, %d %b %Y %H:%M:%S %Z", &tm1); | ||||
| #endif | ||||
|   | ||||
| @@ -23,6 +23,7 @@ | ||||
|  | ||||
| #include "platform/platform.hpp" | ||||
| #include "types/startup_exception.hpp" | ||||
| #include "utils/common.hpp" | ||||
| #include "utils/error_utils.hpp" | ||||
| #include "utils/file_utils.hpp" | ||||
| #include "utils/path.hpp" | ||||
|   | ||||
| @@ -24,6 +24,7 @@ | ||||
| #include "platform/platform.hpp" | ||||
| #include "types/remote.hpp" | ||||
| #include "types/repertory.hpp" | ||||
| #include "utils/common.hpp" | ||||
| #include "utils/encryption.hpp" | ||||
| #include "utils/error_utils.hpp" | ||||
| #include "utils/string.hpp" | ||||
|   | ||||
| @@ -39,6 +39,7 @@ | ||||
| #include "types/startup_exception.hpp" | ||||
| #include "utils/base64.hpp" | ||||
| #include "utils/collection.hpp" | ||||
| #include "utils/common.hpp" | ||||
| #include "utils/error_utils.hpp" | ||||
| #include "utils/polling.hpp" | ||||
| #include "utils/time.hpp" | ||||
|   | ||||
| @@ -32,6 +32,7 @@ | ||||
| #include "platform/platform.hpp" | ||||
| #include "rpc/server/server.hpp" | ||||
| #include "types/remote.hpp" | ||||
| #include "utils/common.hpp" | ||||
| #include "utils/error_utils.hpp" | ||||
| #include "utils/file_utils.hpp" | ||||
| #include "utils/path.hpp" | ||||
|   | ||||
| @@ -31,6 +31,7 @@ | ||||
| #include "platform/platform.hpp" | ||||
| #include "types/remote.hpp" | ||||
| #include "types/repertory.hpp" | ||||
| #include "utils/common.hpp" | ||||
| #include "utils/error_utils.hpp" | ||||
| #include "utils/file.hpp" | ||||
| #include "utils/path.hpp" | ||||
|   | ||||
| @@ -34,10 +34,13 @@ | ||||
| #include "drives/winfsp/remotewinfsp/i_remote_instance.hpp" | ||||
| #include "events/event_system.hpp" | ||||
| #include "events/events.hpp" | ||||
| #include "platform/platform.hpp" | ||||
| #include "types/remote.hpp" | ||||
| #include "types/repertory.hpp" | ||||
| #include "utils/common.hpp" | ||||
| #include "utils/file_utils.hpp" | ||||
| #include "utils/path.hpp" | ||||
| #include "utils/time.hpp" | ||||
|  | ||||
| #if !defined(_SH_DENYNO) | ||||
| #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( | ||||
|                           utils::path::create_api_path(path)) | ||||
|                 : 1); | ||||
|   r_stat.st_atimespec = utils::time64_to_unix_time(unix_st.st_atime); | ||||
|   r_stat.st_birthtimespec = utils::time64_to_unix_time(unix_st.st_ctime); | ||||
|   r_stat.st_ctimespec = utils::time64_to_unix_time(unix_st.st_ctime); | ||||
|   r_stat.st_mtimespec = utils::time64_to_unix_time(unix_st.st_mtime); | ||||
|   r_stat.st_atimespec = utils::time::time64_to_unix_time(unix_st.st_atime); | ||||
|   r_stat.st_birthtimespec = utils::time::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::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_mode = unix_st.st_mode; | ||||
| } | ||||
| @@ -544,7 +547,8 @@ auto remote_server::fuse_write( | ||||
|         errno = EFAULT; | ||||
|         if ((write_size == 0) || | ||||
|             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)) { | ||||
|           res = 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_ptr = &access_time; | ||||
|     } 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; | ||||
|     } | ||||
|  | ||||
| @@ -865,7 +869,7 @@ auto remote_server::fuse_utimens(const char *path, const remote::file_time *tv, | ||||
|       write_time.dwLowDateTime = now & 0xFFFFFFFF; | ||||
|       write_time_ptr = &write_time; | ||||
|     } 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; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -30,6 +30,7 @@ | ||||
| #include "platform/platform.hpp" | ||||
| #include "rpc/server/server.hpp" | ||||
| #include "utils/collection.hpp" | ||||
| #include "utils/common.hpp" | ||||
| #include "utils/error_utils.hpp" | ||||
| #include "utils/file_utils.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( | ||||
|               utils::path::strip_to_file_name(item_path)); | ||||
|           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 { | ||||
|                 UINT8 B[FIELD_OFFSET(FSP_FSCTL_DIR_INFO, FileNameBuf) + | ||||
|                         ((MAX_PATH + 1) * sizeof(WCHAR))]; | ||||
| @@ -389,7 +390,7 @@ auto remote_winfsp_drive::ReadDirectory(PVOID /*file_node*/, PVOID file_desc, | ||||
|                   break; | ||||
|                 } | ||||
|               } | ||||
|             } | ||||
|             // } | ||||
|           } else { | ||||
|             item_found = display_name == std::wstring(marker); | ||||
|           } | ||||
|   | ||||
| @@ -33,6 +33,7 @@ | ||||
| #include "types/repertory.hpp" | ||||
| #include "types/startup_exception.hpp" | ||||
| #include "utils/collection.hpp" | ||||
| #include "utils/common.hpp" | ||||
| #include "utils/error_utils.hpp" | ||||
| #include "utils/file_utils.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)}))); | ||||
|               while ((error = iterator.get_directory_item( | ||||
|                           offset++, dir_item)) == api_error::success) { | ||||
|                 if (utils::path::is_ads_file_path(dir_item.api_path) || | ||||
|                     dir_item.api_path == "." || dir_item.api_path == "..") { | ||||
|                   continue; | ||||
|                 } | ||||
|                 // if (utils::path::is_ads_file_path(dir_item.api_path) || | ||||
|                 //     dir_item.api_path == "." || dir_item.api_path == "..") { | ||||
|                 //   continue; | ||||
|                 // } | ||||
|  | ||||
|                 if (dir_item.meta.empty()) { | ||||
|                   utils::error::raise_api_path_error( | ||||
|   | ||||
| @@ -29,6 +29,7 @@ | ||||
| #include "providers/i_provider.hpp" | ||||
| #include "types/repertory.hpp" | ||||
| #include "types/startup_exception.hpp" | ||||
| #include "utils/common.hpp" | ||||
| #include "utils/encrypting_reader.hpp" | ||||
| #include "utils/error_utils.hpp" | ||||
| #include "utils/file_utils.hpp" | ||||
|   | ||||
| @@ -26,6 +26,7 @@ | ||||
| #include "providers/i_provider.hpp" | ||||
| #include "types/repertory.hpp" | ||||
| #include "types/startup_exception.hpp" | ||||
| #include "utils/common.hpp" | ||||
| #include "utils/error_utils.hpp" | ||||
| #include "utils/file_utils.hpp" | ||||
| #include "utils/path.hpp" | ||||
|   | ||||
| @@ -26,6 +26,7 @@ | ||||
| #include "platform/platform.hpp" | ||||
| #include "providers/i_provider.hpp" | ||||
| #include "types/repertory.hpp" | ||||
| #include "utils/common.hpp" | ||||
| #include "utils/encrypting_reader.hpp" | ||||
| #include "utils/file_utils.hpp" | ||||
| #include "utils/path.hpp" | ||||
|   | ||||
| @@ -33,6 +33,7 @@ | ||||
| #include "utils/file_utils.hpp" | ||||
| #include "utils/path.hpp" | ||||
| #include "utils/polling.hpp" | ||||
| #include "utils/time.hpp" | ||||
|  | ||||
| namespace { | ||||
| const std::string directory_table = "directory"; | ||||
| @@ -98,20 +99,22 @@ auto encrypt_provider::create_api_file( | ||||
|   file.modified_date = | ||||
|       buf.st_mtimespec.tv_nsec + (buf.st_mtimespec.tv_sec * NANOS_PER_SECOND); | ||||
| #elif defined(_WIN32) | ||||
|   FILETIME ft{}; | ||||
|   utils::unix_time_to_filetime(utils::time64_to_unix_time(buf.st_atime), ft); | ||||
|   auto ft = utils::time::unix_time_to_filetime( | ||||
|       utils::time::time64_to_unix_time(buf.st_atime)); | ||||
|   file.accessed_date = | ||||
|       (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 = | ||||
|       (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 = | ||||
|       (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 = | ||||
|       (static_cast<std::uint64_t>(ft.dwHighDateTime) << 32U) | ft.dwLowDateTime; | ||||
| #else | ||||
|   | ||||
| @@ -31,6 +31,7 @@ | ||||
| #include "utils/native_file.hpp" | ||||
| #include "utils/path.hpp" | ||||
| #include "utils/string.hpp" | ||||
| #include "utils/time.hpp" | ||||
|  | ||||
| namespace repertory::utils { | ||||
| 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 {}; | ||||
| #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 | ||||
|   strptime(date_time.c_str(), "%Y-%m-%dT%T", &tm1); | ||||
| #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); } | ||||
|  | ||||
| // 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 { | ||||
|   if (mask & 1) { | ||||
|     mask -= 1; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user