From 770ca36459c8ef5b257fcaefe0a4a059551dab00 Mon Sep 17 00:00:00 2001 From: liuhaotian Date: Fri, 27 Oct 2023 06:41:06 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B9=B6=E5=8F=91=E5=9C=BA?= =?UTF-8?q?=E6=99=AF=E4=B8=8B=E6=96=87=E4=BB=B6=E6=8E=88=E6=9D=83=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=AF=BC=E8=87=B4=E6=96=87=E4=BB=B6=E5=8F=98=E6=9B=B4?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liuhaotian Change-Id: I01dbc994af3701bfa9830bee06417a012500b415 --- .../native/file_share/include/file_share.h | 22 +++++++++---------- .../native/file_share/src/file_share.cpp | 21 +++++++++++++----- .../file_share_native/file_share_test.cpp | 20 ++++++++--------- .../file_uri_native/file_uri_test.cpp | 4 ++-- 4 files changed, 38 insertions(+), 29 deletions(-) diff --git a/interfaces/innerkits/native/file_share/include/file_share.h b/interfaces/innerkits/native/file_share/include/file_share.h index be137e73d..b6baef1c3 100644 --- a/interfaces/innerkits/native/file_share/include/file_share.h +++ b/interfaces/innerkits/native/file_share/include/file_share.h @@ -23,19 +23,17 @@ namespace OHOS { namespace AppFileService { using namespace std; +class FileShare { +private: + static mutex mapMutex_; -#ifdef __cplusplus -#if __cplusplus -extern "C" { -#endif -#endif /* End of #ifdef __cplusplus */ - int32_t CreateShareFile(const vector &uriList, uint32_t tokenId, uint32_t flag, vector &retList); - int32_t DeleteShareFile(uint32_t tokenId, const vector &uriList); -#ifdef __cplusplus -#if __cplusplus -} -#endif -#endif /* End of #ifdef __cplusplus */ +public: + static int32_t CreateShareFile(const vector &uriList, + uint32_t tokenId, + uint32_t flag, + vector &retList); + static int32_t DeleteShareFile(uint32_t tokenId, const vector &uriList); +}; } // namespace AppFileService } // namespace OHOS diff --git a/interfaces/innerkits/native/file_share/src/file_share.cpp b/interfaces/innerkits/native/file_share/src/file_share.cpp index 36835e53f..4962f79c3 100644 --- a/interfaces/innerkits/native/file_share/src/file_share.cpp +++ b/interfaces/innerkits/native/file_share/src/file_share.cpp @@ -61,6 +61,8 @@ struct FileShareInfo { ShareFileType type_; }; +mutex FileShare::mapMutex_; + static int32_t GetTargetInfo(uint32_t tokenId, string &bundleName, string ¤tUid) { Security::AccessToken::HapTokenInfo hapInfo; @@ -181,7 +183,9 @@ static void DeleteExistShareFile(const string &path) if (umount2(path.c_str(), MNT_DETACH) != 0) { LOGE("Umount failed with %{public}d", errno); } - remove(path.c_str()); + if (remove(path.c_str()) != 0) { + LOGE("DeleteExistShareFile, remove failed with %{public}d", errno); + } } } @@ -196,7 +200,9 @@ static void DelSharePath(const string &delPath) if (umount2(delPath.c_str(), MNT_DETACH) != 0) { LOGE("DelSharePath, umount failed with %{public}d", errno); } - remove(delPath.c_str()); + if (remove(delPath.c_str()) != 0) { + LOGE("DelSharePath, remove failed with %{public}d", errno); + } } } @@ -270,7 +276,7 @@ static int32_t CreateSingleShareFile(const string &uri, uint32_t tokenId, uint32 } for (size_t i = 0; i < info.sharePath_.size(); i++) { - if ((ret = creat(info.sharePath_[i].c_str(), FILE_MODE)) < 0) { + if ((ret = open(info.sharePath_[i].c_str(), O_RDONLY | O_CREAT)) < 0) { LOGE("Create file failed with %{public}d", errno); return -errno; } @@ -287,8 +293,12 @@ static int32_t CreateSingleShareFile(const string &uri, uint32_t tokenId, uint32 return 0; } -int32_t CreateShareFile(const vector &uriList, uint32_t tokenId, uint32_t flag, vector &retList) +int32_t FileShare::CreateShareFile(const vector &uriList, + uint32_t tokenId, + uint32_t flag, + vector &retList) { + lock_guard lock(mapMutex_); FileShareInfo info; int32_t ret = GetTargetInfo(tokenId, info.targetBundleName_, info.currentUid_); if (ret != 0) { @@ -308,8 +318,9 @@ int32_t CreateShareFile(const vector &uriList, uint32_t tokenId, uint32_ return ret; } -int32_t DeleteShareFile(uint32_t tokenId, const vector &uriList) +int32_t FileShare::DeleteShareFile(uint32_t tokenId, const vector &uriList) { + lock_guard lock(mapMutex_); string bundleName, currentUid; int32_t ret = GetTargetInfo(tokenId, bundleName, currentUid); if (ret != 0) { diff --git a/test/unittest/file_share_native/file_share_test.cpp b/test/unittest/file_share_native/file_share_test.cpp index bfac87515..03b086963 100644 --- a/test/unittest/file_share_native/file_share_test.cpp +++ b/test/unittest/file_share_native/file_share_test.cpp @@ -69,7 +69,7 @@ namespace { int32_t flag = 3; vector uriList(1, uri); vector retList; - int32_t ret = CreateShareFile(uriList, tokenId, flag, retList); + int32_t ret = FileShare::CreateShareFile(uriList, tokenId, flag, retList); EXPECT_EQ(ret, E_OK); GTEST_LOG_(INFO) << "FileShareTest-end File_share_CreateShareFile_0000"; } @@ -100,7 +100,7 @@ namespace { int32_t flag = 3; vector uriList(1, uri); vector retList; - int32_t ret = CreateShareFile(uriList, tokenId, flag, retList); + int32_t ret = FileShare::CreateShareFile(uriList, tokenId, flag, retList); EXPECT_EQ(ret, -EINVAL); GTEST_LOG_(INFO) << "FileShareTest-end File_share_CreateShareFile_0001"; } @@ -128,7 +128,7 @@ namespace { int32_t flag = 3; vector uriList(1, uri); vector retList; - int32_t ret = CreateShareFile(uriList, tokenId, flag, retList); + int32_t ret = FileShare::CreateShareFile(uriList, tokenId, flag, retList); EXPECT_EQ(ret, E_INVALID_ARGUMENT); GTEST_LOG_(INFO) << "FileShareTest-end File_share_CreateShareFile_0002"; } @@ -158,7 +158,7 @@ namespace { int32_t flag = 3; vector uriList(1, uri); vector retList; - int32_t ret = CreateShareFile(uriList, tokenId, flag, retList); + int32_t ret = FileShare::CreateShareFile(uriList, tokenId, flag, retList); EXPECT_EQ(ret, -EINVAL); GTEST_LOG_(INFO) << "FileShareTest-end File_share_CreateShareFile_0003"; } @@ -188,7 +188,7 @@ namespace { int32_t flag = 4; vector uriList(1, uri); vector retList; - int32_t ret = CreateShareFile(uriList, tokenId, flag, retList); + int32_t ret = FileShare::CreateShareFile(uriList, tokenId, flag, retList); EXPECT_EQ(ret, -EINVAL); GTEST_LOG_(INFO) << "FileShareTest-end File_share_CreateShareFile_0004"; } @@ -212,7 +212,7 @@ namespace { string bundleNameA = "com.example.filesharea"; string uri = "file://" + bundleNameA + "/data/storage/el2/base/files/test.txt"; sharePathList.push_back(uri); - int32_t ret = DeleteShareFile(tokenId, sharePathList); + int32_t ret = FileShare::DeleteShareFile(tokenId, sharePathList); EXPECT_EQ(ret, E_OK); GTEST_LOG_(INFO) << "FileShareTest-end File_share_DeleteShareFile_0005"; } @@ -233,7 +233,7 @@ namespace { string bundleNameA = "com.example.filesharea"; string uri = "file://" + bundleNameA + "/data/storage/el2/base/files/test.txt"; sharePathList.push_back(uri); - int32_t ret = DeleteShareFile(tokenId, sharePathList); + int32_t ret = FileShare::DeleteShareFile(tokenId, sharePathList); EXPECT_EQ(ret, -EINVAL); GTEST_LOG_(INFO) << "FileShareTest-end File_share_DeleteShareFile_0006"; } @@ -263,13 +263,13 @@ namespace { int32_t flag = 3; vector uriList(1, uri); vector retList; - int32_t ret = CreateShareFile(uriList, tokenId, flag, retList); + int32_t ret = FileShare::CreateShareFile(uriList, tokenId, flag, retList); EXPECT_EQ(ret, E_OK); vector sharePathList; string uriErr = "file://" + bundleNameA + "/data/storage/el2/base/files/abc/../test.txt"; sharePathList.push_back(uriErr); - ret = DeleteShareFile(tokenId, sharePathList); + ret = FileShare::DeleteShareFile(tokenId, sharePathList); EXPECT_EQ(ret, E_OK); string sharePath = "/data/service/el2/" + to_string(uid) + "/share/" + bundleNameB + @@ -278,7 +278,7 @@ namespace { EXPECT_EQ(ret, E_OK); sharePathList.push_back(uri); - ret = DeleteShareFile(tokenId, sharePathList); + ret = FileShare::DeleteShareFile(tokenId, sharePathList); EXPECT_EQ(ret, E_OK); ret = access(sharePath.c_str(), F_OK); diff --git a/test/unittest/file_uri_native/file_uri_test.cpp b/test/unittest/file_uri_native/file_uri_test.cpp index be19bae39..e51ee15f3 100644 --- a/test/unittest/file_uri_native/file_uri_test.cpp +++ b/test/unittest/file_uri_native/file_uri_test.cpp @@ -179,7 +179,7 @@ namespace OHOS::AppFileService::ModuleFileUri { int32_t flag = 3; vector uriList(1, uri); vector retList; - int32_t ret = CreateShareFile(uriList, tokenId, flag, retList); + int32_t ret = FileShare::CreateShareFile(uriList, tokenId, flag, retList); EXPECT_EQ(ret, E_OK); string rltStr = PATH_SHARE + MODE_R + bundleB + actStr; @@ -189,7 +189,7 @@ namespace OHOS::AppFileService::ModuleFileUri { vector sharePathList; sharePathList.push_back(uri); - ret = DeleteShareFile(tokenId, sharePathList); + ret = FileShare::DeleteShareFile(tokenId, sharePathList); EXPECT_EQ(ret, E_OK); close(fd); GTEST_LOG_(INFO) << "FileUriTest-end File_uri_GetPath_0003"; -- Gitee