diff --git a/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h b/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h index 09f417558a8ff11e739e6993ef56fc0265a7db18..e31d8ada0c1bedbbf1260eec0f8ba79c6805f831 100644 --- a/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h +++ b/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h @@ -22,7 +22,7 @@ #include "file_access_helper.h" #include "hilog_wrapper.h" #include "file_filter.h" -#include "file_info_shared_memory.h" +#include "shared_memory.h" namespace OHOS { namespace FileAccessFwk { @@ -32,16 +32,15 @@ constexpr int CALL_LISTFILE = 0; constexpr int CALL_SCANFILE = 1; struct FileIteratorEntity { - ~FileIteratorEntity() { + ~FileIteratorEntity() + { SharedMemoryOperation::DestroySharedMemory(memInfo); } FileAccessHelper *fileAccessHelper { nullptr }; std::mutex entityOperateMutex; FileInfo fileInfo; - std::vector fileInfoVec; SharedMemoryInfo memInfo; int64_t offset { 0 }; - uint64_t pos { 0 }; uint32_t currentDataCounts { 0 }; FileFilter filter { {}, {}, {}, FileFilter::INVALID_SIZE, FileFilter::INVALID_MODIFY_AFTER, false, false }; int flag { CALL_LISTFILE }; diff --git a/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp b/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp index c95ceeebb5825d85a0f800cde43d98e7955017fa..8c2c46b6fc4789d0e61a1469371a3ba65e1294fc 100644 --- a/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp +++ b/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp @@ -99,16 +99,13 @@ napi_value NapiFileInfoExporter::ListFile(napi_env env, napi_callback_info info) } } auto fileInfoEntity = NClass::GetEntityOf(env, funcArg.GetThisVar()); - if (fileInfoEntity == nullptr) { + if (fileInfoEntity == nullptr || fileInfoEntity->fileAccessHelper == nullptr) { return ThrowError(env, E_GETRESULT); } if (IsDirectory(fileInfoEntity->fileInfo.mode) != ERR_OK) { HILOG_ERROR("current FileInfo's mode error"); return NVal::CreateUndefined(env).val_; } - if (fileInfoEntity->fileAccessHelper == nullptr) { - return ThrowError(env, E_GETRESULT); - } auto objFileIteratorExporter = NClass::InstantiateClass(env, NapiFileIteratorExporter::className_, {}); if (objFileIteratorExporter == nullptr) { return ThrowError(env, E_GETRESULT); @@ -122,10 +119,8 @@ napi_value NapiFileInfoExporter::ListFile(napi_env env, napi_callback_info info) int ret = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfoList", DEFAULT_CAPACITY_200KB, fileIteratorEntity->memInfo); if (ret != ERR_OK) { - NError(ret).ThrowErr(env); - return nullptr; + return ThrowError(env, ret); } - fileIteratorEntity->fileAccessHelper = fileInfoEntity->fileAccessHelper; fileIteratorEntity->fileInfo = fileInfoEntity->fileInfo; fileIteratorEntity->offset = 0; @@ -156,16 +151,13 @@ napi_value NapiFileInfoExporter::ScanFile(napi_env env, napi_callback_info info) } } auto fileInfoEntity = NClass::GetEntityOf(env, funcArg.GetThisVar()); - if (fileInfoEntity == nullptr) { + if (fileInfoEntity == nullptr || fileInfoEntity->fileAccessHelper == nullptr) { return ThrowError(env, E_GETRESULT); } if (IsDirectory(fileInfoEntity->fileInfo.mode) != ERR_OK) { HILOG_ERROR("current FileInfo's mode error"); return NVal::CreateUndefined(env).val_; } - if (fileInfoEntity->fileAccessHelper == nullptr) { - return ThrowError(env, E_GETRESULT); - } auto objFileIteratorExporter = NClass::InstantiateClass(env, NapiFileIteratorExporter::className_, {}); if (objFileIteratorExporter == nullptr) { return ThrowError(env, E_GETRESULT); @@ -176,15 +168,20 @@ napi_value NapiFileInfoExporter::ScanFile(napi_env env, napi_callback_info info) } { std::lock_guard lock(fileIteratorEntity->entityOperateMutex); + int ret = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfoList", DEFAULT_CAPACITY_200KB, + fileIteratorEntity->memInfo); + if (ret != ERR_OK) { + return ThrowError(env, ret); + } fileIteratorEntity->fileAccessHelper = fileInfoEntity->fileAccessHelper; fileIteratorEntity->fileInfo = fileInfoEntity->fileInfo; - fileIteratorEntity->fileInfoVec.clear(); fileIteratorEntity->offset = 0; fileIteratorEntity->filter = std::move(filter); fileIteratorEntity->flag = CALL_SCANFILE; - auto ret = fileInfoEntity->fileAccessHelper->ScanFile(fileInfoEntity->fileInfo, fileIteratorEntity->offset, - MAX_COUNT, fileIteratorEntity->filter, fileIteratorEntity->fileInfoVec); + ret = fileInfoEntity->fileAccessHelper->ScanFile(fileInfoEntity->fileInfo, fileIteratorEntity->offset, + fileIteratorEntity->filter, fileIteratorEntity->memInfo); if (ret != ERR_OK) { + FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(fileIteratorEntity->memInfo); return ThrowError(env, ret); } } 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 897e65adb6f31d033b281372ac4d589de2efffdc..bae36f859ca439a99f14b03f143118eaa5e8e51d 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 @@ -19,6 +19,7 @@ #include #include "file_info_entity.h" +#include "file_info_memory_opt.h" #include "file_iterator_entity.h" #include "hilog_wrapper.h" #include "napi_file_info_exporter.h" @@ -74,88 +75,52 @@ napi_value NapiFileIteratorExporter::Constructor(napi_env env, napi_callback_inf return funcArg.GetThisVar(); } -static int MakeListFileResult(napi_value &objFileInfoExporter, FileIteratorEntity *fileIteratorEntity, - FileInfoEntity *fileInfoEntity, napi_env env, NVal &nVal, bool &isDone) +static std::tuple MakeResult(napi_value &objFileInfoExporter, FileIteratorEntity *fileIteratorEntity, + FileInfoEntity *fileInfoEntity, napi_env env) { - SharedMemoryInfo &memInfo = fileIteratorEntity->memInfo; std::lock_guard lock(fileIteratorEntity->entityOperateMutex); + NVal nVal = NVal::CreateObject(env); + bool isDone = false; + SharedMemoryInfo &memInfo = fileIteratorEntity->memInfo; if (memInfo.Empty() && !memInfo.isOver) { int ret = SharedMemoryOperation::ExpandSharedMemory(memInfo); if (ret != ERR_OK) { - return ret; + return std::make_tuple(ret, nVal, isDone); } fileIteratorEntity->offset += fileIteratorEntity->currentDataCounts; - ret = fileIteratorEntity->fileAccessHelper->ListFile(fileIteratorEntity->fileInfo, - fileIteratorEntity->offset, fileIteratorEntity->filter, memInfo); + if (fileIteratorEntity->flag == CALL_LISTFILE) { + ret = fileIteratorEntity->fileAccessHelper->ListFile(fileIteratorEntity->fileInfo, + fileIteratorEntity->offset, fileIteratorEntity->filter, memInfo); + } else if (fileIteratorEntity->flag == CALL_SCANFILE) { + ret = fileIteratorEntity->fileAccessHelper->ScanFile(fileIteratorEntity->fileInfo, + fileIteratorEntity->offset, fileIteratorEntity->filter, memInfo); + } if (ret != ERR_OK) { - HILOG_ERROR("exec ListFile fail, code:%{public}d", ret); - return ret; + HILOG_ERROR("exec file search fail, code:%{public}d", ret); + return std::make_tuple(ret, nVal, isDone); } fileIteratorEntity->currentDataCounts = fileIteratorEntity->memInfo.totalDataCounts; } fileInfoEntity->fileAccessHelper = fileIteratorEntity->fileAccessHelper; - auto ret = SharedMemoryOperation::ReadFileInfo(fileInfoEntity->fileInfo, memInfo); + auto ret = FileInfoMemoryOperation::ReadFileInfo(fileInfoEntity->fileInfo, memInfo); if (!ret) { + HILOG_ERROR("ReadFileInfo return error"); fileInfoEntity = nullptr; - objFileInfoExporter = NVal::CreateUndefined(env).val_; - nVal.AddProp("value", objFileInfoExporter); - nVal.AddProp("done", NVal::CreateBool(env, true).val_); isDone = true; - return ERR_OK; - } - nVal.AddProp("value", objFileInfoExporter); - nVal.AddProp("done", NVal::CreateBool(env, false).val_); - isDone = false; - return ERR_OK; -} - -static int MakeScanFileResult(napi_value &objFileInfoExporter, FileIteratorEntity *fileIteratorEntity, - FileInfoEntity *fileInfoEntity, napi_env env, NVal &nVal, bool &isDone) -{ - std::lock_guard lock(fileIteratorEntity->entityOperateMutex); - if (fileIteratorEntity->fileInfoVec.size() == 0) { - 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_); - isDone = true; - return ERR_OK; - } - if (fileIteratorEntity->pos == MAX_COUNT) { - fileIteratorEntity->fileInfoVec.clear(); - fileIteratorEntity->offset += MAX_COUNT; - fileIteratorEntity->pos = 0; - int ret = fileIteratorEntity->fileAccessHelper->ScanFile(fileIteratorEntity->fileInfo, - fileIteratorEntity->offset, MAX_COUNT, fileIteratorEntity->filter, fileIteratorEntity->fileInfoVec); - if (ret != ERR_OK) { - HILOG_ERROR("exec ScanFile fail, code:%{public}d", ret); - return ret; + if (memInfo.dataCounts == 0) { + nVal.AddProp("value", objFileInfoExporter); + return std::make_tuple(ERR_OK, nVal, isDone); } - } - 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_); - isDone = true; - return ERR_OK; + return std::make_tuple(E_GETRESULT, nVal, isDone); } - - fileInfoEntity->fileAccessHelper = fileIteratorEntity->fileAccessHelper; - fileInfoEntity->fileInfo = fileIteratorEntity->fileInfoVec[fileIteratorEntity->pos]; - fileIteratorEntity->pos++; nVal.AddProp("value", objFileInfoExporter); nVal.AddProp("done", NVal::CreateBool(env, false).val_); - isDone = false; - return ERR_OK; + return std::make_tuple(ERR_OK, nVal, isDone); } static bool FilterTrashAndRecentDir(const std::string &uri) @@ -201,27 +166,17 @@ napi_value NapiFileIteratorExporter::Next(napi_env env, napi_callback_info info) return nullptr; } - auto retNVal = NVal::CreateObject(env); - int ret = E_GETRESULT; - bool isDone = false; - if (fileIteratorEntity->flag == CALL_LISTFILE) { - ret = MakeListFileResult(objFileInfoExporter, fileIteratorEntity, fileInfoEntity, env, retNVal, isDone); - } else if (fileIteratorEntity->flag == CALL_SCANFILE) { - ret = MakeScanFileResult(objFileInfoExporter, fileIteratorEntity, fileInfoEntity, env, retNVal, isDone); - } + auto [ret, retNVal, isDone] = MakeResult(objFileInfoExporter, fileIteratorEntity, fileInfoEntity, env); while (!isDone && FilterTrashAndRecentDir(fileInfoEntity->fileInfo.uri)) { fileInfoEntity = NClass::GetEntityOf(env, objFileInfoExporter); retNVal = NVal::CreateObject(env); HILOG_DEBUG("TRASH_DIR or RECENT_DIR: %{public}s", fileInfoEntity->fileInfo.uri.c_str()); - if (fileIteratorEntity->flag == CALL_LISTFILE) { - ret = MakeListFileResult(objFileInfoExporter, fileIteratorEntity, fileInfoEntity, env, retNVal, isDone); - } else if (fileIteratorEntity->flag == CALL_SCANFILE) { - ret = MakeScanFileResult(objFileInfoExporter, fileIteratorEntity, fileInfoEntity, env, retNVal, isDone); - } + std::tie(ret, retNVal, isDone) = MakeResult(objFileInfoExporter, fileIteratorEntity, fileInfoEntity, env); } if (ret != ERR_OK) { NError(ret).ThrowErr(env); + HILOG_ERROR("ret = %{public}d", ret); return nullptr; } return retNVal.val_; diff --git a/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp b/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp index 7c1f257b4254125956372624cc04d2339312d0af..dea9b52d125c4c4875f395953df3055f4d1dcda1 100644 --- a/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp +++ b/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp @@ -96,10 +96,7 @@ napi_value NapiRootInfoExporter::ListFile(napi_env env, napi_callback_info info) } } auto rootEntity = NClass::GetEntityOf(env, funcArg.GetThisVar()); - if (rootEntity == nullptr) { - return NapiFileInfoExporter::ThrowError(env, E_GETRESULT); - } - if (rootEntity->fileAccessHelper == nullptr) { + if (rootEntity == nullptr || rootEntity->fileAccessHelper == nullptr) { return NapiFileInfoExporter::ThrowError(env, E_GETRESULT); } napi_value objFileIteratorExporter = NClass::InstantiateClass(env, NapiFileIteratorExporter::className_, {}); @@ -150,10 +147,7 @@ napi_value NapiRootInfoExporter::ScanFile(napi_env env, napi_callback_info info) } } auto rootEntity = NClass::GetEntityOf(env, funcArg.GetThisVar()); - if (rootEntity == nullptr) { - return NapiFileInfoExporter::ThrowError(env, E_GETRESULT); - } - if (rootEntity->fileAccessHelper == nullptr) { + if (rootEntity == nullptr || rootEntity->fileAccessHelper == nullptr) { return NapiFileInfoExporter::ThrowError(env, E_GETRESULT); } napi_value objFileIteratorExporter = NClass::InstantiateClass(env, NapiFileIteratorExporter::className_, {}); @@ -169,15 +163,19 @@ napi_value NapiRootInfoExporter::ScanFile(napi_env env, napi_callback_info info) fileInfo.mode = DOCUMENT_FLAG_REPRESENTS_DIR | DOCUMENT_FLAG_SUPPORTS_READ | DOCUMENT_FLAG_SUPPORTS_WRITE; { std::lock_guard lock(fileIteratorEntity->entityOperateMutex); + int ret = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("RootInfoList", DEFAULT_CAPACITY_200KB, + fileIteratorEntity->memInfo); + if (ret != ERR_OK) { + NError(ret).ThrowErr(env); + return nullptr; + } fileIteratorEntity->fileAccessHelper = rootEntity->fileAccessHelper; fileIteratorEntity->fileInfo = fileInfo; - fileIteratorEntity->fileInfoVec.clear(); fileIteratorEntity->offset = 0; - fileIteratorEntity->pos = 0; fileIteratorEntity->filter = std::move(filter); fileIteratorEntity->flag = CALL_SCANFILE; - auto ret = rootEntity->fileAccessHelper->ScanFile(fileInfo, fileIteratorEntity->offset, - MAX_COUNT, filter, fileIteratorEntity->fileInfoVec); + ret = rootEntity->fileAccessHelper->ScanFile(fileInfo, fileIteratorEntity->offset, filter, + fileIteratorEntity->memInfo); if (ret != ERR_OK) { return NapiFileInfoExporter::ThrowError(env, ret); } diff --git a/interfaces/inner_api/file_access/include/file_access_ext_proxy.h b/interfaces/inner_api/file_access/include/file_access_ext_proxy.h index d85f61aaf892f7dc48cc24d9d8d1ca7e165b68f4..dedc52e69e0b3c25a995c97a2a5bab36675ff38c 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_proxy.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_proxy.h @@ -48,8 +48,8 @@ public: virtual int Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) override; virtual int ListFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, SharedMemoryInfo &memInfo) override; - virtual int ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, - const FileFilter &filter, std::vector &fileInfoVec) override; + virtual int ScanFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, + SharedMemoryInfo &memInfo) override; virtual int Query(const Uri &uri, std::vector &columns, std::vector &results) override; virtual int GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo) override; virtual int GetFileInfoFromRelativePath(const std::string &selectFile, FileInfo &fileInfo) override; @@ -65,4 +65,4 @@ private: }; } // namespace FileAccessFwk } // namespace OHOS -#endif // FILE_ACCESS_EXT_PROXY_H \ No newline at end of file +#endif // FILE_ACCESS_EXT_PROXY_H diff --git a/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h b/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h index f7465ffd9db7c15dfbe2fc7d36c9cdfe94778d89..bd60787f2ada7cf89cc1530ec64fbd75448eacb9 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_stub_impl.h @@ -46,8 +46,8 @@ public: int Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) override; int ListFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, SharedMemoryInfo &memInfo) override; - int ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, - const FileFilter &filter, std::vector &fileInfoVec) override; + int ScanFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, + SharedMemoryInfo &memInfo) override; int Query(const Uri &uri, std::vector &columns, std::vector &results) override; int GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo) override; int GetFileInfoFromRelativePath(const std::string &selectFile, FileInfo &fileInfo) override; @@ -64,4 +64,4 @@ private: }; } // namespace FileAccessFwk } // namespace OHOS -#endif // FILE_ACCESS_EXT_STUB_IMPL_H \ No newline at end of file +#endif // FILE_ACCESS_EXT_STUB_IMPL_H diff --git a/interfaces/inner_api/file_access/include/file_access_helper.h b/interfaces/inner_api/file_access/include/file_access_helper.h index 95939356e2e81230e28a2f1f307bfc29de99ec00..ec2efe14062cd0a07f4e7ee1ea8cc7f353dd3eb3 100644 --- a/interfaces/inner_api/file_access/include/file_access_helper.h +++ b/interfaces/inner_api/file_access/include/file_access_helper.h @@ -78,8 +78,7 @@ public: int CopyFile(Uri &sourceUri, Uri &destUri, const std::string &fileName, Uri &newFileUri); int Rename(Uri &sourceFile, const std::string &displayName, Uri &newFile); int ListFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, SharedMemoryInfo &memInfo); - int ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, - std::vector &fileInfoVec); + int ScanFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, SharedMemoryInfo &memInfo); int Query(Uri &uri, std::string &metaJson); int GetFileInfoFromUri(Uri &selectFile, FileInfo &fileInfo); int GetFileInfoFromRelativePath(std::string &selectFile, FileInfo &fileInfo); @@ -133,4 +132,4 @@ private: }; } // namespace FileAccessFwk } // namespace OHOS -#endif // FILE_ACCESS_HELPER_H \ No newline at end of file +#endif // FILE_ACCESS_HELPER_H diff --git a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h index 2869fb9fd4d1ba84c7662c55b7ef5ce85acbb5a2..fe3c5caf969dc4301c76a74f2ff77b3594d5d87d 100644 --- a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h +++ b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h @@ -24,7 +24,8 @@ #include "file_access_extension_info.h" #include "file_access_framework_errno.h" #include "file_filter.h" -#include "file_info_shared_memory.h" +#include "image_source.h" +#include "shared_memory.h" #include "uri.h" namespace OHOS { @@ -66,10 +67,10 @@ public: virtual int CopyFile(const Uri &sourceUri, const Uri &destUri, const std::string &fileName, Uri &newFileUri) = 0; virtual int Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) = 0; - virtual int ListFile(const FileInfo &fileInfo, const int64_t offset, - const FileFilter &filter, SharedMemoryInfo &memInfo) = 0; - virtual int ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, - const FileFilter &filter, std::vector &fileInfoVec) = 0; + virtual int ListFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, + SharedMemoryInfo &memInfo) = 0; + virtual int ScanFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, + SharedMemoryInfo &memInfo) = 0; virtual int Query(const Uri &uri, std::vector &columns, std::vector &results) = 0; virtual int GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo) = 0; virtual int GetFileInfoFromRelativePath(const std::string &selectFile, FileInfo &fileInfo) = 0; @@ -83,4 +84,4 @@ public: }; } // namespace FileAccessFwk } // namespace OHOS -#endif // I_FILE_ACCESS_EXT_BASE_H \ No newline at end of file +#endif // I_FILE_ACCESS_EXT_BASE_H diff --git a/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp b/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp index f4276d45ad4bf6dfd81134846a069deb1c3665a8..0769e272c44a5f25ff5863fc777e14c2da098a04 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_proxy.cpp @@ -496,35 +496,6 @@ int FileAccessExtProxy::Rename(const Uri &sourceFile, const std::string &display return ERR_OK; } -static int GetListFileResult(MessageParcel &reply, std::vector &fileInfoVec) -{ - int ret = E_IPCS; - if (!reply.ReadInt32(ret)) { - HILOG_ERROR("fail to ReadInt32 ret"); - return E_IPCS; - } - - if (ret != ERR_OK) { - HILOG_ERROR("ListFile operation failed ret : %{public}d", ret); - return ret; - } - - int64_t count = 0; - if (!reply.ReadInt64(count)) { - HILOG_ERROR("ListFile operation failed to Read count"); - return E_IPCS; - } - - fileInfoVec.clear(); - for (int64_t i = 0; i < count; i++) { - std::unique_ptr fileInfoPtr(reply.ReadParcelable()); - if (fileInfoPtr != nullptr) { - fileInfoVec.push_back(*fileInfoPtr); - } - } - return ERR_OK; -} - static int WriteFileFilterFuncArguments(MessageParcel &data, std::tuple args) { @@ -582,7 +553,7 @@ static int ReadFileFilterResults(MessageParcel &reply, SharedMemoryInfo &memInfo } int FileAccessExtProxy::ListFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, - SharedMemoryInfo &memInfo) + SharedMemoryInfo &memInfo) { UserAccessTracer trace; trace.Start("ListFile"); @@ -621,8 +592,8 @@ int FileAccessExtProxy::ListFile(const FileInfo &fileInfo, const int64_t offset, return ERR_OK; } -int FileAccessExtProxy::ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, - const FileFilter &filter, std::vector &fileInfoVec) +int FileAccessExtProxy::ScanFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, + SharedMemoryInfo &memInfo) { UserAccessTracer trace; trace.Start("ScanFile"); @@ -632,24 +603,9 @@ int FileAccessExtProxy::ScanFile(const FileInfo &fileInfo, const int64_t offset, return E_IPCS; } - if (!data.WriteParcelable(&fileInfo)) { - HILOG_ERROR("fail to WriteParcelable fileInfo"); - return E_IPCS; - } - - if (!data.WriteInt64(offset)) { - HILOG_ERROR("fail to WriteInt64 offset"); - return E_IPCS; - } - - if (!data.WriteInt64(maxCount)) { - HILOG_ERROR("fail to WriteInt64 maxCount"); - return E_IPCS; - } - - if (!data.WriteParcelable(&filter)) { - HILOG_ERROR("fail to WriteParcelable filter"); - return E_IPCS; + int ret = WriteFileFilterFuncArguments(data, std::make_tuple(&fileInfo, offset, &filter, &memInfo)); + if (ret != ERR_OK) { + return ret; } MessageParcel reply; @@ -660,10 +616,19 @@ int FileAccessExtProxy::ScanFile(const FileInfo &fileInfo, const int64_t offset, return err; } - err = GetListFileResult(reply, fileInfoVec); - if (err != ERR_OK) { - HILOG_ERROR("fail to GetListFileResult. err: %{public}d", err); - return err; + if (!reply.ReadInt32(ret)) { + HILOG_ERROR("fail to ReadInt32 ret"); + return E_IPCS; + } + if (ret != ERR_OK) { + HILOG_ERROR("ScanFile operation failed ret : %{public}d", ret); + return ret; + } + + ret = ReadFileFilterResults(reply, memInfo); + if (ret != ERR_OK) { + HILOG_ERROR("fail to read server return results. ret: %{public}d", ret); + return ret; } 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 2d5da4236fa213879ffa3ff6db07c86c0daeb869..fec96f524ff67ba77c7ba3d0a4c98793bfb91460 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 @@ -404,8 +404,8 @@ ErrCode FileAccessExtStub::CmdRename(MessageParcel &data, MessageParcel &reply) return ERR_OK; } -std::tuple, int64_t, std::shared_ptr, std::shared_ptr> - ReadFileFilterFuncArguments(MessageParcel &data) +static auto ReadFileFilterFuncArguments(MessageParcel &data) -> + std::tuple, int64_t, std::shared_ptr, std::shared_ptr> { std::shared_ptr fileInfo(data.ReadParcelable()); if (fileInfo == nullptr) { @@ -434,7 +434,7 @@ std::tuple, int64_t, std::shared_ptr, return std::make_tuple(ERR_OK, fileInfo, offset, filter, memInfo); } -int WriteFileFilterResults(MessageParcel &reply, SharedMemoryInfo &memInfo) +static int WriteFileFilterResults(MessageParcel &reply, SharedMemoryInfo &memInfo) { if (!reply.WriteUint32(memInfo.dataCounts)) { HILOG_ERROR("fail to WriteUint32 dataCounts"); @@ -463,13 +463,8 @@ ErrCode FileAccessExtStub::CmdListFile(MessageParcel &data, MessageParcel &reply { UserAccessTracer trace; trace.Start("CmdListFile"); - int ret = E_IPCS; - std::shared_ptr fileInfo = nullptr; - int64_t offset = 0; - std::shared_ptr filter = nullptr; - std::shared_ptr memInfo = nullptr; - std::tie(ret, fileInfo, offset, filter, memInfo) = ReadFileFilterFuncArguments(data); + auto [ret, fileInfo, offset, filter, memInfo] = ReadFileFilterFuncArguments(data); if (ret != ERR_OK) { return ret; } @@ -494,51 +489,26 @@ ErrCode FileAccessExtStub::CmdScanFile(MessageParcel &data, MessageParcel &reply { UserAccessTracer trace; trace.Start("CmdScanFile"); - std::shared_ptr fileInfo(data.ReadParcelable()); - if (fileInfo == nullptr) { - HILOG_ERROR("Parameter ScanFile fail to ReadParcelable fileInfo"); - return E_IPCS; - } - int64_t offset = 0; - if (!data.ReadInt64(offset)) { - HILOG_ERROR("parameter ScanFile offset is invalid"); - return E_IPCS; - } - - int64_t maxCount = 0; - if (!data.ReadInt64(maxCount)) { - HILOG_ERROR("parameter ScanFile maxCount is invalid"); - return E_IPCS; + auto [ret, fileInfo, offset, filter, memInfo] = ReadFileFilterFuncArguments(data); + if (ret != ERR_OK) { + return ret; } - - std::shared_ptr filter(data.ReadParcelable()); - if (filter == nullptr) { - HILOG_ERROR("parameter ScanFile FileFilter is invalid"); - return E_IPCS; + ret = SharedMemoryOperation::MapSharedMemory(*memInfo); + if (ret != ERR_OK) { + return ret; } - std::vector fileInfoVec; - int ret = ScanFile(*fileInfo, offset, maxCount, *filter, fileInfoVec); + ret = ScanFile(*fileInfo, offset, *filter, *memInfo); if (!reply.WriteInt32(ret)) { - HILOG_ERROR("Parameter ScanFile fail to WriteInt32 ret"); - return E_IPCS; - } - - int64_t count {fileInfoVec.size()}; - if (!reply.WriteInt64(count)) { - HILOG_ERROR("Parameter ScanFile fail to WriteInt64 count"); + HILOG_ERROR("ScanFile fail to WriteInt32 ret"); + SharedMemoryOperation::DestroySharedMemory(*memInfo); return E_IPCS; } - for (const auto &fileInfo : fileInfoVec) { - if (!reply.WriteParcelable(&fileInfo)) { - HILOG_ERROR("parameter ScanFile fail to WriteParcelable fileInfoVec"); - return E_IPCS; - } - } - - return ERR_OK; + ret = WriteFileFilterResults(reply, *memInfo); + SharedMemoryOperation::DestroySharedMemory(*memInfo); + return ret; } ErrCode FileAccessExtStub::CmdGetRoots(MessageParcel &data, MessageParcel &reply) diff --git a/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp b/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp index 604421b727f89aeea1cf3b28c47f2cb787a26ab2..0c917992ef28f7e489ead4c314c1b30c8abca55a 100644 --- a/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp +++ b/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp @@ -18,6 +18,7 @@ #include #include "user_access_tracer.h" #include "file_access_framework_errno.h" +#include "file_info_memory_opt.h" #include "hilog_wrapper.h" #include "hitrace_meter.h" @@ -135,7 +136,7 @@ int FileAccessExtStubImpl::Rename(const Uri &sourceFile, const std::string &disp } int FileAccessExtStubImpl::ListFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, - SharedMemoryInfo &memInfo) + SharedMemoryInfo &memInfo) { UserAccessTracer trace; trace.Start("ListFile"); @@ -148,9 +149,10 @@ int FileAccessExtStubImpl::ListFile(const FileInfo &fileInfo, const int64_t offs int ret = ERR_OK; memInfo.isOver = false; int64_t currentOffset = offset; - while (true) { - int64_t maxCounts = - memInfo.memSize > DEFAULT_CAPACITY_200KB ? FILEFILTER_MAX_COUNTS : FILEFILTER_DEFAULT_COUNTS; + uint32_t currentWriteCounts = 0; + int64_t maxCounts = + memInfo.memSize > DEFAULT_CAPACITY_200KB ? FILEFILTER_MAX_COUNTS : FILEFILTER_DEFAULT_COUNTS; + do { fileInfoVec.clear(); ret = extension_->ListFile(fileInfo, currentOffset, maxCounts, filter, fileInfoVec); if (ret != ERR_OK) { @@ -158,12 +160,13 @@ int FileAccessExtStubImpl::ListFile(const FileInfo &fileInfo, const int64_t offs break; } - uint32_t currentWriteCounts = SharedMemoryOperation::WriteFileInfos(fileInfoVec, memInfo); + currentWriteCounts = FileInfoMemoryOperation::WriteFileInfos(fileInfoVec, memInfo); + HILOG_ERROR("currentWriteCounts: %{public}s", std::to_string(currentWriteCounts).c_str()); if (currentWriteCounts < fileInfoVec.size()) { if (memInfo.memSize == DEFAULT_CAPACITY_200KB) { uint32_t counts = 0; extension_->GetFileInfoNum(fileInfo.uri, filter, false, counts); - memInfo.leftDataCounts = counts - memInfo.dataCounts; + memInfo.leftDataCounts = counts - offset - memInfo.dataCounts; } break; } @@ -172,13 +175,13 @@ int FileAccessExtStubImpl::ListFile(const FileInfo &fileInfo, const int64_t offs break; } currentOffset += currentWriteCounts; - } + } while (currentWriteCounts == maxCounts); return ret; } -int FileAccessExtStubImpl::ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, - const FileFilter &filter, std::vector &fileInfoVec) +int FileAccessExtStubImpl::ScanFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, + SharedMemoryInfo &memInfo) { UserAccessTracer trace; trace.Start("ScanFile"); @@ -187,7 +190,36 @@ int FileAccessExtStubImpl::ScanFile(const FileInfo &fileInfo, const int64_t offs return E_IPCS; } - int ret = extension_->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + std::vector fileInfoVec; + int ret = ERR_OK; + memInfo.isOver = false; + int64_t currentOffset = offset; + uint32_t currentWriteCounts = 0; + int64_t maxCounts = + memInfo.memSize > DEFAULT_CAPACITY_200KB ? FILEFILTER_MAX_COUNTS : FILEFILTER_DEFAULT_COUNTS; + do { + fileInfoVec.clear(); + ret = extension_->ScanFile(fileInfo, currentOffset, maxCounts, filter, fileInfoVec); + if (ret != ERR_OK) { + HILOG_ERROR("Extension ability ScanFile error, code:%{public}d", ret); + break; + } + + currentWriteCounts = FileInfoMemoryOperation::WriteFileInfos(fileInfoVec, memInfo); + if (currentWriteCounts < fileInfoVec.size()) { + if (memInfo.memSize == DEFAULT_CAPACITY_200KB) { + uint32_t counts = 0; + extension_->GetFileInfoNum(fileInfo.uri, filter, true, counts); + memInfo.leftDataCounts = counts - offset - memInfo.dataCounts; + } + break; + } + if (fileInfoVec.empty() ||(maxCounts > fileInfoVec.size() && currentWriteCounts == fileInfoVec.size())) { + memInfo.isOver = true; + break; + } + currentOffset += currentWriteCounts; + } while (currentWriteCounts == maxCounts); return ret; } diff --git a/interfaces/inner_api/file_access/src/file_access_helper.cpp b/interfaces/inner_api/file_access/src/file_access_helper.cpp index 399c153a44dabe69cfe07cbdea620605e85ab43a..1186593824f7fcb27fbb2c9676ac3a208eab6af5 100644 --- a/interfaces/inner_api/file_access/src/file_access_helper.cpp +++ b/interfaces/inner_api/file_access/src/file_access_helper.cpp @@ -757,8 +757,8 @@ int FileAccessHelper::ListFile(const FileInfo &fileInfo, const int64_t offset, c return ERR_OK; } -int FileAccessHelper::ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, - const FileFilter &filter, std::vector &fileInfoVec) +int FileAccessHelper::ScanFile(const FileInfo &fileInfo, const int64_t offset, const FileFilter &filter, + SharedMemoryInfo &memInfo) { UserAccessTracer trace; trace.Start("ScanFile"); @@ -779,7 +779,7 @@ int FileAccessHelper::ScanFile(const FileInfo &fileInfo, const int64_t offset, c return E_IPCS; } - int ret = fileExtProxy->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + int ret = fileExtProxy->ScanFile(fileInfo, offset, filter, memInfo); if (ret != ERR_OK) { HILOG_ERROR("ScanFile get result error, code:%{public}d", ret); return ret; @@ -1300,4 +1300,4 @@ FileAccessDeathRecipient::~FileAccessDeathRecipient() { } } // namespace FileAccessFwk -} // namespace OHOS \ No newline at end of file +} // namespace OHOS diff --git a/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp b/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp index e2fff207601bac6741df04fff85d682e9ca00a07..318e8c66c7663d81446aa68de5c4943b30347d80 100644 --- a/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp +++ b/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp @@ -1007,7 +1007,6 @@ bool JsFileAccessExtAbility::ParserFileInfoNumJsResult(napi_env &env, napi_value HILOG_ERROR("Convert js value fail."); return false; } - HILOG_ERROR("left data is counts: %{public}u in storage media", counts); return true; } diff --git a/interfaces/kits/js/src/common/file_info_memory_opt.h b/interfaces/kits/js/src/common/file_info_memory_opt.h new file mode 100644 index 0000000000000000000000000000000000000000..f3c9806bda62b3cadc63e97762554c9547eed0ad --- /dev/null +++ b/interfaces/kits/js/src/common/file_info_memory_opt.h @@ -0,0 +1,107 @@ + +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FILE_INFO_MEMORY_OPT_H +#define FILE_INFO_MEMORY_OPT_H + +#include +#include + +#include "shared_memory.h" +#include "file_access_extension_info.h" +#include "hilog_wrapper.h" + +namespace OHOS { +namespace FileAccessFwk { +class FileInfoMemoryOperation { +public: + static uint32_t WriteFileInfos(std::vector &fileInfoVec, SharedMemoryInfo &memInfo) + { + uint32_t count = 0; + for (auto &info : fileInfoVec) { + int ret = WriteFileInfo(info, memInfo); + if (!ret) { + return count; + } + count++; + } + return count; + } + + static bool WriteFileInfo(FileInfo &info, SharedMemoryInfo &memInfo) + { + uint64_t fileInfoSize = GetFileInfoSize(info); + uint64_t leftSize = memInfo.memSize - memInfo.dataSize; + if (leftSize < fileInfoSize) { + HILOG_INFO("Shared memory cannot hold current data"); + return false; + } + + uint8_t *dataPtr = memInfo.dataPtr; + uint64_t dataSize = memInfo.dataSize; + bool ret = SharedMemoryOperation::WriteString(info.uri, memInfo); + ret = ret && SharedMemoryOperation::WriteString(info.relativePath, memInfo); + ret = ret && SharedMemoryOperation::WriteString(info.fileName, memInfo); + ret = ret && SharedMemoryOperation::WriteInt32(info.mode, memInfo); + ret = ret && SharedMemoryOperation::WriteInt64(info.size, memInfo); + ret = ret && SharedMemoryOperation::WriteInt64(info.mtime, memInfo); + ret = ret && SharedMemoryOperation::WriteString(info.mimeType, memInfo); + if (!ret) { + HILOG_ERROR("Write FileInfo to shared memmory failed"); + memInfo.dataPtr = dataPtr; + memInfo.dataSize = dataSize; + return false; + } + memInfo.dataCounts++; + return true; + } + + static bool ReadFileInfo(FileInfo &info, SharedMemoryInfo &memInfo) + { + if (memInfo.dataCounts == 0) { + HILOG_INFO("No data in shared memory"); + return false; + } + uint8_t *dataPtr = memInfo.dataPtr; + uint64_t dataSize = memInfo.dataSize; + bool ret = SharedMemoryOperation::ReadString(info.uri, memInfo); + ret = ret && SharedMemoryOperation::ReadString(info.relativePath, memInfo); + ret = ret && SharedMemoryOperation::ReadString(info.fileName, memInfo); + ret = ret && SharedMemoryOperation::ReadInt32(info.mode, memInfo); + ret = ret && SharedMemoryOperation::ReadInt64(info.size, memInfo); + ret = ret && SharedMemoryOperation::ReadInt64(info.mtime, memInfo); + ret = ret && SharedMemoryOperation::ReadString(info.mimeType, memInfo); + if (!ret) { + HILOG_ERROR("Read FileInfo from shared memmory failed"); + memInfo.dataPtr = dataPtr; + memInfo.dataSize = dataSize; + return false; + } + memInfo.dataCounts--; + return true; + } + +private: + static uint64_t GetFileInfoSize(const FileInfo &info) + { + return sizeof(std::string::size_type) + info.uri.size() + sizeof(std::string::size_type) + + info.relativePath.size() + sizeof(std::string::size_type) + info.fileName.size() + sizeof(info.mode) + + sizeof(info.size) + sizeof(info.mtime) + sizeof(std::string::size_type) + info.mimeType.size(); + } +}; +} // namespace FileAccessFwk +} // namespace OHOS +#endif // FILE_INFO_MEMORY_OPT_H diff --git a/interfaces/kits/js/src/common/file_info_shared_memory.h b/interfaces/kits/js/src/common/shared_memory.h similarity index 75% rename from interfaces/kits/js/src/common/file_info_shared_memory.h rename to interfaces/kits/js/src/common/shared_memory.h index e19f5ebac7f3d631aa120e8df2151c6577b9291c..7abde61dbea176b50706112a2360fc6fe47b97a5 100644 --- a/interfaces/kits/js/src/common/file_info_shared_memory.h +++ b/interfaces/kits/js/src/common/shared_memory.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef _FILE_INFO_SHARED_MEMORY_H_ -#define _FILE_INFO_SHARED_MEMORY_H_ +#ifndef SHARED_MEMORY_H +#define SHARED_MEMORY_H #include #include @@ -26,7 +26,6 @@ #include #include "ashmem.h" -#include "file_access_extension_info.h" #include "file_access_framework_errno.h" #include "hilog_wrapper.h" #include "ipc_file_descriptor.h" @@ -154,7 +153,7 @@ public: memInfo.memFd = AshmemCreate(memInfo.memName, memInfo.memSize); if (memInfo.memFd < 0) { HILOG_ERROR("Create shared memory error, shared memory name is %{public}s code: %{public}d", - memInfo.memName, memInfo.memFd); + memInfo.memName, memInfo.memFd); return memInfo.memFd; } @@ -228,72 +227,6 @@ public: return false; } - static uint32_t WriteFileInfos(std::vector &fileInfoVec, SharedMemoryInfo &memInfo) - { - uint32_t count = 0; - for (auto &info : fileInfoVec) { - int ret = WriteFileInfo(info, memInfo); - if (!ret) { - return count; - } - count++; - } - return count; - } - - static bool WriteFileInfo(FileInfo &info, SharedMemoryInfo &memInfo) - { - uint64_t fileInfoSize = GetFileInfoSize(info); - uint64_t leftSize = memInfo.memSize - memInfo.dataSize; - if (leftSize < fileInfoSize) { - HILOG_INFO("Shared memory cannot hold current data"); - return false; - } - - uint8_t *dataPtr = memInfo.dataPtr; - uint64_t dataSize = memInfo.dataSize; - bool ret = WriteString(info.uri, memInfo); - ret = ret && WriteString(info.relativePath, memInfo); - ret = ret && WriteString(info.fileName, memInfo); - ret = ret && WriteInt32(info.mode, memInfo); - ret = ret && WriteInt64(info.size, memInfo); - ret = ret && WriteInt64(info.mtime, memInfo); - ret = ret && WriteString(info.mimeType, memInfo); - if (!ret) { - memInfo.dataPtr = dataPtr; - memInfo.dataSize = dataSize; - HILOG_ERROR("Write FileInfo into shared memmory failed"); - return false; - } - memInfo.dataCounts++; - return true; - } - - static bool ReadFileInfo(FileInfo &info, SharedMemoryInfo &memInfo) - { - if (memInfo.dataCounts == 0) { - HILOG_INFO("No data in shared memory"); - return false; - } - uint8_t *dataPtr = memInfo.dataPtr; - uint64_t dataSize = memInfo.dataSize; - bool ret = ReadString(info.uri, memInfo); - ret = ret && ReadString(info.relativePath, memInfo); - ret = ret && ReadString(info.fileName, memInfo); - ret = ret && ReadInt32(info.mode, memInfo); - ret = ret && ReadInt64(info.size, memInfo); - ret = ret && ReadInt64(info.mtime, memInfo); - ret = ret && ReadString(info.mimeType, memInfo); - if (!ret) { - memInfo.dataPtr = dataPtr; - memInfo.dataSize = dataSize; - return false; - } - memInfo.dataCounts--; - return true; - } - -private: template static bool WriteInteger(T &integer, SharedMemoryInfo &memInfo) { @@ -353,7 +286,7 @@ private: return true; } - const uint8_t *src = reinterpret_cast(inVal.c_str()); + const char *src = inVal.c_str(); uint8_t *dest = memInfo.dataPtr; if (memcpy_s(dest, len, src, len) != ERR_OK) { HILOG_ERROR("WriteString failed:%{public}s", std::strerror(errno)); @@ -369,6 +302,7 @@ private: std::string::size_type len = 0; int ret = ReadInteger(len, memInfo); if (!ret) { + HILOG_ERROR("ReadString->ReadInteger"); return false; } if (len == 0) { @@ -377,25 +311,18 @@ private: } uint8_t *src = memInfo.dataPtr; - uint8_t dest[len + 1]; - if (memcpy_s(dest, len, src, len) != ERR_OK) { + char dest[len + 1]; + if (memcpy_s(dest, sizeof(dest), src, len) != ERR_OK) { HILOG_ERROR("ReadString failed:%{public}s", std::strerror(errno)); return false; } dest[len] = 0; - outVal = reinterpret_cast(dest); + outVal = dest; memInfo.dataPtr += len; memInfo.dataSize -= len; return true; } - - static uint64_t GetFileInfoSize(FileInfo &info) - { - return sizeof(std::string::size_type) + info.uri.size() + sizeof(std::string::size_type) + - info.relativePath.size() + sizeof(std::string::size_type) + info.fileName.size() + sizeof(info.mode) + - sizeof(info.size) + sizeof(info.mtime) + sizeof(std::string::size_type) + info.mimeType.size(); - } }; } // namespace FileAccessFwk } // namespace OHOS -#endif // _FILE_INFO_SHARED_MEMORY_H_ +#endif // SHARED_MEMORY_H diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index ce0e6d0175fea31452d7e1f83fb77c5b4997755d..4b4b70c7dd9323ed69f88f6d737da5afcea725c8 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -629,6 +629,11 @@ export default class FileExtAbility extends Extension { } getFileInfoNum(sourceFileUri: string, filter: Filter, recursion: boolean) : {boolean, number} { + sourceFileUri = decodeUri(sourceFileUri); + if (!checkUri(sourceFileUri)) { + hilog.error(DOMAIN_CODE, TAG, 'getFileInfoNum checkUri fail'); + return {success: false, counts: 0}; + } let path = getPath(sourceFileUri); try { let statPath = fs.statSync(path); @@ -1131,4 +1136,4 @@ export default class FileExtAbility extends Extension { return uriReturnObject('', e.code); } } -}; \ No newline at end of file +}; diff --git a/test/fuzztest/externalfileaccess_fuzzer/external_file_access_fuzzer.cpp b/test/fuzztest/externalfileaccess_fuzzer/external_file_access_fuzzer.cpp index 5ef6698ba9a7470bae6a4bd3fd78df249cd4009d..bb04e84dee1d442a2b79e57bd66720dacc58f62b 100644 --- a/test/fuzztest/externalfileaccess_fuzzer/external_file_access_fuzzer.cpp +++ b/test/fuzztest/externalfileaccess_fuzzer/external_file_access_fuzzer.cpp @@ -24,7 +24,7 @@ #include "nativetoken_kit.h" #include "file_access_framework_errno.h" #include "file_access_helper.h" -#include "file_info_shared_memory.h" +#include "file_info_memory_opt.h" #include "iservice_registry.h" #include "hilog_wrapper.h" @@ -400,10 +400,12 @@ bool ScanFileFuzzTest(const uint8_t* data, size_t size) FileInfo fileInfo; fileInfo.uri = std::string(reinterpret_cast(data), size); int64_t offset = 0; - int64_t maxCount = 1000; - std::vector fileInfoVec; FileFilter filter; - int result = helper->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + SharedMemoryInfo memInfo; + int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, + memInfo); + result = helper->ScanFile(fileInfo, offset, filter, memInfo); + SharedMemoryOperation::DestroySharedMemory(memInfo); if (result != OHOS::FileAccessFwk::ERR_OK) { HILOG_ERROR("ScanFile failed. ret : %{public}d", result); return false; diff --git a/test/unittest/abnormal_file_access_test.cpp b/test/unittest/abnormal_file_access_test.cpp index fef7a9063d6ed741afb09a6c7fceba2b748072c7..a5159a60e16504818f9672059a81a86b60706d0a 100755 --- a/test/unittest/abnormal_file_access_test.cpp +++ b/test/unittest/abnormal_file_access_test.cpp @@ -317,11 +317,13 @@ HWTEST_F(AbnormalFileExtensionHelperTest, abnormal_external_file_access_ScanFile try { FileInfo fileInfo; int64_t offset = 0; - int64_t maxCount = 0; FileFilter filter; - vector fileInfoVec; - int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + SharedMemoryInfo memInfo; + int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, + memInfo); + result = g_fah->ScanFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, E_PERMISSION_SYS); + SharedMemoryOperation::DestroySharedMemory(memInfo); } catch (...) { GTEST_LOG_(ERROR) << "abnormal_external_file_access_ScanFile_0000 occurs an exception."; } diff --git a/test/unittest/external_file_access_test.cpp b/test/unittest/external_file_access_test.cpp index 863b37d8b29d7c95d2c6dd26f732ade3db8389e8..47d22084054299577abf74bd6023b381f3388154 100644 --- a/test/unittest/external_file_access_test.cpp +++ b/test/unittest/external_file_access_test.cpp @@ -23,7 +23,7 @@ #include "accesstoken_kit.h" #include "context_impl.h" #include "file_access_framework_errno.h" -#include "file_info_shared_memory.h" +#include "file_info_memory_opt.h" #include "iservice_registry.h" #include "nativetoken_kit.h" #include "token_setproc.h" @@ -3050,8 +3050,8 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0000, testing::e int64_t offset = 0; FileFilter filter; SharedMemoryInfo memInfo; - result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory( + "FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); result = g_fah->ListFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_GT(memInfo.Size(), OHOS::FileAccessFwk::ERR_OK); @@ -3084,8 +3084,8 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0001, testing::e int64_t offset = 0; FileFilter filter; SharedMemoryInfo memInfo; - int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + int result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); result = g_fah->ListFile(fileInfo, offset, filter, memInfo); EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(memInfo.Size(), OHOS::FileAccessFwk::ERR_OK); @@ -3127,8 +3127,8 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0002, testing::e int64_t offset = 0; FileFilter filter; SharedMemoryInfo memInfo; - int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory( + "FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); result = g_fah->ListFile(fileInfo, offset, filter, memInfo); EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(memInfo.Size(), OHOS::FileAccessFwk::ERR_OK); @@ -3162,8 +3162,8 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0003, testing::e int64_t offset = 0; FileFilter filter; SharedMemoryInfo memInfo; - int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + int result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); result = g_fah->ListFile(fileInfo, offset, filter, memInfo); EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(memInfo.Size(), OHOS::FileAccessFwk::ERR_OK); @@ -3218,8 +3218,8 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0004, testing::e FileFilter filter; g_num = 0; SharedMemoryInfo memInfo; - result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory( + "FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); for (int j = 0; j < INIT_THREADS_NUMBER; j++) { std::thread execthread(ListFileTdd, fileInfo, offset, filter, std::ref(memInfo)); execthread.join(); @@ -3270,8 +3270,8 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0005, testing::e int64_t offset = 0; FileFilter filter; SharedMemoryInfo memInfo; - int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory( + "FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); result = g_fah->ListFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::E_IPCS); result = g_fah->Delete(newDirUriTest); @@ -3315,8 +3315,8 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0006, testing::e int64_t offset = 0; FileFilter filter; SharedMemoryInfo memInfo; - int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory( + "FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); result = g_fah->ListFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_GT(memInfo.Size(), OHOS::FileAccessFwk::ERR_OK); @@ -3382,8 +3382,8 @@ static void ListFileFilter7(Uri newDirUriTest) int64_t offset = 4; SharedMemoryInfo memInfo; FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + int result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); result = g_fah->ListFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(memInfo.Size(), FILE_COUNT_1); @@ -3438,7 +3438,7 @@ static void ShowInfo(SharedMemoryInfo &memInfo, const std::string &caseNumber) { FileAccessFwk::FileInfo fileInfo; for (size_t i = 0; i < memInfo.Size(); i++) { - FileAccessFwk::SharedMemoryOperation::ReadFileInfo(fileInfo, memInfo); + FileAccessFwk::FileInfoMemoryOperation::ReadFileInfo(fileInfo, memInfo); GTEST_LOG_(INFO) << caseNumber << ", uri:" << fileInfo.uri << endl; } } @@ -3450,8 +3450,8 @@ static void ListFileFilter8(Uri newDirUriTest) int64_t offset = 0; SharedMemoryInfo memInfo; FileFilter filter({}, {}, {}, -1, 0, false, true); - int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + int result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); result = g_fah->ListFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(memInfo.Size(), FILE_COUNT_6); @@ -3498,8 +3498,8 @@ static void ListFileFilter9(Uri newDirUriTest) int64_t offset = 0; SharedMemoryInfo memInfo; FileFilter filter; - int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + int result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); result = g_fah->ListFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(memInfo.Size(), FILE_COUNT_6); @@ -3612,8 +3612,8 @@ static void ListFileFilter11(Uri newDirUriTest, const double &time) fileInfo.uri = newDirUriTest.ToString(); int64_t offset = 0; SharedMemoryInfo memInfo; - int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + int result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); result = g_fah->ListFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -3708,33 +3708,35 @@ static void ScanFileFilter0(Uri newDirUriTest, const double &time) FileInfo fileInfo; fileInfo.uri = newDirUriTest.ToString(); int64_t offset = 0; - int64_t maxCount = 1000; - std::vector fileInfoVec; + SharedMemoryInfo memInfo; + int result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + result = g_fah->ScanFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); + EXPECT_EQ(memInfo.Size(), FILE_COUNT_5); FileFilter filter1({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, -1, false, true); - result = g_fah->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + result = g_fah->ScanFile(fileInfo, offset, filter1, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + EXPECT_EQ(memInfo.Size(), FILE_COUNT_4); FileFilter filter2({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, 0, 0, false, true); - result = g_fah->ScanFile(fileInfo, offset, maxCount, filter2, fileInfoVec); + result = g_fah->ScanFile(fileInfo, offset, filter2, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_1); + EXPECT_EQ(memInfo.Size(), FILE_COUNT_1); FileFilter filter3({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, time, false, true); - result = g_fah->ScanFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + result = g_fah->ScanFile(fileInfo, offset, filter3, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_2); + EXPECT_EQ(memInfo.Size(), FILE_COUNT_2); double nowTime = GetTime(); FileFilter filter4({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, nowTime, false, true); - result = g_fah->ScanFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + result = g_fah->ScanFile(fileInfo, offset, filter4, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), 0); + EXPECT_EQ(memInfo.Size(), 0); + FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo); } /** @@ -3774,12 +3776,14 @@ static void ScanFileFilter1(Uri newDirUriTest) FileInfo fileInfo; fileInfo.uri = newDirUriTest.ToString(); int64_t offset = 0; - int64_t maxCount = 1000; - std::vector fileInfoVec; FileFilter filter; - int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + SharedMemoryInfo memInfo; + int result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); + result = g_fah->ScanFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); + EXPECT_EQ(memInfo.Size(), FILE_COUNT_5); + FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo); } /** @@ -3819,12 +3823,14 @@ static void ScanFileFilter2(Uri newDirUriTest) FileInfo fileInfo; fileInfo.uri = newDirUriTest.ToString(); int64_t offset = 3; - int64_t maxCount = 3; - std::vector fileInfoVec; + SharedMemoryInfo memInfo; + int result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); - int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + result = g_fah->ScanFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_2); + EXPECT_EQ(memInfo.Size(), FILE_COUNT_2); + FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo); } /** @@ -3864,12 +3870,14 @@ static void ScanFileFilter3(Uri newDirUriTest, const double &time) FileInfo fileInfo; fileInfo.uri = newDirUriTest.ToString(); int64_t offset = 0; - int64_t maxCount = 1000; - std::vector fileInfoVec; + SharedMemoryInfo memInfo; + int result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); FileFilter filter({}, {}, {}, -1, time, false, true); - int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + result = g_fah->ScanFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_3); + EXPECT_EQ(memInfo.Size(), FILE_COUNT_3); + FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo); } /** @@ -3909,12 +3917,14 @@ static void ScanFileFilter4(Uri newDirUriTest) FileInfo fileInfo; fileInfo.uri = newDirUriTest.ToString(); int64_t offset = 0; - int64_t maxCount = 1000; - std::vector fileInfoVec; FileFilter filter; - int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + SharedMemoryInfo memInfo; + int result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); + result = g_fah->ScanFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); + EXPECT_EQ(memInfo.Size(), FILE_COUNT_5); + FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo); } /** @@ -3954,12 +3964,14 @@ static void ScanFileFilter5(Uri newDirUriTest) FileInfo fileInfo; fileInfo.uri = newDirUriTest.ToString(); int64_t offset = 0; - int64_t maxCount = 1000; - std::vector fileInfoVec; FileFilter filter({".txt", ".docx"}, {"测试.txt", "测试.docx"}, {}, -1, -1, false, true); - int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + SharedMemoryInfo memInfo; + int result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); + result = g_fah->ScanFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + EXPECT_EQ(memInfo.Size(), FILE_COUNT_4); + FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo); } /** @@ -4168,8 +4180,8 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_GetFileInfoFromUri_0000, int result = g_fah->GetRoots(info); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); SharedMemoryInfo memInfo; - result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); for (size_t i = 0; i < info.size(); i++) { Uri parentUri(info[i].uri); FileInfo fileinfo; @@ -4207,8 +4219,8 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_GetFileInfoFromUri_0001, int result = g_fah->GetRoots(info); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); SharedMemoryInfo memInfo; - result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); for (size_t i = 0; i < info.size(); i++) { Uri parentUri(info[i].uri); Uri newDirUriTest(""); @@ -4253,8 +4265,8 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_GetFileInfoFromUri_0002, int result = g_fah->GetRoots(info); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); SharedMemoryInfo memInfo; - result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); for (size_t i = 0; i < info.size(); i++) { Uri parentUri(info[i].uri); Uri newDirUriTest(""); @@ -4397,8 +4409,8 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_GetFileInfoFromUri_0006, int result = g_fah->GetRoots(info); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); SharedMemoryInfo memInfo; - result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); for (size_t i = 0; i < info.size(); i++) { Uri parentUri(info[i].uri); Uri newDirUriTest(""); @@ -4444,8 +4456,8 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_GetFileInfoFromUri_0007, int result = g_fah->GetRoots(info); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); SharedMemoryInfo memInfo; - result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, - memInfo); + result = + FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, memInfo); for (size_t i = 0; i < info.size(); i++) { Uri parentUri(info[i].uri); Uri newDirUriTest(""); @@ -4735,7 +4747,6 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_GetConnectInfo_0000, test GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_GetConnectInfo_0000"; } - /** * @tc.number: user_file_service_external_file_access_GetProxyByUri_0000 * @tc.name: external_file_access_GetProxyByUri_0000 diff --git a/test/unittest/file_access_ext_stub_impl_test.cpp b/test/unittest/file_access_ext_stub_impl_test.cpp index cbf8b89630ffaca8d81a7e282e0170b8f5cf935d..76affeb0e0d4e45c3c77836352efc6d13a17b70e 100644 --- a/test/unittest/file_access_ext_stub_impl_test.cpp +++ b/test/unittest/file_access_ext_stub_impl_test.cpp @@ -562,12 +562,14 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_ScanFile_0000, tes try { FileInfo fileInfo; int64_t offset = 0; - int64_t maxCount = 0; const FileFilter filter; - vector fileInfoVec; + SharedMemoryInfo memInfo; + int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, + memInfo); FileAccessExtStubImpl impl(nullptr, nullptr); - int result = impl.ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + result = impl.ScanFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, E_IPCS); + FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo); } catch (...) { GTEST_LOG_(ERROR) << "FileAccessExtStubImplTest occurs an exception."; } @@ -591,12 +593,14 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_ScanFile_0001, tes FileInfo fileInfo; int64_t offset = 0; - int64_t maxCount = 0; const FileFilter filter; - vector fileInfoVec; + SharedMemoryInfo memInfo; + int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB, + memInfo); FileAccessExtStubImpl impl(ability, nullptr); - int result = impl.ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + result = impl.ScanFile(fileInfo, offset, filter, memInfo); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo); } catch (...) { GTEST_LOG_(ERROR) << "FileAccessExtStubImplTest occurs an exception."; } @@ -1058,4 +1062,4 @@ HWTEST_F(FileAccessExtStubImplTest, file_access_ext_stub_impl_MoveFile_0001, tes } GTEST_LOG_(INFO) << "FileAccessExtStubImplTest-end file_access_ext_stub_impl_MoveFile_0001"; } -} \ No newline at end of file +}