diff --git a/interfaces/kits/js/BUILD.gn b/interfaces/kits/js/BUILD.gn index 9b31c1e171f88569c100ef597768a4aaaba28657..2901748d0a0b362cb12a791cb6acbfe9d22440b1 100644 --- a/interfaces/kits/js/BUILD.gn +++ b/interfaces/kits/js/BUILD.gn @@ -710,8 +710,8 @@ ohos_shared_library("ani_fs_class") { "src/mod_fs/properties/ani/close_ani.cpp", "src/mod_fs/properties/ani/connectdfs_ani.cpp", "src/mod_fs/properties/ani/copy_ani.cpp", + "src/mod_fs/properties/ani/copy_dir_ani.cpp", "src/mod_fs/properties/ani/copy_file_ani.cpp", - "src/mod_fs/properties/ani/copydir_ani.cpp", "src/mod_fs/properties/ani/create_randomaccessfile_ani.cpp", "src/mod_fs/properties/ani/create_stream_ani.cpp", "src/mod_fs/properties/ani/disconnectdfs_ani.cpp", @@ -740,9 +740,9 @@ ohos_shared_library("ani_fs_class") { "src/mod_fs/properties/close_core.cpp", "src/mod_fs/properties/connectdfs_core.cpp", "src/mod_fs/properties/copy_core.cpp", + "src/mod_fs/properties/copy_dir_core.cpp", "src/mod_fs/properties/copy_file_core.cpp", "src/mod_fs/properties/copy_listener/trans_listener_core.cpp", - "src/mod_fs/properties/copydir_core.cpp", "src/mod_fs/properties/create_randomaccessfile_core.cpp", "src/mod_fs/properties/create_stream_core.cpp", "src/mod_fs/properties/dfs_listener/file_dfs_listener_stub.cpp", diff --git a/interfaces/kits/js/src/common/ani_helper/type_converter.cpp b/interfaces/kits/js/src/common/ani_helper/type_converter.cpp index e618699674ad19375fb59c8391765074e448a6d9..fe336b31eabe7bd350027f93ca8431ae651e31ee 100644 --- a/interfaces/kits/js/src/common/ani_helper/type_converter.cpp +++ b/interfaces/kits/js/src/common/ani_helper/type_converter.cpp @@ -241,7 +241,7 @@ std::tuple TypeConverter::ToAniStringList( if (env->Array_New_Ref(itemCls, length, nullptr, &result) != ANI_OK) { return { false, result }; } - for (int i = 0; i < length; i++) { + for (uint32_t i = 0; i < length; i++) { auto [ret, item] = TypeConverter::ToAniString(env, strList[i]); if (!ret) { return { false, nullptr }; diff --git a/interfaces/kits/js/src/mod_fs/ani/bind_function_class.cpp b/interfaces/kits/js/src/mod_fs/ani/bind_function_class.cpp index 7d15255e59a906d5c4cb261aba13e2ab3f23669d..2d7283c7d9887f878763c47d22f689e782262a7d 100644 --- a/interfaces/kits/js/src/mod_fs/ani/bind_function_class.cpp +++ b/interfaces/kits/js/src/mod_fs/ani/bind_function_class.cpp @@ -22,8 +22,8 @@ #include "close_ani.h" #include "connectdfs_ani.h" #include "copy_ani.h" +#include "copy_dir_ani.h" #include "copy_file_ani.h" -#include "copydir_ani.h" #include "create_randomaccessfile_ani.h" #include "create_stream_ani.h" #include "disconnectdfs_ani.h" diff --git a/interfaces/kits/js/src/mod_fs/ani/ets/@ohos.file.fs.ets b/interfaces/kits/js/src/mod_fs/ani/ets/@ohos.file.fs.ets index 170b123df78d48c61556f0fe883c0848670bf31d..94bcf4694bedf653190a7882692907d27ff6deaf 100644 --- a/interfaces/kits/js/src/mod_fs/ani/ets/@ohos.file.fs.ets +++ b/interfaces/kits/js/src/mod_fs/ani/ets/@ohos.file.fs.ets @@ -197,6 +197,27 @@ function copyDir(src: string, dest: string, mode: number, callback: AsyncCallbac }); } +function copyDir(arg0: Object, arg1: Object, arg2: NullishType, arg3: NullishType): void { + let src = arg0 as string; + let dest = arg1 as string; + if (typeof arg2 === 'number' && typeof arg3 === 'function') { + let mode: number = 0; + try { + mode = arg2 as number; + } catch (error) { + mode = (arg2 as int) + 0; + } + let callback = arg3 as AsyncCallback>; + copyDir(src, dest, mode, callback); + return; + } + if (typeof arg2 === 'function') { + let callback = arg2 as AsyncCallback>; + copyDir(src, dest, callback); + return; + } +} + function mkdirSync(path: string): void { return FileIoImpl.mkdirSync(path) } @@ -292,14 +313,15 @@ function moveDirSync(src: string, dest: string, mode?: number): void { } function moveDir(src: string, dest: string, mode?: number): Promise { - return new Promise((resolve: (result: undefined) => void, reject: (e: BusinessError) => void): void => { + return new Promise((resolve: (result: undefined) => void, + reject: (e: BusinessError>) => void): void => { if (mode === undefined) { let promise = taskpool.execute((src: string, dest: string): undefined => { return FileIoImpl.movedirSync(src, dest); }, src, dest); promise.then((ret: NullishType): void => { resolve(undefined); - }).catch((e: BusinessError): void => { + }).catch((e: BusinessError>): void => { reject(e); }); } else { @@ -308,39 +330,62 @@ function moveDir(src: string, dest: string, mode?: number): Promise { }, src, dest, mode); promise.then((ret: NullishType): void => { resolve(undefined); - }).catch((e: BusinessError): void => { + }).catch((e: BusinessError>): void => { reject(e); }); } }) } -function moveDir(src: string, dest: string, callback: AsyncCallback): void { +function moveDir(src: string, dest: string, callback: AsyncCallback>): void { let promise = taskpool.execute((src: string, dest: string): undefined => { return FileIoImpl.movedirSync(src, dest); }, src, dest); promise.then((ret: NullishType): void => { - let e = new BusinessError(); + let e = new BusinessError>(); e.code = 0; + e.data = new Array(0); callback(e, undefined); - }).catch((e: BusinessError): void => { + }).catch((e: BusinessError>): void => { callback(e, undefined); }); } -function moveDir(src: string, dest: string, mode: number, callback: AsyncCallback): void { +function moveDir(src: string, dest: string, mode: number, callback: AsyncCallback>): void { let promise = taskpool.execute((src: string, dest: string, mode: number): undefined => { return FileIoImpl.movedirSync(src, dest, mode); }, src, dest, mode); promise.then((ret: NullishType): void => { - let e = new BusinessError(); + let e = new BusinessError>(); e.code = 0; + e.data = new Array(0); callback(e, undefined); - }).catch((e: BusinessError): void => { + }).catch((e: BusinessError>): void => { callback(e, undefined); }); } +function moveDir(arg0: Object, arg1: Object, arg2: NullishType, arg3: NullishType): void { + let src = arg0 as string; + let dest = arg1 as string; + if (typeof arg2 === 'number' && typeof arg3 === 'function') { + let mode: number = 0; + try { + mode = arg2 as number; + } catch (error) { + mode = (arg2 as int) + 0; + } + let callback = arg3 as AsyncCallback>; + moveDir(src, dest, mode, callback); + return; + } + if (typeof arg2 === 'function') { + let callback = arg2 as AsyncCallback>; + moveDir(src, dest, callback); + return; + } +} + function mkdtempSync(prefix: string): string { return FileIoImpl.mkdtempSync(prefix); } diff --git a/interfaces/kits/js/src/mod_fs/class_randomaccessfile/fs_randomaccessfile.cpp b/interfaces/kits/js/src/mod_fs/class_randomaccessfile/fs_randomaccessfile.cpp index 87e48b46921fad99f0bc7680a3d455777e6bdfe1..8d8b149f62ab2ec10d5ee9ee42d29d0823f99fd7 100644 --- a/interfaces/kits/js/src/mod_fs/class_randomaccessfile/fs_randomaccessfile.cpp +++ b/interfaces/kits/js/src/mod_fs/class_randomaccessfile/fs_randomaccessfile.cpp @@ -106,7 +106,7 @@ tuple ValidReadArg(ArrayBuffer &buffer, const opt return { false, nullptr, retLen, offset }; } optional lengthOp = nullopt; - optional offsetOp = nullopt; + optional offsetOp = nullopt; if (options.has_value()) { ReadOptions op = options.value(); lengthOp = op.length; @@ -161,7 +161,7 @@ tuple ValidWriteArg( } optional lengthOp = nullopt; - optional offsetOp = nullopt; + optional offsetOp = nullopt; if (options.has_value()) { WriteOptions op = options.value(); lengthOp = op.length; diff --git a/interfaces/kits/js/src/mod_fs/properties/ani/copydir_ani.cpp b/interfaces/kits/js/src/mod_fs/properties/ani/copy_dir_ani.cpp similarity index 98% rename from interfaces/kits/js/src/mod_fs/properties/ani/copydir_ani.cpp rename to interfaces/kits/js/src/mod_fs/properties/ani/copy_dir_ani.cpp index ed21f7f5ce65c10a34a0cbb5fbeab1a31429c933..200573ca167c91357855954228d43cad07955fdc 100644 --- a/interfaces/kits/js/src/mod_fs/properties/ani/copydir_ani.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/ani/copy_dir_ani.cpp @@ -13,10 +13,10 @@ * limitations under the License. */ -#include "copydir_ani.h" +#include "copy_dir_ani.h" #include -#include "copydir_core.h" +#include "copy_dir_core.h" #include "error_handler.h" #include "filemgmt_libhilog.h" #include "type_converter.h" diff --git a/interfaces/kits/js/src/mod_fs/properties/ani/copydir_ani.h b/interfaces/kits/js/src/mod_fs/properties/ani/copy_dir_ani.h similarity index 82% rename from interfaces/kits/js/src/mod_fs/properties/ani/copydir_ani.h rename to interfaces/kits/js/src/mod_fs/properties/ani/copy_dir_ani.h index 85c92cc74df2f882d930c79f4a20a7afa722a70e..469b5fe414a01499ffd620f73057772ad3be80ea 100644 --- a/interfaces/kits/js/src/mod_fs/properties/ani/copydir_ani.h +++ b/interfaces/kits/js/src/mod_fs/properties/ani/copy_dir_ani.h @@ -13,8 +13,8 @@ * limitations under the License. */ -#ifndef INTERFACES_KITS_JS_SRC_MOD_FS_PROPERTIES_ANI_COPYDIR_ANI_H -#define INTERFACES_KITS_JS_SRC_MOD_FS_PROPERTIES_ANI_COPYDIR_ANI_H +#ifndef INTERFACES_KITS_JS_SRC_MOD_FS_PROPERTIES_ANI_COPY_DIR_ANI_H +#define INTERFACES_KITS_JS_SRC_MOD_FS_PROPERTIES_ANI_COPY_DIR_ANI_H #include @@ -31,4 +31,4 @@ public: } // namespace ModuleFileIO } // namespace FileManagement } // namespace OHOS -#endif // INTERFACES_KITS_JS_SRC_MOD_FS_PROPERTIES_ANI_COPYDIR_ANI_H \ No newline at end of file +#endif // INTERFACES_KITS_JS_SRC_MOD_FS_PROPERTIES_ANI_COPY_DIR_ANI_H \ No newline at end of file diff --git a/interfaces/kits/js/src/mod_fs/properties/ani/movedir_ani.cpp b/interfaces/kits/js/src/mod_fs/properties/ani/movedir_ani.cpp index 1e2c137c908208a5a760f571fc527ad9ce5529de..e1239cfcac238550f114da14ecc43e078262efec 100644 --- a/interfaces/kits/js/src/mod_fs/properties/ani/movedir_ani.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/ani/movedir_ani.cpp @@ -15,6 +15,7 @@ #include "movedir_ani.h" +#include #include "error_handler.h" #include "filemgmt_libhilog.h" #include "movedir_core.h" @@ -25,6 +26,88 @@ namespace FileManagement { namespace ModuleFileIO { namespace ANI { +static tuple ToConflictFiles(ani_env *env, const ErrFiles &files) +{ + static const char *className = "L@ohos/file/fs/ConflictFilesInner;"; + ani_class cls; + ani_status ret; + if ((ret = env->FindClass(className, &cls)) != ANI_OK) { + HILOGE("Cannot find class %{private}s, err: %{private}d", className, ret); + return { false, nullptr }; + } + + ani_method ctor; + if ((ret = env->Class_FindMethod(cls, "", "Lstd/core/String;Lstd/core/String;:V", &ctor)) != ANI_OK) { + HILOGE("Cannot find class %{private}s constructor method, err: %{private}d", className, ret); + return { false, nullptr }; + } + + auto [succSrc, src] = TypeConverter::ToAniString(env, files.srcFiles); + if (!succSrc) { + HILOGE("Convert ConflictFiles srcFiles to ani string failed!"); + return { false, nullptr }; + } + + auto [succDest, dest] = TypeConverter::ToAniString(env, files.destFiles); + if (!succSrc) { + HILOGE("Convert ConflictFiles destFiles to ani string failed!"); + return { false, nullptr }; + } + + ani_object obj; + if ((ret = env->Object_New(cls, ctor, &obj, src, dest)) != ANI_OK) { + HILOGE("Create ConflictFiles object failed!, err: %{private}d", ret); + return { false, nullptr }; + } + + return { true, obj }; +} + +static tuple> ToConflictFilesArray( + ani_env *env, const optional> &errFiles) +{ + if (!errFiles.has_value()) { + return { true, nullopt }; + } + static const char *className = "Lescompat/Array;"; + ani_class cls = nullptr; + ani_status ret; + + if ((ret = env->FindClass(className, &cls)) != ANI_OK) { + HILOGE("Cannot find class %{private}s, err: %{private}d", className, ret); + return { false, nullopt }; + } + + ani_method ctor; + if ((ret = env->Class_FindMethod(cls, "", "I:V", &ctor)) != ANI_OK) { + HILOGE("Cannot find class %{private}s constructor method, err: %{private}d", className, ret); + return { false, nullopt }; + } + + ani_object arr; + auto files = errFiles.value(); + if ((ret = env->Object_New(cls, ctor, &arr, files.size())) != ANI_OK) { + HILOGE("Create Array failed!, err: %{private}d", ret); + return { false, nullopt }; + } + + ani_size index = 0; + for (const auto &errFile : files) { + auto [succ, fileObj] = ToConflictFiles(env, errFile); + if (!succ) { + return { false, nullopt }; + } + + if ((ret = env->Object_CallMethodByName_Void(arr, "$_set", "ILstd/core/Object;:V", index, fileObj)) != ANI_OK) { + HILOGE("Add element to Array failed, err: %{private}d", ret); + return { false, nullopt }; + } + index++; + } + + return { true, make_optional(move(arr)) }; +} + void MoveDirAni::MoveDirSync( ani_env *env, [[maybe_unused]] ani_class clazz, ani_string src, ani_string dest, ani_object mode) { @@ -43,11 +126,17 @@ void MoveDirAni::MoveDirSync( return; } - auto ret = MoveDirCore::DoMoveDir(srcPath, destPath, optMode); - if (!ret.fsResult.IsSuccess()) { - HILOGE("DoCopyFile failed!"); - const FsError &err = ret.fsResult.GetError(); - ErrorHandler::Throw(env, err); + auto [fsResult, errFiles] = MoveDirCore::DoMoveDir(srcPath, destPath, optMode); + if (!fsResult.IsSuccess()) { + HILOGE("DoMoveDir failed!"); + auto [succ, errData] = ToConflictFilesArray(env, errFiles); + if (!succ) { + HILOGE("Convert conflict files array failed"); + ErrorHandler::Throw(env, UNKNOWN_ERR); + return; + } + const FsError &err = fsResult.GetError(); + ErrorHandler::Throw(env, err, errData); return; } } diff --git a/interfaces/kits/js/src/mod_fs/properties/copy_core.cpp b/interfaces/kits/js/src/mod_fs/properties/copy_core.cpp index fe1b8ed5931ff40117a95abef9774ab82952605e..f3d4613d75db7edeb16a31c7f39ba772ddd0c0f3 100644 --- a/interfaces/kits/js/src/mod_fs/properties/copy_core.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/copy_core.cpp @@ -521,7 +521,7 @@ void CopyCore::UnregisterListener(std::shared_ptr fileInfos) jsCbMap_.erase(*fileInfos); } -void CopyCore::ReceiveComplete(UvEntryCore *entry) +void CopyCore::ReceiveComplete(std::shared_ptr entry) { if (entry == nullptr) { HILOGE("entry pointer is nullptr."); @@ -561,7 +561,7 @@ UvEntryCore *CopyCore::GetUVEntry(std::shared_ptr infos) void CopyCore::OnFileReceive(std::shared_ptr infos) { - UvEntryCore *entry = GetUVEntry(infos); + std::shared_ptr entry(GetUVEntry(infos)); if (entry == nullptr) { HILOGE("failed to get uv entry"); return; @@ -693,7 +693,7 @@ void CopyCore::ReadNotifyEvent(std::shared_ptr infos) index += static_cast(sizeof(struct inotify_event) + event->len); continue; } - if (callback->progressSize == callback->totalSize) { + if (!callback || (callback->progressSize == callback->totalSize)) { infos->run = false; return; } diff --git a/interfaces/kits/js/src/mod_fs/properties/copy_core.h b/interfaces/kits/js/src/mod_fs/properties/copy_core.h index aa731caf82c30ec4a7a30d825c4081d602f1c88b..58aa4f999cc50d102a05f11db8e5e26eace0e053 100644 --- a/interfaces/kits/js/src/mod_fs/properties/copy_core.h +++ b/interfaces/kits/js/src/mod_fs/properties/copy_core.h @@ -155,7 +155,7 @@ private: static void GetNotifyEvent(std::shared_ptr infos); static void StartNotify(std::shared_ptr infos, std::shared_ptr callback); static UvEntryCore *GetUVEntry(std::shared_ptr infos); - static void ReceiveComplete(UvEntryCore *entry); + static void ReceiveComplete(std::shared_ptr entry); static std::shared_ptr GetRegisteredListener(std::shared_ptr infos); static void CloseNotifyFd(std::shared_ptr infos, std::shared_ptr callback); static void CloseNotifyFdLocked(std::shared_ptr infos, diff --git a/interfaces/kits/js/src/mod_fs/properties/copydir_core.cpp b/interfaces/kits/js/src/mod_fs/properties/copy_dir_core.cpp similarity index 99% rename from interfaces/kits/js/src/mod_fs/properties/copydir_core.cpp rename to interfaces/kits/js/src/mod_fs/properties/copy_dir_core.cpp index b9a5a5f4eeb954cdc63c9653270a7a571ad4f128..b824647e3bbdac890da2eb9d6bfa87d096ee50a0 100644 --- a/interfaces/kits/js/src/mod_fs/properties/copydir_core.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/copy_dir_core.cpp @@ -13,7 +13,7 @@ * limitations under the License. */ -#include "copydir_core.h" +#include "copy_dir_core.h" #include #include diff --git a/interfaces/kits/js/src/mod_fs/properties/copydir_core.h b/interfaces/kits/js/src/mod_fs/properties/copy_dir_core.h similarity index 88% rename from interfaces/kits/js/src/mod_fs/properties/copydir_core.h rename to interfaces/kits/js/src/mod_fs/properties/copy_dir_core.h index ab9f9b25a438171c1a4b804c414fa0388a2392eb..e031e2a1d396195c5a7d22d3fcbd122fe6422d04 100644 --- a/interfaces/kits/js/src/mod_fs/properties/copydir_core.h +++ b/interfaces/kits/js/src/mod_fs/properties/copy_dir_core.h @@ -13,8 +13,8 @@ * limitations under the License. */ -#ifndef INTERFACES_KITS_JS_SRC_MOD_FS_PROPERTIES_COPYDIR_CORE_H -#define INTERFACES_KITS_JS_SRC_MOD_FS_PROPERTIES_COPYDIR_CORE_H +#ifndef INTERFACES_KITS_JS_SRC_MOD_FS_PROPERTIES_COPY_DIR_CORE_H +#define INTERFACES_KITS_JS_SRC_MOD_FS_PROPERTIES_COPY_DIR_CORE_H #include #include @@ -56,4 +56,4 @@ struct ConflictFiles { } // namespace ModuleFileIO } // namespace FileManagement } // namespace OHOS -#endif // INTERFACES_KITS_JS_SRC_MOD_FS_PROPERTIES_COPYDIR_CORE_H \ No newline at end of file +#endif // INTERFACES_KITS_JS_SRC_MOD_FS_PROPERTIES_COPY_DIR_CORE_H \ No newline at end of file diff --git a/interfaces/kits/js/src/mod_fs/properties/copy_listener/trans_listener_core.cpp b/interfaces/kits/js/src/mod_fs/properties/copy_listener/trans_listener_core.cpp index 0a27d1de2a76994933670a03c857962491746d67..431a4f9e1fe6ac65a58419c09a85ad98c3733cb2 100644 --- a/interfaces/kits/js/src/mod_fs/properties/copy_listener/trans_listener_core.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/copy_listener/trans_listener_core.cpp @@ -250,7 +250,7 @@ std::string TransListenerCore::GetNetworkIdFromUri(const std::string &uri) return uri.substr(uri.find(NETWORK_PARA) + NETWORK_PARA.size(), uri.size()); } -void TransListenerCore::CallbackComplete(UvEntryCore *entry) +void TransListenerCore::CallbackComplete(std::shared_ptr entry) { if (entry == nullptr) { HILOGE("entry pointer is nullptr."); @@ -268,7 +268,7 @@ int32_t TransListenerCore::OnFileReceive(uint64_t totalBytes, uint64_t processed return ENOMEM; } - UvEntryCore *entry = new (std::nothrow) UvEntryCore(callback_); + std::shared_ptr entry = std::make_shared(callback_); if (entry == nullptr) { HILOGE("entry ptr is nullptr"); return ENOMEM; diff --git a/interfaces/kits/js/src/mod_fs/properties/copy_listener/trans_listener_core.h b/interfaces/kits/js/src/mod_fs/properties/copy_listener/trans_listener_core.h index 97fb954829ba7554b6183632feb555222db41131..d5b8f95850f6533a28544f43dc3b5390668f470a 100644 --- a/interfaces/kits/js/src/mod_fs/properties/copy_listener/trans_listener_core.h +++ b/interfaces/kits/js/src/mod_fs/properties/copy_listener/trans_listener_core.h @@ -46,7 +46,7 @@ public: std::shared_ptr callback); private: static std::string GetNetworkIdFromUri(const std::string &uri); - static void CallbackComplete(UvEntryCore *entry); + static void CallbackComplete(std::shared_ptr entry); static void RmDir(const std::string &path); static std::string CreateDfsCopyPath(); static std::string GetFileName(const std::string &path); diff --git a/interfaces/kits/js/src/mod_fs/properties/create_randomaccessfile_core.cpp b/interfaces/kits/js/src/mod_fs/properties/create_randomaccessfile_core.cpp index 3bdc18ce45de2d8bb346db349c45a98f2b2118d0..1ef94cd44cc449dc0c5f4fcfab661739735504ef 100644 --- a/interfaces/kits/js/src/mod_fs/properties/create_randomaccessfile_core.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/create_randomaccessfile_core.cpp @@ -113,8 +113,7 @@ static tuple ValidAndConvertFlags(const option HILOGE("Invalid flags"); return {false, flags, start, end}; } - flags = static_cast(modeValue); - (void)FsUtils::ConvertFlags(flags); + flags = FsUtils::ConvertFlags(static_cast(modeValue)); } if (options.has_value()) { auto [succOpt, start, end] = ValidRafOptions(options); diff --git a/interfaces/kits/js/src/mod_fs/properties/open_core.cpp b/interfaces/kits/js/src/mod_fs/properties/open_core.cpp index 45147159fa3ba9e8fe3f4286930672c97c4c2b40..f688e8b5e208a25f3f2b4d1ec3074b8c6417325a 100644 --- a/interfaces/kits/js/src/mod_fs/properties/open_core.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/open_core.cpp @@ -69,13 +69,17 @@ static tuple ValidAndConvertFlags(const optional &mode) uint32_t flags = O_RDONLY; if (mode.has_value()) { auto modeValue = mode.value(); - int32_t invalidMode = (O_WRONLY | O_RDWR); - if (modeValue < 0 || ((modeValue & invalidMode) == invalidMode)) { + if (modeValue < 0) { HILOGE("Invalid mode"); return { false, flags }; } flags = static_cast(modeValue); - (void)FsUtils::ConvertFlags(flags); + uint32_t invalidMode = (O_WRONLY | O_RDWR); + if ((modeValue & invalidMode) == invalidMode) { + HILOGE("Invalid mode"); + return { false, flags }; + } + flags = FsUtils::ConvertFlags(flags); } return { true, flags }; } diff --git a/interfaces/kits/js/src/mod_fs/properties/read_core.cpp b/interfaces/kits/js/src/mod_fs/properties/read_core.cpp index 11d7c211e407fe3e7a46da829f813bdb854eb62c..2099ebce63eb8ca42436d1a78e60305fc5247ad7 100644 --- a/interfaces/kits/js/src/mod_fs/properties/read_core.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/read_core.cpp @@ -41,7 +41,7 @@ static tuple ValidReadArg(ArrayBuffer &arrayBuffe return { false, nullptr, retLen, offset }; } optional lengthOp = nullopt; - optional offsetOp = nullopt; + optional offsetOp = nullopt; if (options.has_value()) { ReadOptions op = options.value(); lengthOp = op.length; diff --git a/interfaces/kits/js/src/mod_fs/properties/write_core.cpp b/interfaces/kits/js/src/mod_fs/properties/write_core.cpp index f8498fabcbbe50da8778f9864de9334f23657f75..f282f9cf337afe5be1227b625a9c37dc6915645b 100644 --- a/interfaces/kits/js/src/mod_fs/properties/write_core.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/write_core.cpp @@ -44,7 +44,7 @@ static tuple ValidWriteArg( } optional lengthOp = nullopt; - optional offsetOp = nullopt; + optional offsetOp = nullopt; if (options.has_value()) { WriteOptions op = options.value(); lengthOp = op.length;