diff --git a/interfaces/innerkits/native/file_share/include/file_share.h b/interfaces/innerkits/native/file_share/include/file_share.h index be137e73d8731ebfc1a9eb96176791593e12ced2..b6baef1c3ee7d360f5b33e71d18d17e87222ebde 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 36835e53fe09406c1823a186e769bda51126ebda..4962f79c3bda0723db0946d4d1cea7d4acf70a24 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 bfac8751543b5c2e507df6bd090815585f5852c8..03b08696366a3927fed1175f6d7c7a1ed7423e90 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 be19bae39ee7d6bc138fd87df422cc20c723d189..e51ee15f3e9883156d9f070f060483c8d2addee1 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";