From 72faf53051c0a12e11d28fb5a8e01ebda307f3df Mon Sep 17 00:00:00 2001 From: shuaiguo991102 Date: Sat, 20 Jan 2024 15:00:15 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B6=85=E5=A4=A7=E5=87=BD=E6=95=B0=E6=95=B4?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: shuaiguo991102 Change-Id: I102966ae0f2e194dbfb20de721886b30f1792322 --- .../mod_fileio/class_dir/dir_n_exporter.cpp | 16 ++---- .../class_stream/stream_n_exporter.cpp | 56 ++++++------------- .../js/src/mod_fileio/properties/open.cpp | 26 +++------ .../js/src/mod_fileio/properties/open_v9.cpp | 36 ++++++------ .../mod_fileio/properties/prop_n_exporter.cpp | 33 ++++------- .../kits/js/src/mod_fs/properties/stat.cpp | 16 +++--- 6 files changed, 64 insertions(+), 119 deletions(-) diff --git a/interfaces/kits/js/src/mod_fileio/class_dir/dir_n_exporter.cpp b/interfaces/kits/js/src/mod_fileio/class_dir/dir_n_exporter.cpp index ed53fb3ea..5607e0909 100644 --- a/interfaces/kits/js/src/mod_fileio/class_dir/dir_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fileio/class_dir/dir_n_exporter.cpp @@ -177,19 +177,13 @@ napi_value DirNExporter::Read(napi_env env, napi_callback_info info) res = readdir(dir); if (res == nullptr && errno) { return UniError(errno); - } else if (res == nullptr) { - return UniError(ERRNO_NOERR); - } else if (string(res->d_name) == "." || string(res->d_name) == "..") { - continue; - } else { - if (EOK != memcpy_s(&tmpDirent, sizeof(dirent), res, res->d_reclen)) { - return UniError(errno); - } + } + if (res && string(res->d_name) == "." && string(res->d_name) == "..") { + if (EOK != memcpy_s(&tmpDirent, sizeof(dirent), res, res->d_reclen)) return UniError(errno); + arg->dirRes = tmpDirent; break; } - } while (true); - - arg->dirRes = tmpDirent; + } while (res || !errno); return UniError(ERRNO_NOERR); }; auto cbCompl = [arg](napi_env env, UniError err) -> NVal { diff --git a/interfaces/kits/js/src/mod_fileio/class_stream/stream_n_exporter.cpp b/interfaces/kits/js/src/mod_fileio/class_stream/stream_n_exporter.cpp index 611dcfc3d..4dcb322c0 100644 --- a/interfaces/kits/js/src/mod_fileio/class_stream/stream_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fileio/class_stream/stream_n_exporter.cpp @@ -158,14 +158,13 @@ napi_value StreamNExporter::Write(napi_env env, napi_callback_info info) } bool succ = false; - FILE *filp = nullptr; int64_t position = -1; auto streamEntity = NClass::GetEntityOf(env, funcArg.GetThisVar()); if (!streamEntity || !streamEntity->fp) { UniError(EBADF).ThrowErr(env, "Stream may has been closed"); return nullptr; } - filp = streamEntity->fp.get(); + FILE *filp = streamEntity->fp.get(); unique_ptr bufGuard = nullptr; void *buf = nullptr; @@ -183,17 +182,11 @@ napi_value StreamNExporter::Write(napi_env env, napi_callback_info info) return UniError(errno); } arg->actLen = fwrite(buf, 1, len, filp); - if ((arg->actLen == 0) && (arg->actLen != len)) { - return UniError(errno); - } - return UniError(ERRNO_NOERR); + return (arg->actLen == 0 && arg->actLen != len) ? UniError(errno) : UniError(ERRNO_NOERR); }; auto cbCompl = [arg](napi_env env, UniError err) -> NVal { - if (err) { - return { env, err.GetNapiErr(env) }; - } - return { NVal::CreateInt64(env, arg->actLen) }; + return err ? NVal(env, err.GetNapiErr(env)) : NVal::CreateInt64(env, arg->actLen); }; NVal thisVar(env, funcArg.GetThisVar()); @@ -225,43 +218,30 @@ napi_value StreamNExporter::Read(napi_env env, napi_callback_info info) UniError(EINVAL).ThrowErr(env, "Number of arguments unmatched"); return nullptr; } - - /* To get entity */ auto streamEntity = NClass::GetEntityOf(env, funcArg.GetThisVar()); if (!streamEntity || !streamEntity->fp) { UniError(EBADF).ThrowErr(env, "Stream may have been closed"); return nullptr; } - FILE *filp = nullptr; - filp = streamEntity->fp.get(); - - bool succ = false; - void *buf = nullptr; - size_t len = 0; - int64_t position = -1; - int64_t offset = 0; - tie(succ, buf, len, position, offset) = - CommonFunc::GetReadArg(env, funcArg[NARG_POS::FIRST], funcArg[NARG_POS::SECOND]); + FILE *filp = streamEntity->fp.get(); + auto readArgs = CommonFunc::GetReadArg(env, funcArg[NARG_POS::FIRST], funcArg[NARG_POS::SECOND]); + auto [succ, buf, len, position, offset] = readArgs; if (!succ) { return nullptr; } - auto arg = make_shared(NVal(env, funcArg[NARG_POS::FIRST])); - auto cbExec = [arg, buf, position, filp, len, offset](napi_env env) -> UniError { + auto cbExec = [arg, buf = buf, position = position, filp, len = len, offset = offset](napi_env env) -> UniError { if (position >= 0 && (fseek(filp, static_cast(position), SEEK_SET) == -1)) { - UniError(errno).ThrowErr(env); return UniError(errno); } size_t actLen = fread(buf, 1, len, filp); if ((actLen != len && !feof(filp)) || ferror(filp)) { return UniError(errno); - } else { - arg->lenRead = actLen; - arg->offset = offset; - return UniError(ERRNO_NOERR); } + arg->lenRead = actLen; + arg->offset = offset; + return UniError(ERRNO_NOERR); }; - auto cbCompl = [arg](napi_env env, UniError err) -> NVal { if (err) { return { env, err.GetNapiErr(env) }; @@ -274,17 +254,13 @@ napi_value StreamNExporter::Read(napi_env env, napi_callback_info info) }); return { obj }; }; - NVal thisVar(env, funcArg.GetThisVar()); - if (funcArg.GetArgc() == NARG_CNT::ONE || (funcArg.GetArgc() == NARG_CNT::TWO && - !NVal(env, funcArg[NARG_POS::SECOND]).TypeIs(napi_function))) { - return NAsyncWorkPromise(env, thisVar).Schedule("FileIOStreamRead", cbExec, cbCompl).val_; - } else { - NVal cb(env, funcArg[((funcArg.GetArgc() == NARG_CNT::TWO) ? NARG_POS::SECOND : NARG_POS::THIRD)]); - return NAsyncWorkCallback(env, thisVar, cb).Schedule("FileIOStreamRead", cbExec, cbCompl).val_; - } - - return NVal::CreateUndefined(env).val_; + size_t argc = funcArg.GetArgc(); + return (argc == NARG_CNT::ONE || (argc == NARG_CNT::TWO && + !NVal(env, funcArg[NARG_POS::SECOND]).TypeIs(napi_function))) ? + NAsyncWorkPromise(env, thisVar).Schedule("FileIOStreamRead", cbExec, cbCompl).val_ : + NAsyncWorkCallback(env, thisVar, NVal(env, funcArg[argc == NARG_CNT::TWO ? + NARG_POS::SECOND : NARG_POS::THIRD])).Schedule("FileIOStreamRead", cbExec, cbCompl).val_; } napi_value StreamNExporter::Close(napi_env env, napi_callback_info info) diff --git a/interfaces/kits/js/src/mod_fileio/properties/open.cpp b/interfaces/kits/js/src/mod_fileio/properties/open.cpp index 25d731c04..2d4a12e14 100644 --- a/interfaces/kits/js/src/mod_fileio/properties/open.cpp +++ b/interfaces/kits/js/src/mod_fileio/properties/open.cpp @@ -38,9 +38,7 @@ napi_value Open::Sync(napi_env env, napi_callback_info info) return nullptr; } - bool succ = false; - unique_ptr path = nullptr; - tie(succ, path, ignore) = NVal(env, funcArg[NARG_POS::FIRST]).ToUTF8String(); + auto[succ, path, ignore] = NVal(env, funcArg[NARG_POS::FIRST]).ToUTF8String(); if (!succ) { UniError(EINVAL).ThrowErr(env, "Invalid path"); return nullptr; @@ -78,11 +76,8 @@ napi_value Open::Sync(napi_env env, napi_callback_info info) } fd = open(path.get(), flags, mode); if (fd == -1) { - if (errno == ENAMETOOLONG) { - UniError(errno).ThrowErr(env, "Filename too long"); - return nullptr; - } - UniError(errno).ThrowErr(env); + UniError(errno == ENAMETOOLONG ? errno : EINVAL).ThrowErr(env, errno == ENAMETOOLONG ? + "Filename too long" : ""); return nullptr; } @@ -131,12 +126,9 @@ napi_value Open::Async(napi_env env, napi_callback_info info) } int32_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP; - if (argc >= NARG_CNT::THREE) { - tie(succ, mode) = NVal(env, funcArg[NARG_POS::THIRD]).ToInt32(mode); - if (!succ) { - UniError(EINVAL).ThrowErr(env, "Invalid mode"); - return nullptr; - } + if (argc >= NARG_CNT::THREE && !(tie(succ, mode) = NVal(env, funcArg[NARG_POS::THIRD]).ToInt32(mode), succ)) { + UniError(EINVAL).ThrowErr(env, "Invalid mode"); + return nullptr; } auto arg = make_shared(); @@ -146,10 +138,8 @@ napi_value Open::Async(napi_env env, napi_callback_info info) auto cbComplCallback = [arg](napi_env env, UniError err) -> NVal { if (err) { - if (err.GetErrno(ERR_CODE_SYSTEM_POSIX) == ENAMETOOLONG) { - return {env, err.GetNapiErr(env, "Filename too long")}; - } - return { env, err.GetNapiErr(env) }; + auto errMsg = err.GetErrno(ERR_CODE_SYSTEM_POSIX) == ENAMETOOLONG ? "Filename too long" : ""; + return { env, err.GetNapiErr(env, errMsg) }; } return { NVal::CreateInt64(env, *arg) }; }; diff --git a/interfaces/kits/js/src/mod_fileio/properties/open_v9.cpp b/interfaces/kits/js/src/mod_fileio/properties/open_v9.cpp index 0ccb51d75..6dbc32d30 100644 --- a/interfaces/kits/js/src/mod_fileio/properties/open_v9.cpp +++ b/interfaces/kits/js/src/mod_fileio/properties/open_v9.cpp @@ -134,31 +134,36 @@ struct AsyncOpenFileArg { string uri; }; +bool CheckAndThrowError(napi_env env, bool condition, napi_status expectedError) +{ + if (!condition) { + UniError(expectedError, true).ThrowErr(env); + return false; + } + return true; +} + napi_value OpenV9::Async(napi_env env, napi_callback_info info) { NFuncArg funcArg(env, info); - if (!funcArg.InitArgs(NARG_CNT::ONE, NARG_CNT::THREE)) { - UniError(EINVAL, true).ThrowErr(env); + if (!CheckAndThrowError(env, funcArg.InitArgs(NARG_CNT::ONE, NARG_CNT::THREE), EINVAL)) { return nullptr; } auto [succPath, path, ignore] = NVal(env, funcArg[NARG_POS::FIRST]).ToUTF8String(); - if (!succPath) { - UniError(EINVAL, true).ThrowErr(env); + if (!CheckAndThrowError(env, succPath, EINVAL)) { return nullptr; } auto [succMode, mode] = GetJsFlags(env, funcArg); - if (!succMode) { + if (!CheckAndThrowError(env, succMode, EINVAL)) { return nullptr; } auto arg = make_shared(); - auto argv = funcArg[NARG_POS::FIRST]; - auto cbExec = [arg, argv, path = string(path.get()), mode = mode](napi_env env) -> UniError { + auto cbExec = [arg, path = string(path.get()), mode = mode](napi_env env) -> UniError { if (DistributedFS::ModuleRemoteUri::RemoteUri::IsMediaUri(path)) { - auto fd = OpenFileByDatashare(env, argv, path); + auto fd = OpenFileByDatashare(env, funcArg[NARG_POS::FIRST], path); if (fd >= 0) { arg->fd = fd; arg->path = path; - arg->uri = ""; return UniError(ERRNO_NOERR); } return UniError(-1, true); @@ -173,23 +178,18 @@ napi_value OpenV9::Async(napi_env env, napi_callback_info info) } arg->fd = open_req.result; arg->path = path; - arg->uri = ""; uv_fs_req_cleanup(&open_req); return UniError(ERRNO_NOERR); }; auto cbCompl = [arg](napi_env env, UniError err) -> NVal { - if (err) { - return { env, err.GetNapiErr(env) }; - } - return InstantiateFile(env, arg->fd, arg->path); + return err ? NVal(env, err.GetNapiErr(env)) : InstantiateFile(env, arg->fd, arg->path); }; NVal thisVar(env, funcArg.GetThisVar()); - if (funcArg.GetArgc() == NARG_CNT::ONE || (funcArg.GetArgc() == NARG_CNT::TWO && - NVal(env, funcArg[NARG_POS::SECOND]).TypeIs(napi_number))) { + size_t argc = funcArg.GetArgc(); + if (argc == NARG_CNT::ONE || (argc == NARG_CNT::TWO && NVal(env, funcArg[NARG_POS::SECOND]).TypeIs(napi_number))) { return NAsyncWorkPromise(env, thisVar).Schedule(PROCEDURE_OPEN_NAME, cbExec, cbCompl).val_; } else { - int cbIdx = ((funcArg.GetArgc() == NARG_CNT::THREE) ? NARG_POS::THIRD : NARG_POS::SECOND); - NVal cb(env, funcArg[cbIdx]); + NVal cb(env, funcArg[argc == NARG_CNT::THREE ? NARG_POS::THIRD : NARG_POS::SECOND]); return NAsyncWorkCallback(env, thisVar, cb).Schedule(PROCEDURE_OPEN_NAME, cbExec, cbCompl).val_; } } diff --git a/interfaces/kits/js/src/mod_fileio/properties/prop_n_exporter.cpp b/interfaces/kits/js/src/mod_fileio/properties/prop_n_exporter.cpp index 15cfe0a8d..1982c3477 100644 --- a/interfaces/kits/js/src/mod_fileio/properties/prop_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fileio/properties/prop_n_exporter.cpp @@ -392,40 +392,27 @@ napi_value PropNExporter::Read(napi_env env, napi_callback_info info) UniError(EINVAL).ThrowErr(env, "Number of arguments unmatched"); return nullptr; } - - bool succ = false; - void *buf = nullptr; - size_t len = 0; - int fd = -1; - int64_t pos = -1; - int64_t offset = 0; - tie(succ, fd) = NVal(env, funcArg[NARG_POS::FIRST]).ToInt32(); - if (!succ || fd < 0) { + auto[succFd, fd] = NVal(env, funcArg[NARG_POS::FIRST]).ToInt32(); + if (!succFd || fd < 0) { UniError(EINVAL).ThrowErr(env, "Invalid fd"); return nullptr; } - tie(succ, buf, len, pos, offset) = + auto[succReadArg, buf, len, pos, offset] = CommonFunc::GetReadArg(env, funcArg[NARG_POS::SECOND], funcArg[NARG_POS::THIRD]); - if (!succ) { + if (!succReadArg) { return nullptr; } auto arg = make_shared(NVal(env, funcArg[NARG_POS::SECOND])); - auto cbExec = [arg, buf, len, fd, pos, offset](napi_env env) -> UniError { - ssize_t actLen = 0; - if (pos >= 0) { - actLen = pread(fd, buf, len, pos); - } else { - actLen = read(fd, buf, len); - } + auto cbExec = [arg, buf = buf, len = len, fd = fd, pos = pos, offset = offset](napi_env env) -> UniError { + ssize_t actLen = (pos >= 0) ? pread(fd, buf, len, pos) : read(fd, buf, len); if (actLen == -1) { return UniError(errno); - } else { + } arg->lenRead = actLen; arg->offset = offset; return UniError(ERRNO_NOERR); - } }; auto cbCompl = [arg](napi_env env, UniError err) -> NVal { @@ -442,12 +429,12 @@ napi_value PropNExporter::Read(napi_env env, napi_callback_info info) }; NVal thisVar(env, funcArg.GetThisVar()); - if (funcArg.GetArgc() == NARG_CNT::TWO || (funcArg.GetArgc() == NARG_CNT::THREE && + size_t argc = funcArg.GetArgc(); + if (argc == NARG_CNT::TWO || (argc == NARG_CNT::THREE && !NVal(env, funcArg[NARG_POS::THIRD]).TypeIs(napi_function))) { return NAsyncWorkPromise(env, thisVar).Schedule("FileIORead", cbExec, cbCompl).val_; } else { - int cbIdx = ((funcArg.GetArgc() == NARG_CNT::THREE) ? NARG_POS::THIRD : NARG_POS::FOURTH); - NVal cb(env, funcArg[cbIdx]); + NVal cb(env, funcArg[argc == NARG_CNT::THREE ? NARG_POS::THIRD : NARG_POS::FOURTH]); return NAsyncWorkCallback(env, thisVar, cb).Schedule("FileIORead", cbExec, cbCompl).val_; } } diff --git a/interfaces/kits/js/src/mod_fs/properties/stat.cpp b/interfaces/kits/js/src/mod_fs/properties/stat.cpp index 0bd0b8451..95e9d8be2 100644 --- a/interfaces/kits/js/src/mod_fs/properties/stat.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/stat.cpp @@ -122,6 +122,7 @@ napi_value Stat::Async(napi_env env, napi_callback_info info) if (!succ) { return nullptr; } + auto arg = CreateSharedPtr(); if (arg == nullptr) { HILOGE("Failed to request heap memory."); @@ -150,19 +151,16 @@ napi_value Stat::Async(napi_env env, napi_callback_info info) return { env, err.GetNapiErr(env) }; } #if !defined(WIN_PLATFORM) && !defined(IOS_PLATFORM) - auto stat = CommonFunc::InstantiateStat(env, arg->stat_, arg->fileInfo_); + return CommonFunc::InstantiateStat(env, arg->stat_, arg->fileInfo_); #else - auto stat = CommonFunc::InstantiateStat(env, arg->stat_); + return CommonFunc::InstantiateStat(env, arg->stat_); #endif - return stat; }; NVal thisVar(env, funcArg.GetThisVar()); - if (funcArg.GetArgc() == NARG_CNT::ONE) { - return NAsyncWorkPromise(env, thisVar).Schedule(PROCEDURE_STAT_NAME, cbExec, cbCompl).val_; - } else { - NVal cb(env, funcArg[NARG_POS::SECOND]); - return NAsyncWorkCallback(env, thisVar, cb).Schedule(PROCEDURE_STAT_NAME, cbExec, cbCompl).val_; - } + NVal callbackVal(env, funcArg[SECOND]); + return (funcArg.GetArgc() == NARG_CNT::ONE) ? + NAsyncWorkPromise(env, thisVar).Schedule(PROCEDURE_STAT_NAME, cbExec, cbCompl).val_ : + NAsyncWorkCallback(env, thisVar, callbackVal).Schedule(PROCEDURE_STAT_NAME, cbExec, cbCompl).val_; } } // namespace OHOS::FileManagement::ModuleFileIO \ No newline at end of file -- Gitee