From cb6f6b9521778a7a5b9b4830d0f26bd2432cc223 Mon Sep 17 00:00:00 2001 From: hunili Date: Wed, 23 Jul 2025 15:48:48 +0800 Subject: [PATCH] =?UTF-8?q?[Bug]:=20=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=20https://gitee.com/openharmony/filemanageme?= =?UTF-8?q?nt=5Fuser=5Ffile=5Fservice/issues/ICOANR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hunili --- .../file_access/IFileAccessExtBase.idl | 2 + .../include/file_access_ext_stub_impl.h | 1 + .../src/file_access_ext_stub_impl.cpp | 39 +++++++++++++++++++ .../file_access/src/file_access_helper.cpp | 1 + 4 files changed, 43 insertions(+) diff --git a/interfaces/inner_api/file_access/IFileAccessExtBase.idl b/interfaces/inner_api/file_access/IFileAccessExtBase.idl index e90371e2..ee80fe6c 100644 --- a/interfaces/inner_api/file_access/IFileAccessExtBase.idl +++ b/interfaces/inner_api/file_access/IFileAccessExtBase.idl @@ -19,6 +19,8 @@ sequenceable FileFilter..OHOS.FileAccessFwk.FileFilter; sequenceable FileInfoSharedMemory..OHOS.FileAccessFwk.SharedMemoryInfo; sequenceable FileAccessExtensionInfo..OHOS.FileAccessFwk.RootInfo; sequenceable UriExt..OHOS.FileAccessFwk.Urie; + +option_parcel_hooks on; interface OHOS.FileAccessFwk.IFileAccessExtBase { [ipccode 1] void OpenFile([in] Urie uri, [in] int flags, [out] FileDescriptor fd); [ipccode 2] void CreateFile([in] Urie parent, [in] String displayName, [out] Urie newFile); 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 121fe0b9..b51ed4d0 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 @@ -60,6 +60,7 @@ public: int MoveItem(const Urie &sourceFile, const Urie &targetParent, std::vector &moveResult, int32_t& retCode, bool force = false) override; int MoveFile(const Urie &sourceFile, const Urie &targetParent, const std::string &fileName, Urie &newFile) override; + int CallbackParcel(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) override; private: std::shared_ptr GetOwner(); std::shared_ptr extension_; 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 e484017f..8c328d73 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 @@ -453,5 +453,44 @@ int FileAccessExtStubImpl::MoveFile(const Urie &sourceFile, const Urie &targetPa newFile = Urie(newFileConvert.ToString()); return ret; } + +int FileAccessExtStubImpl::CallbackParcel(uint32_t code, + MessageParcel &data, MessageParcel &reply, MessageOption &option) +{ + if (code == static_cast(IFileAccessExtBaseIpcCode::COMMAND_LIST_FILE)) { + std::unique_ptr fileInfo(data.ReadParcelable()); + if (!fileInfo) { + HILOG_ERROR("Read FileInfo failed!"); + return ERR_INVALID_DATA; + } + int64_t offset = data.ReadInt64(); + std::unique_ptr filter(data.ReadParcelable()); + if (!filter) { + HILOG_ERROR("Read FileFilter failed!"); + return ERR_INVALID_DATA; + } + std::unique_ptr memInfo(data.ReadParcelable()); + if (!memInfo) { + HILOG_ERROR("Read SharedMemoryInfo failed!"); + return ERR_INVALID_DATA; + } + ErrCode errCode = ListFile(*fileInfo, offset, *filter, *memInfo); + if (!reply.WriteInt32(errCode)) { + HILOG_ERROR("Write errCode failed!"); + SharedMemoryOperation::DestroySharedMemory(*memInfo); + return ERR_INVALID_DATA; + } + if (SUCCEEDED(errCode)) { + if (!reply.WriteParcelable(memInfo.get())) { + HILOG_ERROR("Write memInfo failed!"); + SharedMemoryOperation::DestroySharedMemory(*memInfo); + return ERR_INVALID_DATA; + } + } + SharedMemoryOperation::DestroySharedMemory(*memInfo); + return ERR_INVALID_VALUE; + } + return ERR_NONE; +} } // namespace FileAccessFwk } // namespace OHOS 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 58aa7a9e..27a33df3 100644 --- a/interfaces/inner_api/file_access/src/file_access_helper.cpp +++ b/interfaces/inner_api/file_access/src/file_access_helper.cpp @@ -826,6 +826,7 @@ int FileAccessHelper::ListFile(const FileInfo &fileInfo, const int64_t offset, c memInfo.memHead = memInfoTemp.memHead; memInfo.memTail = memInfoTemp.memTail; memInfo.dataPtr = memInfoTemp.dataPtr; + FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfoTemp); return ERR_OK; } -- Gitee