From 1fa2abf3623f5a6332de634a6d67746ef1c883a3 Mon Sep 17 00:00:00 2001 From: gwx1278443 Date: Sat, 16 Sep 2023 16:00:40 +0800 Subject: [PATCH 1/5] update_sharemonmery Signed-off-by: gwx1278443 --- .../file_info/napi_file_iterator_exporter.cpp | 2 +- .../file_access/src/file_access_ext_stub.cpp | 42 ++++++++++++++----- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp b/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp index 935f828e..3e239ec8 100644 --- a/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp +++ b/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp @@ -87,7 +87,7 @@ static int MakeResult(napi_value &objFileInfoExporter, FileIteratorEntity *fileI return ERR_OK; } - if (fileIteratorEntity->pos == MAX_COUNT) { + if (fileIteratorEntity->pos == MAX_COUNT || fileIteratorEntity->pos == 0) { fileIteratorEntity->fileInfoVec.clear(); fileIteratorEntity->offset += MAX_COUNT; fileIteratorEntity->pos = 0; diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp index 22988fbd..95b3408c 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp @@ -368,8 +368,7 @@ ErrCode FileAccessExtStub::CmdRename(MessageParcel &data, MessageParcel &reply) return ERR_OK; } -ErrCode FileAccessExtStub::CmdListFile(MessageParcel &data, MessageParcel &reply) -{ +ErrCode FileAccessExtStub::CmdListFile(MessageParcel &data, MessageParcel &reply) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CmdListFile"); std::shared_ptr fileInfo(data.ReadParcelable()); if (fileInfo == nullptr) { @@ -401,31 +400,54 @@ ErrCode FileAccessExtStub::CmdListFile(MessageParcel &data, MessageParcel &reply std::vector fileInfoVec; int ret = ListFile(*fileInfo, offset, maxCount, *filter, fileInfoVec); - if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter ListFile fail to WriteInt32 ret"); - FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return E_IPCS; + + // 计算实际要写入reply的文件数 + size_t actualCount = fileInfoVec.size(); + if (actualCount > static_cast(maxCount)) { + actualCount = static_cast(maxCount); } - int64_t count {fileInfoVec.size()}; - if (!reply.WriteInt64(count)) { + // 记录count的位置 + size_t countPosition = reply.GetWritePosition(); + + // 写入一个占位符,稍后用实际的文件数替换 + if (!reply.WriteInt64(0)) { HILOG_ERROR("Parameter ListFile fail to WriteInt64 count"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } - for (const auto &fileInfo : fileInfoVec) { - if (!reply.WriteParcelable(&fileInfo)) { + // 记录写入FileInfo之前的位置 + size_t fileInfoStartPosition = reply.GetWritePosition(); + + // 写入FileInfo + for (size_t i = 0; i < actualCount; ++i) { + if (!reply.WriteParcelable(&fileInfoVec[i])) { HILOG_ERROR("parameter ListFile fail to WriteParcelable fileInfoVec"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } } + // 记录写入FileInfo之后的位置 + size_t fileInfoEndPosition = reply.GetWritePosition(); + + // 回到count的位置,写入实际的文件数 + reply.RewindWrite(countPosition); + if (!reply.WriteInt64(static_cast(actualCount))) { + HILOG_ERROR("Parameter ListFile fail to WriteInt64 count"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; + } + + // 移回到FileInfo之后的位置 + reply.SeekTo(fileInfoEndPosition); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ERR_OK; } + ErrCode FileAccessExtStub::CmdScanFile(MessageParcel &data, MessageParcel &reply) { StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CmdScanFile"); -- Gitee From 85b69ffb7a97abc214f9327f86fb7452cc01cc8d Mon Sep 17 00:00:00 2001 From: gwx1278443 Date: Sat, 16 Sep 2023 16:52:22 +0800 Subject: [PATCH 2/5] update_sharemonmery Signed-off-by: gwx1278443 --- interfaces/inner_api/file_access/src/file_access_ext_stub.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp index 95b3408c..5e8e2dc6 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp @@ -439,10 +439,6 @@ ErrCode FileAccessExtStub::CmdListFile(MessageParcel &data, MessageParcel &reply FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } - - // 移回到FileInfo之后的位置 - reply.SeekTo(fileInfoEndPosition); - FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ERR_OK; } -- Gitee From e3ac0614ed3987b6291fda1706046223264b81a8 Mon Sep 17 00:00:00 2001 From: gwx1278443 Date: Mon, 18 Sep 2023 08:43:33 +0800 Subject: [PATCH 3/5] update Signed-off-by: gwx1278443 --- .../file_info/napi_file_iterator_exporter.cpp | 30 ++++++------- .../file_access/src/file_access_ext_stub.cpp | 42 ++++++------------- 2 files changed, 26 insertions(+), 46 deletions(-) diff --git a/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp b/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp index 3e239ec8..4171a933 100644 --- a/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp +++ b/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp @@ -72,11 +72,18 @@ napi_value NapiFileIteratorExporter::Constructor(napi_env env, napi_callback_inf return funcArg.GetThisVar(); } -static int MakeResult(napi_value &objFileInfoExporter, FileIteratorEntity *fileIteratorEntity, - FileInfoEntity *fileInfoEntity, napi_env env, NVal &nVal) -{ - std::lock_guard lock(fileIteratorEntity->entityOperateMutex); - if (fileIteratorEntity->fileInfoVec.size() == 0) { + std::lock_guard lock(fileIteratorEntity->entityOperateMutex); + if (fileIteratorEntity->fileInfoVec.empty()) { + fileIteratorEntity->offset = 0; + fileIteratorEntity->pos = 0; + fileInfoEntity = nullptr;//没有可用的文件信息 + objFileInfoExporter = NVal::CreateUndefined(env).val_;//没有可导出的文件信息 + nVal.AddProp("value", objFileInfoExporter); + nVal.AddProp("done", NVal::CreateBool(env, true).val_); + return ERR_OK; + } + + if (fileIteratorEntity->pos == fileIteratorEntity->fileInfoVec.size()) { fileIteratorEntity->fileInfoVec.clear(); fileIteratorEntity->offset = 0; fileIteratorEntity->pos = 0; @@ -108,20 +115,9 @@ static int MakeResult(napi_value &objFileInfoExporter, FileIteratorEntity *fileI } } - if (fileIteratorEntity->pos == fileIteratorEntity->fileInfoVec.size()) { - fileIteratorEntity->fileInfoVec.clear(); - fileIteratorEntity->offset = 0; - fileIteratorEntity->pos = 0; - fileInfoEntity = nullptr; - objFileInfoExporter = NVal::CreateUndefined(env).val_; - nVal.AddProp("value", objFileInfoExporter); - nVal.AddProp("done", NVal::CreateBool(env, true).val_); - return ERR_OK; - } fileInfoEntity->fileAccessHelper = fileIteratorEntity->fileAccessHelper; - fileInfoEntity->fileInfo = fileIteratorEntity->fileInfoVec[fileIteratorEntity->pos]; - fileIteratorEntity->pos++; + fileInfoEntity->fileInfo = fileIteratorEntity->fileInfoVec[fileIteratorEntity->pos++]; nVal.AddProp("value", objFileInfoExporter); nVal.AddProp("done", NVal::CreateBool(env, false).val_); return ERR_OK; diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp index 5e8e2dc6..26d339bf 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_stub.cpp @@ -368,7 +368,8 @@ ErrCode FileAccessExtStub::CmdRename(MessageParcel &data, MessageParcel &reply) return ERR_OK; } -ErrCode FileAccessExtStub::CmdListFile(MessageParcel &data, MessageParcel &reply) { +ErrCode FileAccessExtStub::CmdListFile(MessageParcel &data, MessageParcel &reply) +{ StartTrace(HITRACE_TAG_FILEMANAGEMENT, "CmdListFile"); std::shared_ptr fileInfo(data.ReadParcelable()); if (fileInfo == nullptr) { @@ -400,45 +401,28 @@ ErrCode FileAccessExtStub::CmdListFile(MessageParcel &data, MessageParcel &reply std::vector fileInfoVec; int ret = ListFile(*fileInfo, offset, maxCount, *filter, fileInfoVec); - - // 计算实际要写入reply的文件数 - size_t actualCount = fileInfoVec.size(); - if (actualCount > static_cast(maxCount)) { - actualCount = static_cast(maxCount); + size_t actualCount = fileInfoVec.size();//获取实际文件数量 + if (!reply.WriteInt32(ret)) { + HILOG_ERROR("Parameter ListFile fail to WriteInt32 ret"); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_IPCS; } - - // 记录count的位置 - size_t countPosition = reply.GetWritePosition(); - - // 写入一个占位符,稍后用实际的文件数替换 - if (!reply.WriteInt64(0)) { - HILOG_ERROR("Parameter ListFile fail to WriteInt64 count"); + size_t countPosition = reply.GetWritePosition(); // 获取 count 的位置 + reply.RewindWrite(countPosition); // 回到 count 的位置 + if (!reply.WriteInt64(actualCount)) { // 写入实际文件数量 + HILOG_ERROR("Parameter ListFile fail to WriteInt64 actualCount"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } - // 记录写入FileInfo之前的位置 - size_t fileInfoStartPosition = reply.GetWritePosition(); - - // 写入FileInfo - for (size_t i = 0; i < actualCount; ++i) { - if (!reply.WriteParcelable(&fileInfoVec[i])) { + for (const auto &fileInfo : fileInfoVec) { + if (!reply.WriteParcelable(&fileInfo)) { HILOG_ERROR("parameter ListFile fail to WriteParcelable fileInfoVec"); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return E_IPCS; } } - // 记录写入FileInfo之后的位置 - size_t fileInfoEndPosition = reply.GetWritePosition(); - - // 回到count的位置,写入实际的文件数 - reply.RewindWrite(countPosition); - if (!reply.WriteInt64(static_cast(actualCount))) { - HILOG_ERROR("Parameter ListFile fail to WriteInt64 count"); - FinishTrace(HITRACE_TAG_FILEMANAGEMENT); - return E_IPCS; - } FinishTrace(HITRACE_TAG_FILEMANAGEMENT); return ERR_OK; } -- Gitee From 6e49c744af67ece94596e7079ec645959347d154 Mon Sep 17 00:00:00 2001 From: gwx1278443 Date: Mon, 18 Sep 2023 09:25:24 +0800 Subject: [PATCH 4/5] update2 Signed-off-by: gwx1278443 --- .../file_info/napi_file_iterator_exporter.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp b/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp index 4171a933..e24dcc6c 100644 --- a/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp +++ b/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp @@ -72,7 +72,10 @@ napi_value NapiFileIteratorExporter::Constructor(napi_env env, napi_callback_inf return funcArg.GetThisVar(); } - std::lock_guard lock(fileIteratorEntity->entityOperateMutex); +static int MakeResult(napi_value &objFileInfoExporter, FileIteratorEntity *fileIteratorEntity, + FileInfoEntity *fileInfoEntity, napi_env env, NVal &nVal) +{ + std::lock_guard lock(fileIteratorEntity->entityOperateMutex); if (fileIteratorEntity->fileInfoVec.empty()) { fileIteratorEntity->offset = 0; fileIteratorEntity->pos = 0; @@ -98,6 +101,7 @@ napi_value NapiFileIteratorExporter::Constructor(napi_env env, napi_callback_inf fileIteratorEntity->fileInfoVec.clear(); fileIteratorEntity->offset += MAX_COUNT; fileIteratorEntity->pos = 0; + int ret = ERR_OK; if (fileIteratorEntity->flag == 0) { int ret = fileIteratorEntity->fileAccessHelper->ListFile(fileIteratorEntity->fileInfo, fileIteratorEntity->offset, MAX_COUNT, fileIteratorEntity->filter, fileIteratorEntity->fileInfoVec); -- Gitee From 9c1921dc219142be5c436ae9c0acbb990a40f72e Mon Sep 17 00:00:00 2001 From: gwx1278443 Date: Mon, 18 Sep 2023 10:05:07 +0800 Subject: [PATCH 5/5] update2 Signed-off-by: gwx1278443 --- .../file_access_module/file_info/napi_file_iterator_exporter.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp b/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp index e24dcc6c..e1bece10 100644 --- a/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp +++ b/frameworks/js/napi/file_access_module/file_info/napi_file_iterator_exporter.cpp @@ -101,7 +101,6 @@ static int MakeResult(napi_value &objFileInfoExporter, FileIteratorEntity *fileI fileIteratorEntity->fileInfoVec.clear(); fileIteratorEntity->offset += MAX_COUNT; fileIteratorEntity->pos = 0; - int ret = ERR_OK; if (fileIteratorEntity->flag == 0) { int ret = fileIteratorEntity->fileAccessHelper->ListFile(fileIteratorEntity->fileInfo, fileIteratorEntity->offset, MAX_COUNT, fileIteratorEntity->filter, fileIteratorEntity->fileInfoVec); -- Gitee