From 290c57dd1966149a53e20cd606bcb7e5afcdc923 Mon Sep 17 00:00:00 2001 From: xuerunlong Date: Wed, 3 Apr 2024 11:39:09 +0800 Subject: [PATCH] Bugfix for watcher, add get real path. Signed-off-by: xuerunlong --- .../kits/js/src/mod_fs/properties/watcher.cpp | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/interfaces/kits/js/src/mod_fs/properties/watcher.cpp b/interfaces/kits/js/src/mod_fs/properties/watcher.cpp index 64423c34d..828135468 100644 --- a/interfaces/kits/js/src/mod_fs/properties/watcher.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/watcher.cpp @@ -43,6 +43,19 @@ static tuple CreateAndCheckForWatcherEntity(napi_env env) return {objWatcher, ERRNO_NOERR}; } +static int GetRealPath(string &path) +{ + auto absPath = CreateUniquePtr(PATH_MAX + 1); + if (absPath == nullptr) { + return ENOMEM; + } + if (realpath(path.c_str(), absPath.get()) == nullptr) { + return errno; + } + path = string(absPath.get()); + return ERRNO_NOERR; +} + shared_ptr ParseParam(const napi_env &env, const napi_callback_info &info, int32_t &errCode) { NFuncArg funcArg(env, info); @@ -58,6 +71,13 @@ shared_ptr ParseParam(const napi_env &env, const napi_callback_i errCode = EINVAL; return nullptr; } + string absFileName(filename.get()); + int realPathRes = GetRealPath(absFileName); + if (realPathRes != ERRNO_NOERR) { + HILOGE("Failed to get real path, ret: %{public}d.", realPathRes); + NError(realPathRes).ThrowErr(env); + return nullptr; + } auto [succGetEvent, events] = NVal(env, funcArg[NARG_POS::SECOND]).ToInt32(); if (!succGetEvent || events <= 0 || !FileWatcher::GetInstance().CheckEventValid(events)) { @@ -79,7 +99,7 @@ shared_ptr ParseParam(const napi_env &env, const napi_callback_i } infoArg->events = static_cast(events); infoArg->env = env; - infoArg->fileName = string(filename.get()); + infoArg->fileName = absFileName; return infoArg; } -- Gitee