diff --git a/dist/addon.node b/dist/addon.node index 46f3112..4645467 100644 Binary files a/dist/addon.node and b/dist/addon.node differ diff --git a/native-src/main.cpp b/native-src/main.cpp index f4feb67..06e038a 100644 --- a/native-src/main.cpp +++ b/native-src/main.cpp @@ -1,3 +1,4 @@ +#include #include #include "Wrappers.h" @@ -17,11 +18,9 @@ napi_value init(napi_env env, napi_value exports) {"hydrateFile", nullptr, HydrateFileWrapper, nullptr, nullptr, nullptr, napi_default, nullptr}, {"dehydrateFile", nullptr, DehydrateFileWrapper, nullptr, nullptr, nullptr, napi_default, nullptr}}; - size_t property_count = sizeof(properties) / sizeof(properties[0]); - - napi_define_properties(env, exports, property_count, properties); + napi_define_properties(env, exports, std::size(properties), properties); return exports; } -NAPI_MODULE(NODE_GYP_MODULE_NAME, init) \ No newline at end of file +NAPI_MODULE(NODE_GYP_MODULE_NAME, init) diff --git a/native-src/placeholders_interface/Planceholders.cpp b/native-src/placeholders_interface/Planceholders.cpp index 0514a97..1bcb269 100644 --- a/native-src/placeholders_interface/Planceholders.cpp +++ b/native-src/placeholders_interface/Planceholders.cpp @@ -1,5 +1,5 @@ -#include "stdafx.h" -#include "Placeholders.h" +#include +#include #include #include #include @@ -13,11 +13,9 @@ #include #include #include -#include "convert_to_placeholder.h" +#include #include -#pragma comment(lib, "shlwapi.lib") - winrt::file_handle Placeholders::OpenFileHandle(const std::wstring &path, DWORD dwDesiredAccess, bool openAsPlaceholder) { bool isDirectory = std::filesystem::is_directory(path); diff --git a/native-src/sync_root_interface/callbacks/CancelFetchData/CancelFetchDataCallback.cpp b/native-src/sync_root_interface/callbacks/CancelFetchData/CancelFetchDataCallback.cpp index c957366..6b321c4 100644 --- a/native-src/sync_root_interface/callbacks/CancelFetchData/CancelFetchDataCallback.cpp +++ b/native-src/sync_root_interface/callbacks/CancelFetchData/CancelFetchDataCallback.cpp @@ -61,13 +61,13 @@ void register_threadsafe_cancel_fetch_data_callback(const std::string &resource_ napi_create_threadsafe_function( env, cancel_fetch_data_value, - NULL, + nullptr, resource_name_value, 0, 1, - NULL, - NULL, - NULL, + nullptr, + nullptr, + nullptr, notify_cancel_fetch_data_call, &tsfn_cancel_fetch_data); diff --git a/native-src/sync_root_interface/callbacks/FetchData/FetchData.cpp b/native-src/sync_root_interface/callbacks/FetchData/FetchData.cpp index 132a0ca..7e58ce2 100644 --- a/native-src/sync_root_interface/callbacks/FetchData/FetchData.cpp +++ b/native-src/sync_root_interface/callbacks/FetchData/FetchData.cpp @@ -22,12 +22,12 @@ #include #include -napi_threadsafe_function g_fetch_data_threadsafe_callback = nullptr; - #define FIELD_SIZE(type, field) (sizeof(((type *)nullptr)->field)) #define CF_SIZE_OF_OP_PARAM(field) (FIELD_OFFSET(CF_OPERATION_PARAMETERS, field) + FIELD_SIZE(CF_OPERATION_PARAMETERS, field)) +napi_threadsafe_function g_fetch_data_threadsafe_callback = nullptr; + HRESULT transfer_data( _In_ CF_CONNECTION_KEY connectionKey, _In_ LARGE_INTEGER transferKey, @@ -177,10 +177,8 @@ void CALLBACK fetch_data_callback_wrapper(_In_ CONST CF_CALLBACK_INFO *callbackI { std::unique_lock lock(ctx->mtx); - while (!ctx->ready) - { - ctx->cv.wait(lock); - } + ctx->cv.wait(lock, [&ctx]() + { return ctx->ready; }); } wprintf(L"Remove transfer context\n"); diff --git a/native-src/sync_root_interface/callbacks/FetchData/TransferContext.cpp b/native-src/sync_root_interface/callbacks/FetchData/TransferContext.cpp index 9ac5c16..f289a62 100644 --- a/native-src/sync_root_interface/callbacks/FetchData/TransferContext.cpp +++ b/native-src/sync_root_interface/callbacks/FetchData/TransferContext.cpp @@ -8,9 +8,8 @@ struct CfTransferKeyLess } }; -static std::map, CfTransferKeyLess> g_transferContextMap; - -static std::mutex g_contextMapMutex; +std::map, CfTransferKeyLess> g_transferContextMap; +std::mutex g_contextMapMutex; std::shared_ptr CreateTransferContext(CF_TRANSFER_KEY transferKey) { diff --git a/native-src/virtual_drive/create_file_placeholder.cpp b/native-src/virtual_drive/create_file_placeholder.cpp index 81b2958..cd8bf0e 100644 --- a/native-src/virtual_drive/create_file_placeholder.cpp +++ b/native-src/virtual_drive/create_file_placeholder.cpp @@ -36,7 +36,7 @@ napi_value create_file_placeholder_impl(napi_env env, napi_callback_info info) check_hresult( "CfCreatePlaceholders", - CfCreatePlaceholders(parentPath.c_str(), &cloudEntry, 1, CF_CREATE_FLAG_NONE, NULL)); + CfCreatePlaceholders(parentPath.c_str(), &cloudEntry, 1, CF_CREATE_FLAG_NONE, nullptr)); return nullptr; } \ No newline at end of file diff --git a/native-src/virtual_drive/create_folder_placeholder.cpp b/native-src/virtual_drive/create_folder_placeholder.cpp index 51c9eeb..bab2b4c 100644 --- a/native-src/virtual_drive/create_folder_placeholder.cpp +++ b/native-src/virtual_drive/create_folder_placeholder.cpp @@ -34,7 +34,7 @@ napi_value create_folder_placeholder_impl(napi_env env, napi_callback_info info) check_hresult( "CfCreatePlaceholders", - CfCreatePlaceholders(parentPath.c_str(), &cloudEntry, 1, CF_CREATE_FLAG_NONE, NULL)); + CfCreatePlaceholders(parentPath.c_str(), &cloudEntry, 1, CF_CREATE_FLAG_NONE, nullptr)); Placeholders::UpdateSyncStatus(path); diff --git a/native-src/virtual_drive/dehydrate_file.cpp b/native-src/virtual_drive/dehydrate_file.cpp index c821307..46dbf90 100644 --- a/native-src/virtual_drive/dehydrate_file.cpp +++ b/native-src/virtual_drive/dehydrate_file.cpp @@ -1,16 +1,15 @@ #include -#include "napi_extract_args.h" -#include "stdafx.h" -#include "Placeholders.h" +#include +#include +#include #include +#include napi_value dehydrate_file(napi_env env, napi_callback_info info) { auto [path] = napi_extract_args(env, info); - DWORD attrib = GetFileAttributesW(path.c_str()); - - if (attrib & FILE_ATTRIBUTE_DIRECTORY) + if (std::filesystem::is_directory(path)) { throw std::runtime_error("Cannot dehydrate folder"); } diff --git a/native-src/virtual_drive/hydrate_file.cpp b/native-src/virtual_drive/hydrate_file.cpp index e76f2fb..c9e5f81 100644 --- a/native-src/virtual_drive/hydrate_file.cpp +++ b/native-src/virtual_drive/hydrate_file.cpp @@ -4,6 +4,7 @@ #include #include #include +#include struct AsyncWork { @@ -16,9 +17,7 @@ struct AsyncWork void hydrate_file(const std::wstring &path) { - DWORD attrib = GetFileAttributesW(path.c_str()); - - if (attrib & FILE_ATTRIBUTE_DIRECTORY) + if (std::filesystem::is_directory(path)) { throw std::runtime_error("Cannot hydrate folder"); } @@ -63,7 +62,7 @@ void execute_work(napi_env env, void *data) void complete_work(napi_env env, napi_status status, void *data) { - AsyncWork *asyncWork = static_cast(data); + std::unique_ptr asyncWork(static_cast(data)); if (asyncWork->success) { @@ -79,7 +78,6 @@ void complete_work(napi_env env, napi_status status, void *data) } napi_delete_async_work(env, asyncWork->work); - delete asyncWork; } napi_value hydrate_file_impl(napi_env env, napi_callback_info info) @@ -90,15 +88,17 @@ napi_value hydrate_file_impl(napi_env env, napi_callback_info info) napi_value promise; napi_create_promise(env, &deferred, &promise); - AsyncWork *asyncWork = new AsyncWork{}; + auto asyncWork = std::make_unique(); asyncWork->deferred = deferred; asyncWork->path = std::move(path); napi_value resourceName; napi_create_string_utf8(env, "HydrateFileAsync", NAPI_AUTO_LENGTH, &resourceName); - napi_create_async_work(env, nullptr, resourceName, execute_work, complete_work, asyncWork, &asyncWork->work); + napi_create_async_work(env, nullptr, resourceName, execute_work, complete_work, asyncWork.get(), &asyncWork->work); napi_queue_async_work(env, asyncWork->work); + asyncWork.release(); + return promise; }