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 deba81feed82a59427b69ff0fa53a663cf0f6989..6752bbf33c8a7d3fb7110e916be19baf44438622 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 9374d57847addd809a58b8c1883b4026c91a26fa..edb5bbfed5e35e70bbbb1938c0f3dfa11c3ec171 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 dd1ccade182b7b2397ece37dfac2ddff71a5cf71..bc71f95367d39ec90d54bbd66ef257d5ee1a9753 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, 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 fbaa2cba0c6e876fb7dec528d98e514ccd46fce8..92932a75b9a445066c361bcd3d0bc8acf0757705 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, uint64_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;