From 909b4eb4687acc7afd927c340f0ecc1ec47c0d1c Mon Sep 17 00:00:00 2001 From: fuletian Date: Wed, 11 Dec 2024 15:57:48 +0800 Subject: [PATCH 1/2] Add Stat_Ns Signed-off-by: fuletian --- .../src/mod_fs/class_stat/stat_n_exporter.cpp | 63 +++++++++++++++++++ .../src/mod_fs/class_stat/stat_n_exporter.h | 4 ++ utils/filemgmt_libn/include/n_val.h | 1 + utils/filemgmt_libn/src/n_val.cpp | 7 +++ 4 files changed, 75 insertions(+) diff --git a/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.cpp b/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.cpp index deba81fee..74bf06994 100644 --- a/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.cpp @@ -229,6 +229,66 @@ napi_value StatNExporter::GetCtime(napi_env env, napi_callback_info info) return NVal::CreateInt64(env, static_cast(statEntity->stat_.st_ctim.tv_sec)).val_; } +napi_value StatNExporter::GetAtimeNs(napi_env env, napi_callback_info info) +{ + NFuncArg funcArg(env, info); + if (!funcArg.InitArgs(NARG_CNT::ZERO)) { + HILOGE("Number of arguments unmatched"); + NError(EINVAL).ThrowErr(env); + return nullptr; + } + + auto statEntity = NClass::GetEntityOf(env, funcArg.GetThisVar()); + if (!statEntity) { + HILOGE("Failed to get stat entity"); + return nullptr; + } + + return NVal::CreateBigIntUint64(env, static_cast + (statEntity->stat_.st_atim.tv_sec * SECOND_TO_NANOSECOND + + statEntity->stat_.st_atim.tv_nsec)).val_; +} + +napi_value StatNExporter::GetMtimeNs(napi_env env, napi_callback_info info) +{ + NFuncArg funcArg(env, info); + if (!funcArg.InitArgs(NARG_CNT::ZERO)) { + HILOGE("Number of arguments unmatched"); + NError(EINVAL).ThrowErr(env); + return nullptr; + } + + auto statEntity = NClass::GetEntityOf(env, funcArg.GetThisVar()); + if (!statEntity) { + HILOGE("Failed to get stat entity"); + return nullptr; + } + + return NVal::CreateBigIntUint64(env, static_cast + (statEntity->stat_.st_mtim.tv_sec * SECOND_TO_NANOSECOND + + statEntity->stat_.st_mtim.tv_nsec)).val_; +} + +napi_value StatNExporter::GetCtimeNs(napi_env env, napi_callback_info info) +{ + NFuncArg funcArg(env, info); + if (!funcArg.InitArgs(NARG_CNT::ZERO)) { + HILOGE("Number of arguments unmatched"); + NError(EINVAL).ThrowErr(env); + return nullptr; + } + + auto statEntity = NClass::GetEntityOf(env, funcArg.GetThisVar()); + if (!statEntity) { + HILOGE("Failed to get stat entity"); + return nullptr; + } + + return NVal::CreateBigIntUint64(env, static_cast + (statEntity->stat_.st_ctim.tv_sec * SECOND_TO_NANOSECOND + + statEntity->stat_.st_ctim.tv_nsec)).val_; +} + #if !defined(WIN_PLATFORM) && !defined(IOS_PLATFORM) napi_value StatNExporter::GetLocation(napi_env env, napi_callback_info info) { @@ -316,6 +376,9 @@ bool StatNExporter::Export() NVal::DeclareNapiGetter("atime", GetAtime), NVal::DeclareNapiGetter("mtime", GetMtime), NVal::DeclareNapiGetter("ctime", GetCtime), + NVal::DeclareNapiGetter("atimeNs", GetAtimeNs), + NVal::DeclareNapiGetter("mtimeNs", GetMtimeNs), + NVal::DeclareNapiGetter("ctimeNs", GetCtimeNs), #if !defined(WIN_PLATFORM) && !defined(IOS_PLATFORM) NVal::DeclareNapiGetter("location", GetLocation), #endif diff --git a/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.h b/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.h index 9374d5784..edb5bbfed 100644 --- a/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.h +++ b/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.h @@ -21,6 +21,7 @@ namespace OHOS::FileManagement::ModuleFileIO { using namespace OHOS::FileManagement::LibN; +const int64_t SECOND_TO_NANOSECOND = 1e9; constexpr int S_PERMISSION = 00000777; #if !defined(WIN_PLATFORM) && !defined(IOS_PLATFORM) const size_t MAX_ATTR_NAME = 64; @@ -56,6 +57,9 @@ public: static napi_value GetAtime(napi_env env, napi_callback_info info); static napi_value GetMtime(napi_env env, napi_callback_info info); static napi_value GetCtime(napi_env env, napi_callback_info info); + static napi_value GetAtimeNs(napi_env env, napi_callback_info info); + static napi_value GetMtimeNs(napi_env env, napi_callback_info info); + static napi_value GetCtimeNs(napi_env env, napi_callback_info info); #if !defined(WIN_PLATFORM) && !defined(IOS_PLATFORM) static napi_value GetLocation(napi_env env, napi_callback_info info); #endif diff --git a/utils/filemgmt_libn/include/n_val.h b/utils/filemgmt_libn/include/n_val.h index dd1ccade1..522227d04 100644 --- a/utils/filemgmt_libn/include/n_val.h +++ b/utils/filemgmt_libn/include/n_val.h @@ -64,6 +64,7 @@ public: /* Static helpers to create js objects */ static NVal CreateUndefined(napi_env env); static NVal CreateBigInt64(napi_env env, int64_t val); + static NVal CreateBigIntUint64(napi_env env, int64_t val); static NVal CreateInt64(napi_env env, int64_t val); static NVal CreateInt32(napi_env env, int32_t val); static NVal CreateUint32(napi_env env, int32_t val); diff --git a/utils/filemgmt_libn/src/n_val.cpp b/utils/filemgmt_libn/src/n_val.cpp index fbaa2cba0..0c6368e09 100644 --- a/utils/filemgmt_libn/src/n_val.cpp +++ b/utils/filemgmt_libn/src/n_val.cpp @@ -315,6 +315,13 @@ NVal NVal::CreateBigInt64(napi_env env, int64_t val) return { env, res }; } +NVal NVal::CreateBigIntUint64(napi_env env, int64_t val) +{ + napi_value res = nullptr; + napi_create_bigint_uint64(env, val, &res); + return { env, res }; +} + NVal NVal::CreateInt64(napi_env env, int64_t val) { napi_value res = nullptr; -- Gitee From 873f0b504bb1dabc2c21431bb25f76e80a9e23a5 Mon Sep 17 00:00:00 2001 From: fuletian Date: Thu, 12 Dec 2024 17:39:08 +0800 Subject: [PATCH 2/2] modify uint64_t Signed-off-by: fuletian --- .../kits/js/src/mod_fs/class_stat/stat_n_exporter.cpp | 6 +++--- utils/filemgmt_libn/include/n_val.h | 2 +- utils/filemgmt_libn/src/n_val.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.cpp b/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.cpp index 74bf06994..6752bbf33 100644 --- a/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fs/class_stat/stat_n_exporter.cpp @@ -244,7 +244,7 @@ napi_value StatNExporter::GetAtimeNs(napi_env env, napi_callback_info info) return nullptr; } - return NVal::CreateBigIntUint64(env, static_cast + return NVal::CreateBigIntUint64(env, static_cast (statEntity->stat_.st_atim.tv_sec * SECOND_TO_NANOSECOND + statEntity->stat_.st_atim.tv_nsec)).val_; } @@ -264,7 +264,7 @@ napi_value StatNExporter::GetMtimeNs(napi_env env, napi_callback_info info) return nullptr; } - return NVal::CreateBigIntUint64(env, static_cast + return NVal::CreateBigIntUint64(env, static_cast (statEntity->stat_.st_mtim.tv_sec * SECOND_TO_NANOSECOND + statEntity->stat_.st_mtim.tv_nsec)).val_; } @@ -284,7 +284,7 @@ napi_value StatNExporter::GetCtimeNs(napi_env env, napi_callback_info info) return nullptr; } - return NVal::CreateBigIntUint64(env, static_cast + return NVal::CreateBigIntUint64(env, static_cast (statEntity->stat_.st_ctim.tv_sec * SECOND_TO_NANOSECOND + statEntity->stat_.st_ctim.tv_nsec)).val_; } diff --git a/utils/filemgmt_libn/include/n_val.h b/utils/filemgmt_libn/include/n_val.h index 522227d04..bc71f9536 100644 --- a/utils/filemgmt_libn/include/n_val.h +++ b/utils/filemgmt_libn/include/n_val.h @@ -64,7 +64,7 @@ public: /* Static helpers to create js objects */ static NVal CreateUndefined(napi_env env); static NVal CreateBigInt64(napi_env env, int64_t val); - static NVal CreateBigIntUint64(napi_env env, int64_t val); + static NVal CreateBigIntUint64(napi_env env, uint64_t val); static NVal CreateInt64(napi_env env, int64_t val); static NVal CreateInt32(napi_env env, int32_t val); static NVal CreateUint32(napi_env env, int32_t val); diff --git a/utils/filemgmt_libn/src/n_val.cpp b/utils/filemgmt_libn/src/n_val.cpp index 0c6368e09..92932a75b 100644 --- a/utils/filemgmt_libn/src/n_val.cpp +++ b/utils/filemgmt_libn/src/n_val.cpp @@ -315,7 +315,7 @@ NVal NVal::CreateBigInt64(napi_env env, int64_t val) return { env, res }; } -NVal NVal::CreateBigIntUint64(napi_env env, int64_t val) +NVal NVal::CreateBigIntUint64(napi_env env, uint64_t val) { napi_value res = nullptr; napi_create_bigint_uint64(env, val, &res); -- Gitee