From 448d0463376b99180dfd7d0b0034b8be4b1500d5 Mon Sep 17 00:00:00 2001 From: dinghong Date: Thu, 15 May 2025 10:33:24 +0800 Subject: [PATCH] fix writeSync Signed-off-by: dinghong --- interfaces/kits/cj/src/file_fs_ffi.cpp | 4 ++-- interfaces/kits/cj/src/file_fs_impl.cpp | 23 ++++++----------------- interfaces/kits/cj/src/file_fs_impl.h | 4 ++-- interfaces/kits/cj/src/utils.cpp | 20 ++++++++++++++++++++ interfaces/kits/cj/src/utils.h | 2 ++ 5 files changed, 32 insertions(+), 21 deletions(-) diff --git a/interfaces/kits/cj/src/file_fs_ffi.cpp b/interfaces/kits/cj/src/file_fs_ffi.cpp index 4f6c2f80e..0c0fa60a2 100644 --- a/interfaces/kits/cj/src/file_fs_ffi.cpp +++ b/interfaces/kits/cj/src/file_fs_ffi.cpp @@ -301,7 +301,7 @@ RetDataI64 FfiOHOSFileFsReadCur(int32_t fd, char* buffer, int64_t bufLen, size_t RetDataI64 FfiOHOSFileFsWrite(int32_t fd, char* buffer, size_t length, int64_t offset, const char* encode) { LOGI("FS_TEST::FfiOHOSFileFsWrite"); - auto ret = FileFsImpl::Write(fd, buffer, length, offset, encode); + auto ret = FileFsImpl::Write(fd, reinterpret_cast(buffer), length, offset, encode); if (ret.code != SUCCESS_CODE) { ret.code = OHOS::CJSystemapi::FileFs::GetErrorCode(ret.code); return ret; @@ -313,7 +313,7 @@ RetDataI64 FfiOHOSFileFsWrite(int32_t fd, char* buffer, size_t length, int64_t o RetDataI64 FfiOHOSFileFsWriteCur(int32_t fd, char* buffer, size_t length, const char* encode) { LOGI("FS_TEST::FfiOHOSFileFsWriteCur"); - auto ret = FileFsImpl::WriteCur(fd, buffer, length, encode); + auto ret = FileFsImpl::WriteCur(fd, reinterpret_cast(buffer), length, encode); if (ret.code != SUCCESS_CODE) { ret.code = OHOS::CJSystemapi::FileFs::GetErrorCode(ret.code); return ret; diff --git a/interfaces/kits/cj/src/file_fs_impl.cpp b/interfaces/kits/cj/src/file_fs_impl.cpp index e647288fb..9b261e51a 100644 --- a/interfaces/kits/cj/src/file_fs_impl.cpp +++ b/interfaces/kits/cj/src/file_fs_impl.cpp @@ -845,24 +845,17 @@ RetDataI64 FileFsImpl::ReadCur(int32_t fd, char* buf, int64_t bufLen, size_t len return ret; } -RetDataI64 FileFsImpl::Write(int32_t fd, char* buf, size_t length, int64_t offset, std::string encode) +RetDataI64 FileFsImpl::Write(int32_t fd, void* buf, size_t length, int64_t offset, std::string encode) { LOGI("FS_TEST::FileFsImpl::Write start"); RetDataI64 ret = { .code = EINVAL, .data = 0 }; if (fd < 0) { LOGE("Invalid fd"); return ret; - } else if (length > UINT_MAX) { - LOGE("Invalid arraybuffer"); - return ret; - } - if (offset < 0) { - LOGE("option.offset shall be positive number"); - return ret; } - auto [state, bufGuard, buff, len, offsetResult] = - FileFs::GetWriteArg(buf, length, offset, encode); + auto [state, buff, len, offsetResult] = + CommonFunc::GetWriteArg(buf, length, offset, encode); if (state != SUCCESS_CODE) { LOGE("Failed to resolve buf and options"); return {state, 0}; @@ -887,7 +880,7 @@ RetDataI64 FileFsImpl::Write(int32_t fd, char* buf, size_t length, int64_t offse return ret; } -RetDataI64 FileFsImpl::WriteCur(int32_t fd, char* buf, size_t length, std::string encode) +RetDataI64 FileFsImpl::WriteCur(int32_t fd, void* buf, size_t length, std::string encode) { LOGI("FS_TEST::FileFsImpl::Write start"); RetDataI64 ret = { .code = EINVAL, .data = 0 }; @@ -895,13 +888,9 @@ RetDataI64 FileFsImpl::WriteCur(int32_t fd, char* buf, size_t length, std::strin LOGE("Invalid fd"); return ret; } - if (length > UINT_MAX) { - LOGE("Invalid arraybuffer"); - return ret; - } - auto [state, bufGuard, buff, len, offsetResult] = - FileFs::GetWriteArg(buf, length, 0, encode); + auto [state, buff, len, offsetResult] = + CommonFunc::GetWriteArg(buf, length, 0, encode); if (state != SUCCESS_CODE) { LOGE("Failed to resolve buf and options"); return {state, 0}; diff --git a/interfaces/kits/cj/src/file_fs_impl.h b/interfaces/kits/cj/src/file_fs_impl.h index 6e5961e27..e9ce164b2 100644 --- a/interfaces/kits/cj/src/file_fs_impl.h +++ b/interfaces/kits/cj/src/file_fs_impl.h @@ -79,8 +79,8 @@ public: static RetDataCArrConflictFiles MoveDir(std::string src, std::string dest, int32_t mode); static RetDataI64 Read(int32_t fd, char* buf, int64_t bufLen, size_t length, int64_t offset); static RetDataI64 ReadCur(int32_t fd, char* buf, int64_t bufLen, size_t length); - static RetDataI64 Write(int32_t fd, char* buf, size_t length, int64_t offset, std::string encode); - static RetDataI64 WriteCur(int32_t fd, char* buf, size_t length, std::string encode); + static RetDataI64 Write(int32_t fd, void* buf, size_t length, int64_t offset, std::string encode); + static RetDataI64 WriteCur(int32_t fd, void* buf, size_t length, std::string encode); static std::tuple Access(std::string path); static int Truncate(std::string file, int64_t len); static int Truncate(int32_t file, int64_t len); diff --git a/interfaces/kits/cj/src/utils.cpp b/interfaces/kits/cj/src/utils.cpp index 1f28464ff..31e54e92c 100644 --- a/interfaces/kits/cj/src/utils.cpp +++ b/interfaces/kits/cj/src/utils.cpp @@ -14,6 +14,9 @@ */ #include "utils.h" +#include "cj_common_ffi.h" +#include "macro.h" +#include "uni_error.h" namespace OHOS { namespace CJSystemapi { @@ -61,5 +64,22 @@ string CommonFunc::GetModeFromFlags(unsigned int flags) return mode; } +std::tuple CommonFunc::GetWriteArg( + void *buffer, int64_t length, int64_t offset, const std::string& encode) +{ + if (buffer == nullptr) { + return { EINVAL, nullptr, 0, offset }; + } + if (length > UINT_MAX) { + LOGE("The Size of buffer is too large"); + return { EINVAL, nullptr, 0, offset }; + } + if (offset < 0) { + LOGE("option.offset shall be positive number"); + return { EINVAL, nullptr, 0, offset }; + } + return { SUCCESS_CODE, buffer, length, offset }; +} + } } \ No newline at end of file diff --git a/interfaces/kits/cj/src/utils.h b/interfaces/kits/cj/src/utils.h index a290c8d0d..36d298870 100644 --- a/interfaces/kits/cj/src/utils.h +++ b/interfaces/kits/cj/src/utils.h @@ -71,6 +71,8 @@ struct CommonFunc { static unsigned int ConvertCjFlags(unsigned int &flags); static void FsReqCleanup(uv_fs_t* req); static std::string GetModeFromFlags(unsigned int flags); + static std::tuple GetWriteArg( + void *buffer, int64_t length, int64_t offset, const std::string& encode); }; struct ConflictFiles { -- Gitee