From 8d352101c7d6f558d493e28e78008133a5e38ce7 Mon Sep 17 00:00:00 2001 From: "zhangkaixiang5@huawei.com" Date: Sun, 15 Jan 2023 10:50:20 +0800 Subject: [PATCH] Add GetModeStrFromFlags Interface. Signed-off-by: zhangkaixiang5@huawei.com --- interfaces/kits/js/src/mod_fs/common_func.cpp | 16 ++++++++++++++++ interfaces/kits/js/src/mod_fs/common_func.h | 1 + .../kits/js/src/mod_fs/properties/open.cpp | 8 ++++---- interfaces/kits/js/src/mod_fs/properties/open.h | 1 - 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/interfaces/kits/js/src/mod_fs/common_func.cpp b/interfaces/kits/js/src/mod_fs/common_func.cpp index b02dc3d61..6ba4a4c17 100644 --- a/interfaces/kits/js/src/mod_fs/common_func.cpp +++ b/interfaces/kits/js/src/mod_fs/common_func.cpp @@ -254,6 +254,22 @@ tuple, void *, int64_t, bool, int64_t> CommonFunc::GetW } return { true, move(bufferGuard), buf, retLen, hasPos, retPos }; } + +string CommonFunc::GetModeFromFlags(int flags) +{ + static string RDONLY = "r"; + static string WRONLY = "w"; + static string APPEND = "a"; + static string TRUNC = "t"; + string mode = RDONLY; + mode += (((flags & O_RDWR) == O_RDWR) ? WRONLY : ""); + mode = (((flags & O_WRONLY) == O_WRONLY) ? WRONLY : mode); + if (mode != RDONLY) { + mode += ((flags & O_TRUNC) ? TRUNC : ""); + mode += ((flags & O_APPEND) ? APPEND : ""); + } + return mode; +} } // namespace ModuleFileIO } // namespace FileManagement } // namespace OHOS diff --git a/interfaces/kits/js/src/mod_fs/common_func.h b/interfaces/kits/js/src/mod_fs/common_func.h index 0fdd7ccd5..48697a748 100644 --- a/interfaces/kits/js/src/mod_fs/common_func.h +++ b/interfaces/kits/js/src/mod_fs/common_func.h @@ -54,6 +54,7 @@ struct CommonFunc { static std::tuple, std::unique_ptr> GetCopyPathArg(napi_env env, napi_value srcPath, napi_value dstPath); + static std::string GetModeFromFlags(int flags); }; } // namespace ModuleFileIO } // namespace FileManagement diff --git a/interfaces/kits/js/src/mod_fs/properties/open.cpp b/interfaces/kits/js/src/mod_fs/properties/open.cpp index ff16921a0..f5110b3a1 100644 --- a/interfaces/kits/js/src/mod_fs/properties/open.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/open.cpp @@ -78,7 +78,7 @@ static NVal InstantiateFile(napi_env env, int fd, string pathOrUri, bool isUri) return { env, objFile }; } -static int OpenFileByDatashare(napi_env env, napi_value argv, string path) +static int OpenFileByDatashare(napi_env env, napi_value argv, string path, int flags) { std::shared_ptr dataShareHelper = nullptr; int fd = -1; @@ -89,7 +89,7 @@ static int OpenFileByDatashare(napi_env env, napi_value argv, string path) dataShareHelper = DataShare::DataShareHelper::Creator(remote->AsObject(), MEDIALIBRARY_DATA_URI); Uri uri(path); - fd = dataShareHelper->OpenFile(uri, MEDIA_FILEMODE_READONLY); + fd = dataShareHelper->OpenFile(uri, CommonFunc::GetModeFromFlags(flags)); return fd; } @@ -113,7 +113,7 @@ napi_value Open::Sync(napi_env env, napi_callback_info info) return nullptr; } if (DistributedFS::ModuleRemoteUri::RemoteUri::IsMediaUri(path.get())) { - auto fd = OpenFileByDatashare(env, funcArg[NARG_POS::FIRST], path.get()); + auto fd = OpenFileByDatashare(env, funcArg[NARG_POS::FIRST], path.get(), mode); if (fd >= 0) { auto file = InstantiateFile(env, fd, path.get(), true).val_; return file; @@ -163,7 +163,7 @@ napi_value Open::Async(napi_env env, napi_callback_info info) auto argv = funcArg[NARG_POS::FIRST]; auto cbExec = [arg, argv, path = string(path.get()), mode = mode, env = env]() -> NError { if (DistributedFS::ModuleRemoteUri::RemoteUri::IsMediaUri(path)) { - auto fd = OpenFileByDatashare(env, argv, path); + auto fd = OpenFileByDatashare(env, argv, path, mode); if (fd >= 0) { arg->fd = fd; arg->path = ""; diff --git a/interfaces/kits/js/src/mod_fs/properties/open.h b/interfaces/kits/js/src/mod_fs/properties/open.h index 8bf564bbb..4103e5408 100644 --- a/interfaces/kits/js/src/mod_fs/properties/open.h +++ b/interfaces/kits/js/src/mod_fs/properties/open.h @@ -38,7 +38,6 @@ public: const std::string PROCEDURE_OPEN_NAME = "FileIOOpen"; const std::string MEDIALIBRARY_DATA_URI = "datashare:///media"; -const std::string MEDIA_FILEMODE_READONLY = "r"; } // namespace ModuleFileIO } // namespace FileManagement } // namespace OHOS -- Gitee