From 0a73fe033229a1552656f5b2185b7a414889311f Mon Sep 17 00:00:00 2001 From: tianp Date: Thu, 15 May 2025 16:33:46 +0800 Subject: [PATCH 1/3] =?UTF-8?q?stat.Location=E5=B1=9E=E6=80=A7=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: tianp --- .../src/common/ani_helper/ani_signature.cpp | 3 +++ .../js/src/common/ani_helper/ani_signature.h | 5 ++++ .../mod_fs/class_stat/ani/stat_wrapper.cpp | 25 +++++++++++++------ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/interfaces/kits/js/src/common/ani_helper/ani_signature.cpp b/interfaces/kits/js/src/common/ani_helper/ani_signature.cpp index 87ee3dfe3..4a683a783 100644 --- a/interfaces/kits/js/src/common/ani_helper/ani_signature.cpp +++ b/interfaces/kits/js/src/common/ani_helper/ani_signature.cpp @@ -115,6 +115,9 @@ const Type FS::WatchEventInner::classType = Builder::BuildClass("@ohos.file.fs.W const string FS::WatchEventInner::classDesc = FS::WatchEventInner::classType.Descriptor(); const string FS::WatchEventInner::ctorSig = Builder::BuildSignatureDescriptor({ BuiltInTypes::stringType, BasicTypes::doubleType, BasicTypes::doubleType }); +// FS::LocationType +const Type FS::LocationType::classType = Builder::BuildClass("@ohos.file.fs.fileIo.LocationType"); +const string FS::LocationType::classDesc = FS::LocationType::classType.Descriptor(); // Impl::EnvironmentImpl const Type Impl::EnvironmentImpl::classType = Builder::BuildClass("@ohos.file.environment.EnvironmentImpl"); const string Impl::EnvironmentImpl::classDesc = Impl::EnvironmentImpl::classType.Descriptor(); diff --git a/interfaces/kits/js/src/common/ani_helper/ani_signature.h b/interfaces/kits/js/src/common/ani_helper/ani_signature.h index c05470dc0..599610ee3 100644 --- a/interfaces/kits/js/src/common/ani_helper/ani_signature.h +++ b/interfaces/kits/js/src/common/ani_helper/ani_signature.h @@ -176,6 +176,11 @@ struct WatchEventInner : public BaseType { static const string ctorSig; }; +struct LocationType : public BaseType{ + static const Type classType; + static const string classDesc; +}; + } // namespace FS namespace Impl { diff --git a/interfaces/kits/js/src/mod_fs/class_stat/ani/stat_wrapper.cpp b/interfaces/kits/js/src/mod_fs/class_stat/ani/stat_wrapper.cpp index 7545be645..4d803a96d 100644 --- a/interfaces/kits/js/src/mod_fs/class_stat/ani/stat_wrapper.cpp +++ b/interfaces/kits/js/src/mod_fs/class_stat/ani/stat_wrapper.cpp @@ -80,14 +80,25 @@ static ani_status SetBigIntProperty( return env->Object_CallMethod_Void(statObject, setter, object); } -static ani_int GetLocationEnumIndex(const Location &value) +static ani_enum_item GetLocationEnumIndex(ani_env *env, const Location &value) { - switch (value) { - case LOCAL: - return ani_int(0); - case CLOUD: - return ani_int(1); + ani_enum enumType; + auto classDesc = FS::LocationType::classDesc.c_str(); + ani_status ret = env->FindEnum(classDesc, &enumType); + if (ret != ANI_OK) { + HILOGE("FindEnum %{private}s failed, err: %{private}d", classDesc, ret); + return nullptr; + } + + size_t index = static_cast(value) - 1; + + ani_enum_item enumItem; + ret = env->Enum_GetEnumItemByIndex(enumType, index, &enumItem); + if (ret != ANI_OK) { + HILOGE("Enum_GetEnumItemByIndex failed, index: %{private}zu, err: %{private}d", index, ret); + return nullptr; } + return enumItem; } static ani_status SetEnumLocation( @@ -100,7 +111,7 @@ static ani_status SetEnumLocation( return ret; } - return env->Object_CallMethod_Void(object, setter, GetLocationEnumIndex(value)); + return env->Object_CallMethod_Void(object, setter, GetLocationEnumIndex(env, value)); } const static string MODE_SETTER = Builder::BuildSetterName("mode"); -- Gitee From 8b835f12a57be73a4a74060975ecfb6716220c4d Mon Sep 17 00:00:00 2001 From: tianp Date: Thu, 15 May 2025 19:07:07 +0800 Subject: [PATCH 2/3] =?UTF-8?q?stat.Location=E5=B1=9E=E6=80=A7=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: tianp --- interfaces/kits/js/src/common/ani_helper/ani_signature.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interfaces/kits/js/src/common/ani_helper/ani_signature.h b/interfaces/kits/js/src/common/ani_helper/ani_signature.h index 599610ee3..8b7e43281 100644 --- a/interfaces/kits/js/src/common/ani_helper/ani_signature.h +++ b/interfaces/kits/js/src/common/ani_helper/ani_signature.h @@ -176,7 +176,7 @@ struct WatchEventInner : public BaseType { static const string ctorSig; }; -struct LocationType : public BaseType{ +struct LocationType : public BaseType { static const Type classType; static const string classDesc; }; -- Gitee From 6b38dbb10bfb0c8570767dff6baf7e753d5ce899 Mon Sep 17 00:00:00 2001 From: tianp Date: Mon, 19 May 2025 09:43:55 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=9D=9E=E9=9B=B6?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: tianp Change-Id: I26035acefaf97195dd27c71d3a4817bc108589c0 --- .../kits/js/src/mod_fs/class_stat/ani/stat_wrapper.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/interfaces/kits/js/src/mod_fs/class_stat/ani/stat_wrapper.cpp b/interfaces/kits/js/src/mod_fs/class_stat/ani/stat_wrapper.cpp index 4d803a96d..94aae30c1 100644 --- a/interfaces/kits/js/src/mod_fs/class_stat/ani/stat_wrapper.cpp +++ b/interfaces/kits/js/src/mod_fs/class_stat/ani/stat_wrapper.cpp @@ -90,7 +90,13 @@ static ani_enum_item GetLocationEnumIndex(ani_env *env, const Location &value) return nullptr; } - size_t index = static_cast(value) - 1; + size_t valueAsSizeT = static_cast(value); + if (valueAsSizeT < 1) { + HILOGE("Invalid Location value: %{private}zu", valueAsSizeT); + return nullptr; + } + + size_t index = valueAsSizeT - 1; ani_enum_item enumItem; ret = env->Enum_GetEnumItemByIndex(enumType, index, &enumItem); -- Gitee