From 06c9b51f9beaa63c8159b4de7126954000089608 Mon Sep 17 00:00:00 2001 From: zhuhongtao666 Date: Wed, 12 Oct 2022 21:11:26 +0800 Subject: [PATCH] bugfix_fileio_read_file_comf Signed-off-by: zhuhongtao666 --- .../mod_fileio/class_file/file_n_exporter.cpp | 31 +---------- .../mod_fileio/class_file/file_n_exporter.h | 2 - .../kits/js/src/mod_fileio/common_func.cpp | 52 +++++++++++++------ .../js/src/mod_fileio/properties/open_v9.cpp | 4 +- .../properties/prop_n_exporter_v9.cpp | 4 +- .../securitylabel_n_exporter.cpp | 4 +- 6 files changed, 44 insertions(+), 53 deletions(-) diff --git a/interfaces/kits/js/src/mod_fileio/class_file/file_n_exporter.cpp b/interfaces/kits/js/src/mod_fileio/class_file/file_n_exporter.cpp index cc805b835..76f512334 100644 --- a/interfaces/kits/js/src/mod_fileio/class_file/file_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fileio/class_file/file_n_exporter.cpp @@ -62,34 +62,6 @@ napi_value FileNExporter::GetFD(napi_env env, napi_callback_info info) return NVal::CreateInt32(env, rafEntity->fd_.get()->GetFD()).val_; } -napi_value FileNExporter::GetPath(napi_env env, napi_callback_info info) -{ - NFuncArg funcArg(env, info); - if (!funcArg.InitArgs(NARG_CNT::ZERO)) { - UniError(EINVAL).ThrowErr(env); - return nullptr; - } - auto rafEntity = GetFileEntity(env, funcArg.GetThisVar()); - if (!rafEntity) { - return nullptr; - } - return NVal::CreateUTF8String(env, rafEntity->path_).val_; -} - -napi_value FileNExporter::GetUri(napi_env env, napi_callback_info info) -{ - NFuncArg funcArg(env, info); - if (!funcArg.InitArgs(NARG_CNT::ZERO)) { - UniError(EINVAL).ThrowErr(env); - return nullptr; - } - auto rafEntity = GetFileEntity(env, funcArg.GetThisVar()); - if (!rafEntity) { - return nullptr; - } - return NVal::CreateUTF8String(env, rafEntity->uri_).val_; -} - napi_value FileNExporter::Constructor(napi_env env, napi_callback_info info) { NFuncArg funcArg(env, info); @@ -109,8 +81,7 @@ napi_value FileNExporter::Constructor(napi_env env, napi_callback_info info) bool FileNExporter::Export() { vector props = { - NVal::DeclareNapiGetter("fd", GetFD), - NVal::DeclareNapiGetter("path", GetPath), + NVal::DeclareNapiGetter("fd", GetFD) }; string className = GetClassName(); diff --git a/interfaces/kits/js/src/mod_fileio/class_file/file_n_exporter.h b/interfaces/kits/js/src/mod_fileio/class_file/file_n_exporter.h index ffa96ed6d..1c898cdef 100644 --- a/interfaces/kits/js/src/mod_fileio/class_file/file_n_exporter.h +++ b/interfaces/kits/js/src/mod_fileio/class_file/file_n_exporter.h @@ -31,8 +31,6 @@ public: static napi_value Constructor(napi_env env, napi_callback_info cbinfo); static napi_value GetFD(napi_env env, napi_callback_info cbinfo); - static napi_value GetPath(napi_env env, napi_callback_info cbinfo); - static napi_value GetUri(napi_env env, napi_callback_info cbinfo); FileNExporter(napi_env env, napi_value exports); ~FileNExporter() override; diff --git a/interfaces/kits/js/src/mod_fileio/common_func.cpp b/interfaces/kits/js/src/mod_fileio/common_func.cpp index 1d098f6f1..71f72ef48 100644 --- a/interfaces/kits/js/src/mod_fileio/common_func.cpp +++ b/interfaces/kits/js/src/mod_fileio/common_func.cpp @@ -40,12 +40,10 @@ static tuple GetActualBuf(napi_env env, void *rawBuf, int64_t if (op.HasProp("offset")) { tie(succ, opOffset) = op.GetProp("offset").ToInt64(); if (!succ || opOffset < 0) { - HILOGE("Invalid option.offset, positive integer is desired"); - UniError(EINVAL).ThrowErr(env); + UniError(EINVAL).ThrowErr(env, "Invalid option.offset, positive integer is desired"); return { false, nullptr, opOffset }; } else if (opOffset > bufLen) { - HILOGE("Invalid option.offset, buffer limit exceeded"); - UniError(EINVAL).ThrowErr(env); + UniError(EINVAL).ThrowErr(env, "Invalid option.offset, buffer limit exceeded"); return { false, nullptr, opOffset }; } else { realBuf = static_cast(rawBuf) + opOffset; @@ -62,6 +60,33 @@ static tuple GetActualLen(napi_env env, int64_t bufLen, int64_t bu bool succ = false; int64_t retLen; + if (op.HasProp("length")) { + int64_t opLength; + tie(succ, opLength) = op.GetProp("length").ToInt64(); + if (!succ) { + UniError(EINVAL).ThrowErr(env, "Invalid option.length, expect integer"); + return { false, 0 }; + } + if (opLength < 0) { + retLen = bufLen - bufOff; + } else if (opLength > bufLen - bufOff) { + UniError(EINVAL).ThrowErr(env, "Invalid option.length, buffer limit exceeded"); + return { false, 0 }; + } else { + retLen = opLength; + } + } else { + retLen = bufLen - bufOff; + } + + return { true, retLen }; +} + +static tuple GetActualLenV9(napi_env env, int64_t bufLen, int64_t bufOff, NVal op) +{ + bool succ = false; + int64_t retLen; + if (op.HasProp("length")) { int64_t opLength; tie(succ, opLength) = op.GetProp("length").ToInt64(); @@ -72,7 +97,7 @@ static tuple GetActualLen(napi_env env, int64_t bufLen, int64_t bu } if (opLength < 0) { retLen = bufLen - bufOff; - } else if (opLength + bufOff > bufLen) { + } else if (opLength > bufLen - bufOff) { HILOGE("Invalid option.length, buffer limit exceeded"); UniError(EINVAL).ThrowErr(env); return { false, 0 }; @@ -86,6 +111,7 @@ static tuple GetActualLen(napi_env env, int64_t bufLen, int64_t bu return { true, retLen }; } + int CommonFunc::ConvertJsFlags(int &flags) { static constexpr int USR_O_RDONLY = 00; @@ -151,8 +177,7 @@ tuple CommonFunc::GetReadArg(napi_env int offset = 0; tie(succ, buf, bufLen) = txt.ToArraybuffer(); if (!succ) { - HILOGE("Invalid read buffer, expect arraybuffer"); - UniError(EINVAL).ThrowErr(env); + UniError(EINVAL).ThrowErr(env, "Invalid read buffer, expect arraybuffer"); return { false, nullptr, 0, posAssigned, position, offset }; } @@ -173,8 +198,7 @@ tuple CommonFunc::GetReadArg(napi_env if (succ && position >= 0) { posAssigned = true; } else { - HILOGE("option.position shall be positive number"); - UniError(EINVAL).ThrowErr(env); + UniError(EINVAL).ThrowErr(env, "option.position shall be positive number"); return { false, nullptr, 0, posAssigned, position, offset }; } } @@ -228,8 +252,7 @@ tuple, void *, int64_t, bool, int64_t> CommonFunc::GetW if (!succ) { tie(succ, buf, bufLen) = NVal(env, argWBuf).ToArraybuffer(); if (!succ) { - HILOGE("Illegal write buffer or encoding"); - UniError(EINVAL).ThrowErr(env); + UniError(EINVAL).ThrowErr(env, "Illegal write buffer or encoding"); return { false, nullptr, nullptr, 0, hasPos, retPos }; } } else { @@ -251,8 +274,7 @@ tuple, void *, int64_t, bool, int64_t> CommonFunc::GetW int32_t position = 0; tie(succ, position) = op.GetProp("position").ToInt32(); if (!succ || position < 0) { - HILOGE("option.position shall be positive number"); - UniError(EINVAL).ThrowErr(env); + UniError(EINVAL).ThrowErr(env, "option.position shall be positive number"); return { false, nullptr, nullptr, 0, hasPos, retPos }; } hasPos = true; @@ -281,7 +303,7 @@ tuple CommonFunc::GetReadArgV9(napi_env en return { false, nullptr, 0, posAssigned, position }; } NVal op = NVal(env, option); - tie(succ, retLen) = GetActualLen(env, bufLen, 0, op); + tie(succ, retLen) = GetActualLenV9(env, bufLen, 0, op); if (!succ) { return { false, nullptr, 0, posAssigned, position }; } @@ -324,7 +346,7 @@ tuple, void *, int64_t, bool, int64_t> CommonFunc::GetW } else { buf = bufferGuard.get(); } - tie(succ, retLen) = GetActualLen(env, bufLen, 0, op); + tie(succ, retLen) = GetActualLenV9(env, bufLen, 0, op); if (!succ) { return { false, nullptr, nullptr, 0, hasPos, retPos }; } 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 fb6f45f4e..208a938e0 100644 --- a/interfaces/kits/js/src/mod_fileio/properties/open_v9.cpp +++ b/interfaces/kits/js/src/mod_fileio/properties/open_v9.cpp @@ -67,7 +67,7 @@ static NVal InstantiateFile(napi_env env, int fd, string path) auto fdg = make_unique(fd); rafEntity->fd_.swap(fdg); rafEntity->path_ = path; - rafEntity->uri_ = path; + rafEntity->uri_ = ""; return { env, objRAF }; } @@ -133,7 +133,7 @@ napi_value OpenV9::Async(napi_env env, napi_callback_info info) } arg->fd = open_req.result; arg->path = path; - arg->uri = path; + arg->uri = ""; uv_fs_req_cleanup(&open_req); return UniError(ERRNO_NOERR); }; diff --git a/interfaces/kits/js/src/mod_fileio/properties/prop_n_exporter_v9.cpp b/interfaces/kits/js/src/mod_fileio/properties/prop_n_exporter_v9.cpp index 37fde8348..dfc8b234b 100644 --- a/interfaces/kits/js/src/mod_fileio/properties/prop_n_exporter_v9.cpp +++ b/interfaces/kits/js/src/mod_fileio/properties/prop_n_exporter_v9.cpp @@ -80,9 +80,9 @@ struct AsyncIOReadArg { static UniError ReadExec(shared_ptr arg, void *buf, size_t len, int fd, size_t position) { if (position == (size_t)INVALID_POSITION) { - arg->lenRead = write(fd, buf, len); + arg->lenRead = read(fd, buf, len); } else { - arg->lenRead = pwrite(fd, buf, len, position); + arg->lenRead = pread(fd, buf, len, position); } if (arg->lenRead == -1) { diff --git a/interfaces/kits/js/src/mod_securitylabel/securitylabel_n_exporter.cpp b/interfaces/kits/js/src/mod_securitylabel/securitylabel_n_exporter.cpp index 1e0ac78f6..88ee86e83 100644 --- a/interfaces/kits/js/src/mod_securitylabel/securitylabel_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_securitylabel/securitylabel_n_exporter.cpp @@ -61,7 +61,7 @@ napi_value SetSecurityLabel(napi_env env, napi_callback_info info) auto cbExec = [pathString, dataLevelString](napi_env env) -> UniError { bool ret = SecurityLabel::SetSecurityLabel(pathString, dataLevelString); if (!ret) { - return UniError(-1); + return UniError(errno); } else { return UniError(ERRNO_NOERR); } @@ -116,7 +116,7 @@ napi_value SetSecurityLabelSync(napi_env env, napi_callback_info info) bool ret = SecurityLabel::SetSecurityLabel(path.get(), dataLevel.get()); if (!ret) { - return UniError(-1).GetNapiErr(env); + return UniError(errno).GetNapiErr(env); } return NVal::CreateUndefined(env).val_; -- Gitee